обновление таблицы через php mysql - PullRequest
0 голосов
/ 14 мая 2009

Это мой код для обновления таблицы. Моя проблема заключается в том, что после отправки новой записи я не могу обновить в первый раз (она отображается пустой), но во второй раз она работает нормально.

Еще одна вещь: когда я удаляю оператор include, он отлично работает на submessage.php, там нет никакого phpcode. [annakata: я понятия не имею, что это значит]

$pid = $_GET['id'];
$title = $_POST['title'];
$summary = $_POST['summary'];
$content = $_POST['content'];
$catid = $_POST['cid'];
$author = $_POST['author'];
$keyword = $_POST['keyword'];
$result1= mysql_query("update listing set catid='$catid',title='$title',
summary='$summary',content='$content', author='$author', keyword='$keyword' where pid='$pid'",$db);
    include("submessage.php");

Ответы [ 3 ]

1 голос
/ 14 мая 2009

Почему бы просто не перенаправить на submessage.php, а не вставить его? Перенаправление также предотвращает дублирование операций с БД при обновлении страницы пользователем. Просто замените include заявление на:

header('Location: submessage.php?id=' . $pid);
die();

Кроме того, перед развертыванием приложения: НИКОГДА НЕ НАПРАВЛЯЙТЕ ПОЛЬЗОВАТЕЛЬСКИЙ ВХОД В SQL QUERY Вместо этого вы должны использовать связанные параметры. В противном случае, вы также можете публично объявить пароль администратора вашей базы данных. Читайте больше на PDO и подготовленных заявлениях в http://ie.php.net/pdo

Вот как бы я это сделал:

$pdo = new PDO(....); // some configuration parameters needed
$sql = "
    UPDATE listing SET
        catid=:catid, title=:title, summary=:summary,
        content=:content, author=:author, keyword=:keyword
    WHERE pid=:pid
";
$stmt = $pdo->prepare($sql);
$stmt->bindValue('catid', $_POST['catid']);
$stmt->bindValue('title', $_POST['title']);
$stmt->bindValue('summary', $_POST['summary']);
$stmt->bindValue('content', $_POST['content']);
$stmt->bindValue('author', $_POST['author']);
$stmt->bindValue('keyword', $_POST['keyword']);
$stmt->bindValue('pid', $pid = $_GET['id']);
$stmt->execute();

header('Location: submessage.php?id=' . $pid);
die();

Или, на самом деле, я бы использовал какое-то решение ORM, чтобы оно выглядело примерно так:

$listing = Listing::getById($pid = $_GET['id']);
$listing->populate($_POST);
$listing->save();

header('Location: submessage.php?id=' . $pid);
die();
1 голос
/ 14 мая 2009

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

0 голосов
/ 14 мая 2009

Кроме обычных предупреждений о внедрении SQL - очень вероятно, учитывая ваш код и откуда вы получаете параметры запроса (без проверки), тогда вполне возможно, что ваша проблема не имеет ничего общего с запросами, особенно если это работает на последующих попытках. Вы уверены, что $ _GET ['id'] устанавливается при первом вызове скрипта?

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

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