веб-мастеру блог веб-мастера Статьи Веб-Мастера SEO Tools книги веб-мастеру

IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> UPDATE завел в тупик, Помогите разобраться...
EGORR
сообщение 13.1.2008, 2:08
Сообщение #1


Новичок
**

Группа: Свои
Сообщений: 12
Регистрация: 10.1.2008
Пользователь №: 492



Пишу небольшой сайт. Там должен быть раздел Вопрос-Ответ.
Страница добавления в Вопрос-Ответ никаких затруднений не вызвала.
А вот редактирование сообщений застопорилось на 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, 12:00
Сообщение #2


Администратор форума
*****

Группа: Главные администраторы
Сообщений: 617
Регистрация: 27.11.2006
Из: Россия
Пользователь №: 1



Да, странная ошибка.

Возможные причины:
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, 15:14
Сообщение #3


Новичок
**

Группа: Свои
Сообщений: 12
Регистрация: 10.1.2008
Пользователь №: 492



Спасибо за ответ.
1. Права разрулены норально. Обновление другого раздела проходит без проблем.
2. Я об этом думал. Пробовал. Результат - 0! Похоже не в этом дело!
3. поскольку данные берутся из БД, они уже обработаны, и тримом в том числе. Пробуя, я не вносил никаких зарез-ных символов. Но результат по-прежнему - 0!
Меня эта проблема просто бесит! Стала навязчивой идеей.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
gid
сообщение 13.1.2008, 16:56
Сообщение #4


Администратор форума
*****

Группа: Главные администраторы
Сообщений: 617
Регистрация: 27.11.2006
Из: Россия
Пользователь №: 1



А если этот же самый проблемный запрос через phpMyAdmin попробовать выполнить? Может он какую ни будь ошибку выдаст.

Еще может быть, но маловероятно что поможет: сделать поле id_faq индексом для таблицы.

А вообще, можно на весь код взглянуть (как скрипта, так и на структуру таблицы), может что увижу, чего не видите вы?


--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
EGORR
сообщение 13.1.2008, 20:00
Сообщение #5


Новичок
**

Группа: Свои
Сообщений: 12
Регистрация: 10.1.2008
Пользователь №: 492



Код
<?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, 20:08
Сообщение #6


Администратор форума
*****

Группа: Главные администраторы
Сообщений: 617
Регистрация: 27.11.2006
Из: Россия
Пользователь №: 1



Ошибку можно сказать нашол:
Код
   $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, 20:12
Сообщение #7


Новичок
**

Группа: Свои
Сообщений: 12
Регистрация: 10.1.2008
Пользователь №: 492



gid, вот спасибо!
Я-то просой вещи не догнал.
Сейчас средствами phpMyAdmin был сделан запрос.

Код
SQL-запрос:
UPDATE `faq` SET `question` = 'Какие новости?',
`answer` = 'Нет никаких новостей' WHERE `id_faq` = '44'


Без малейших замечаний. Ни один МуСкуL не дрогнул!
Значит ошибка в PHP! Круг сузился.
Проблему это не решает, но надежду дает!
Уважаемый модер, преноси топик в PHPовый форум, а то ругаться за оффтоп станешь.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
EGORR
сообщение 13.1.2008, 22:18
Сообщение #8


Новичок
**

Группа: Свои
Сообщений: 12
Регистрация: 10.1.2008
Пользователь №: 492



Цитата(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, 22:34
Сообщение #9


Администратор форума
*****

Группа: Главные администраторы
Сообщений: 617
Регистрация: 27.11.2006
Из: Россия
Пользователь №: 1



А если сделать проверку на валидность соединения с mysql-сервером и выбор БД? Может проблема возникает еще до выполнения запроса?


--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
EGORR
сообщение 14.1.2008, 0:01
Сообщение #10


Новичок
**

Группа: Свои
Сообщений: 12
Регистрация: 10.1.2008
Пользователь №: 492



Проблема решена!
Подсказал уважаемый 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>";  
?>

Спасибо всем, кто откликнулся!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Быстрый ответОтветить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 25.7.2008, 17:14
^ ВВЕРХ ^

Посетите наши проекты:
php скрипты скачать
delphi исходники