Версия для печати темы
Форум веб-мастеров _ Базы данных (MySQL, PostgreSQL, ODBC, ...) _ UPDATE завел в тупик
Автор: EGORR 13.1.2008, 1:08
Пишу небольшой сайт. Там должен быть раздел Вопрос-Ответ.
Страница добавления в Вопрос-Ответ никаких затруднений не вызвала.
А вот редактирование сообщений застопорилось на UPDATE.
Ни за что не хочет апдатить! Целый день искал ошибку, все перепробывал, всё что касается UPDATE прочитал, по сети в поисках решения пошлялся... Без толку...
Страница выбора сообщения для редактирования наполняется списком из базы, вставляя попутно в ссылку на обработчик ID выбранного сообщения.
Код
<a href=edit_faq_dg.php?idfaq='.$row['id_faq'].'>Редактировать</a>
На странице обработчика беру ID из $_GET['idfaq'].
Код
$id = $_GET['idfaq'];
По полученному ID выбираю записи ему соответствующие.
Код
$query = "SELECT * FROM faq WHERE id_faq= '$id'";
Раскладываю их по формам (method="POST").
До сих пор все молотит как надо.
Юзер жмет submit.
Получаю
Код
$question = $_POST['question'];
$answer = $_POST['answer'];
$hide = $_POST['hide'];.
Пишу запрос на UPDATE
Код
$query = "UPDATE `faq` SET
question ='$question',
answer ='$answer'
WHERE id_faq =$id";
$query_result = mysql_query($query);
if(!$query_result )
die ("Невозможно выполнить: " .mysql_error());
и т. д.
И ничего не происходит... данные нипочем не желают обновляться!
Меня эта проблема уже достала! Решение наверняка окажется простым до банальности, но я него сам найти уже отчаялся.
Что я напорол, где косяк, надоумьте!...
Автор: gid 13.1.2008, 11:00
Да, странная ошибка.
Возможные причины:
1. У пользователя БД нет права на обновление таблиц
2. Возможно из-за версии mysql придется заменить часть запроса:
Код
$query = "UPDATE `faq` SET
question ='$question',
answer ='$answer'
WHERE id_faq =$id";
на
Код
$query = "UPDATE `faq` SET
`question` ='$question',
`answer` ='$answer'
WHERE `id_faq` =$id";
3. Может быть не все данные получены верно (присутствие невидимых символов \r,\n,\t...) или вообще не получены. Поэтому перед запросом лучше всего выводить значение переменной $query, и смотреть, что в запросе не так. Если окажется что виноваты невидимые символы в конце или начале, то функция
trim(), применяемая ко всем значениям полученным из
$_POST[] должна помочь.
Автор: EGORR 13.1.2008, 14:14
Спасибо за ответ.
1. Права разрулены норально. Обновление другого раздела проходит без проблем.
2. Я об этом думал. Пробовал. Результат - 0! Похоже не в этом дело!
3. поскольку данные берутся из БД, они уже обработаны, и тримом в том числе. Пробуя, я не вносил никаких зарез-ных символов. Но результат по-прежнему - 0!
Меня эта проблема просто бесит! Стала навязчивой идеей.
Автор: gid 13.1.2008, 15:56
А если этот же самый проблемный запрос через phpMyAdmin попробовать выполнить? Может он какую ни будь ошибку выдаст.
Еще может быть, но маловероятно что поможет: сделать поле id_faq индексом для таблицы.
А вообще, можно на весь код взглянуть (как скрипта, так и на структуру таблицы), может что увижу, чего не видите вы?
Автор: EGORR 13.1.2008, 19:00
Код
<?php require_once('../../../www/config.php');
$id = intval($_GET['idfaq']);
$query = "SELECT * FROM faq WHERE id_faq= '$id'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
?>
<form action="<? echo $PHP_SELF; ?>" method="POST" style="margin:5px">
ID<br />
<input name="id" type="text" id="id" value="<?php echo $row['id_faq']; ?>" size="50" />
<br>
Вопрос<br />
<textarea name="question" cols="50" rows="3" id="question"><?php echo $row['question']; ?></textarea>
<br>Ответ<br />
<textarea name="answer"cols="50" rows="3" id="answer"><?php echo $row['answer']; ?></textarea>
<br>
Статус сообщения<br />
<select name="hide" id="hide">
<option value="show" <?php if (!(strcmp("show", $row['hide']))) {echo "selected=\"selected\"";} ?>>ВКЛЮЧЕН</option><option value="hide" <?php if (!(strcmp("hide", $row['hide']))) {echo "selected=\"selected\"";} ?>>ВЫКЛЮЧЕН</option>
</select>
<br /><br />
<input type="submit" name="faq_button" id="faqe_button" value="Изменить">
</form>
<?php
$id_1 = $row['id_faq'];
$question = $_POST['question'];
$answer = $_POST['answer'];
$hide = $_POST['hide'];
$link = mysql_connect($dblocation,$dbuser,$dbpasswd);
$db = mysql_select_db($dbname,$link);
$query = "UPDATE `faq` SET
question ='.$question.',
answer ='.$answer.'
WHERE id_faq ='.$id.'";
$query_result = mysql_query($query, $link);
if(!$query_result )
die ("Невозможно выполнить: " .mysql_error());
echo "<h2>Запись обновлена ".mysql_affected_rows()."</h2>";
?>
Цитата
А если этот же самый проблемный запрос через phpMyAdmin попробовать выполнить?
Спасибо! Ща попробую!
Поле id_faq и есть индекс (int(11), auto_increment PRIMARY)
Автор: gid 13.1.2008, 19:08
Ошибку можно сказать нашол:
Код
$db = mysql_select_db($dbname,$link);
$query = "UPDATE `faq` SET
question ='.$question.',
answer ='.$answer.'
WHERE id_faq ='.$id.'";
должно быть:
Код
$db = mysql_select_db($dbname,$link);
$query = "UPDATE `faq` SET
question ='$question',
answer ='$answer'
WHERE id_faq ='$id'";
Всему виной точки, которыми вы возможно хотели соединить значения переменных и текст...
Автор: EGORR 13.1.2008, 19:12
gid, вот спасибо!
Я-то просой вещи не догнал.
Сейчас средствами phpMyAdmin был сделан запрос.
Код
SQL-запрос:
UPDATE `faq` SET `question` = 'Какие новости?',
`answer` = 'Нет никаких новостей' WHERE `id_faq` = '44'
Без малейших замечаний. Ни один МуСкуL не дрогнул!
Значит ошибка в PHP! Круг сузился.
Проблему это не решает, но надежду дает!
Уважаемый модер, преноси топик в PHPовый форум, а то ругаться за оффтоп станешь.
Автор: EGORR 13.1.2008, 21:18
Цитата(gid @ 13.1.2008, 17:08)

Ошибку можно сказать нашол:
Код
$db = mysql_select_db($dbname,$link);
$query = "UPDATE `faq` SET
question ='.$question.',
answer ='.$answer.'
WHERE id_faq ='.$id.'";
должно быть:
Код
$db = mysql_select_db($dbname,$link);
$query = "UPDATE `faq` SET
question ='$question',
answer ='$answer'
WHERE id_faq ='$id'";
Всему виной точки, которыми вы возможно хотели соединить значения переменных и текст...
Нет, это я от полного отчаянья все возможные и невозможные варианты написания пробовал.
Убрал я эти точки. Делал обработку mysql_real_escape_string-ом, trim-ом. Все бесполезно!
Не работает!....
Автор: gid 13.1.2008, 21:34
А если сделать проверку на валидность соединения с mysql-сервером и выбор БД? Может проблема возникает еще до выполнения запроса?
Автор: EGORR 13.1.2008, 23:01
Проблема решена!
Подсказал уважаемый jbs с родственного форума.
Дело было в том, что до запроса не доходило значение $id.
И в точках.
Вот рабочий код
Код
<?php require_once('../../../www/config.php');
$id = intval($_GET['idfaq']);
$query = "SELECT * FROM faq WHERE id_faq= '$id'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
?>
<form action="<? echo $PHP_SELF; ?>" method="POST" style="margin:5px">
ID<br />
<input name="id" type="text" id="id" value="<?php echo $row['id_faq']; ?>" size="50" />
<br>
Вопрос<br />
<textarea name="question" cols="50" rows="3" id="question"><?php echo $row['question']; ?></textarea>
<br>Ответ<br />
<textarea name="answer"cols="50" rows="3" id="answer"><?php echo $row['answer']; ?></textarea>
<br>
Статус сообщения<br />
<select name="hide" id="hide">
<option value="show" <?php if (!(strcmp("show", $row['hide']))) {echo "selected=\"selected\"";} ?>>ВКЛЮЧЕН</option><option value="hide" <?php if (!(strcmp("hide", $row['hide']))) {echo "selected=\"selected\"";} ?>>ВЫКЛЮЧЕН</option>
</select>
<br /><br />
<input type="submit" name="faq_button" id="faqe_button" value="Изменить">
</form>
<?php
$id = $_POST['id'];
$question = $_POST['question'];
$answer = $_POST['answer'];
$hide = $_POST['hide'];
$link = mysql_connect($dblocation,$dbuser,$dbpasswd);
$db = mysql_select_db($dbname,$link);
$query = "UPDATE faq SET question ='$question', answer ='$answer' WHERE id_faq ='$id'";
$query_result = mysql_query($query, $link);
if(!$query_result )
die ("Невозможно выполнить: " .mysql_error());
echo "<h2>Запись обновлена ".mysql_affected_rows()."</h2>";
?>
Спасибо всем, кто откликнулся!
Invision Power Board ()
© Invision Power Services ()