PHP / MySQL обновляет запись новостей в проблеме с базой данных - PullRequest
1 голос
/ 26 сентября 2008

У меня есть этот код PHP, который я пытаюсь использовать, чтобы позволить пользователю редактировать запись новостей в форме, а затем, когда он нажимает кнопку отправки, он обновляет запись в базе данных. Проблема в том, что все работает, но запись фактически не обновляется в базе данных.

Может ли кто-нибудь взглянуть на мой код и увидеть, где может возникнуть проблема?

<?php
    $title = "Edit News";
    include("../includes/header.php");
    include("../includes/database.php");
    $done = false;
    $expected = array('newstitle', 'newscontent', 'id');
    if ($_GET && !$_POST) { 
        if (isset($_GET['id']) && is_numeric($_GET['id'])) { 
            $id = $_GET['id']; 
        } 
        else { 
            $id = NULL; 
        } 
        if ($id) { 
            $sql = "SELECT * FROM news WHERE id = $id"; 
            $result = mysql_query($sql) or die ("Error connecting to database..."); 
            $row = mysql_fetch_assoc($result);
        } 
        // if form has been submitted, update record 
        if (array_key_exists('update', $_POST)) { 
            // prepare expected items for insertion into database 
            foreach ($_POST as $key => $value) { 
                if (in_array($key, $expected)) { 
                    ${$key} = mysql_real_escape_string($value); 
                } 
            } 
            // abandon the process if primary key invalid 
            if (!is_numeric($id)) { 
                die('Invalid request'); 
            }
            // prepare the SQL query 
            $query = "UPDATE news SET title = '$title', content = '$content' WHERE id = $id"; 
            // submit the query 
            $done = mysql_query($query) or die("Error connecting to database..."); 
        }
    }
    // redirect page if $id is invalid 
    if ($done) { 
        header("Location: $ROOT/admin/listnews.php"); 
        exit; 
    }
?>

Ответы [ 6 ]

5 голосов
/ 26 сентября 2008
if ($_GET && !$_POST) { 

...

if (array_key_exists('update', $_POST)) { 

Разве это не гарантирует, что код обновления никогда не сработает?

0 голосов
/ 26 сентября 2008

Возьмите это выражение if из вложенного if:


 if (array_key_exists('update', $_POST)) { 
...
}

и затем добавьте это условие:



 if (count($_POST) && array_key_exists('update', $_POST)) { 
...
}

Я почти уверен, что позаботится о вашей проблеме.

0 голосов
/ 26 сентября 2008

Немного сложно точно знать, что происходит, не видя HTML-источник вашей формы, но я думаю, что

if (array_key_exists('update', $_POST)) {

блок нужно переместить из внешнего if, так как он никогда не будет выполнен, если он там есть.

Если вы не хотите использовать какую-либо среду тестирования, print() ваш друг, когда дело доходит до отладки вашего кода. Попробуйте найти то, что выполняется, а что нет; вы быстро обнаружите, какие из ваших предположений неверны и, следовательно, где ошибка.

0 голосов
/ 26 сентября 2008

Несколько вещей, чтобы попытаться сузить проблему:

  • Выведите некоторый отладочный текст прямо внутри блока if (array_key_exists('update', $_POST)) , чтобы убедиться, что вы действительно туда попали. Верхняя часть вашего «если» - if($_GET && !$_POST), поэтому вам может потребоваться изменить это $_POST на $_GET
  • Вы пытались повторить $query как раз перед вызовом db? Это работает на интерфейсе командной строки mysql хорошо?
  • если мое прочтение вашего foreach ($_POST as $key => $value) правильное, вы в конечном итоге зададите переменные с теми же именами, что и в $expected - ($newstitle, $newscontent, $id) - но в ваших ссылках sql $content и $title , Они могут быть причиной этой ошибки, но что-то, за чем нужно следить.
0 голосов
/ 26 сентября 2008

Должны ли $ content и $ title в строке ниже быть $ newstitle и $ newscontent?

// prepare the SQL query 
$query = "UPDATE news SET title = '$newstitle', content = '$newscontent' WHERE id = $id";
0 голосов
/ 26 сентября 2008

Если вы запускаете это ОБНОВЛЕНИЕ из mysql cli с теми же данными, которые отправляет пользователь, обновляется ли оно?

Если не проверять экранирование символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...