Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не обновляется запись, help...
 
 автор: Front   (01.12.2006 в 12:35)   письмо автору
 
 

Есть таблица:

CREATE table proba (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
q int unsigned,
ro char(30) not null,
pr char(20) not null)";



Цель обновить запись в таблице...

Вывожу записи в браузер c ссылкой на форму updateform:


$sql="select*from proba";
$result=mysql_query ($sql);
$rows = mysql_num_rows ($result);


for ($i=0;$i<$rows;$i++)
{
$arr_quest=mysql_fetch_array($result);
echo "<tr>";
echo "<td><a href=updateform.php?id=".$arr_quest['id'].">Изменить</a></td>"; 
echo "<td>".htmlspecialchars($arr_quest["q"])."</td>";
echo "<td>".htmlspecialchars($arr_quest["ro"])."</td>";
echo "<td>".htmlspecialchars($arr_quest["pr"])."</td>";


По ссылке перехожу к форме, где правлю данные:

<form method="post" action="update.php">  
<input type=hidden name=id value=<?php echo $id?>
<td>
<table>
<td>q:</td>
<tr>
<td>
<SELECT class=1 NAME="q" size="10">

<OPTION value="<?php $q?>"><?php echo $arr_quest["q"]; ?></OPTION>
  <OPTION value="1">1</OPTION>
  <OPTION VALUE="2">2</OPTION>
  <OPTION VALUE="3">3</OPTION>
  <OPTION VALUE="4">4</OPTION>
  <OPTION VALUE="5">5</OPTION>
  <OPTION VALUE="6">6</OPTION>
  <OPTION VALUE="7">7</OPTION>
  <OPTION VALUE="8">8</OPTION>
  <OPTION VALUE="9">9</OPTION>
  <OPTION VALUE="10">10</OPTION>
</SELECT></td></tr>
</table>
</td>

<td valign="top">
<table class="1" cellpadding="3" cellspacing="0">
<td>Количество комнат:</td>
<tr>
<td>
<input class="1" type="text" value="<?php echo $arr_quest["ro"]; ?>" name="ro" maxlength="120" size="40"></td>
<input class="1" type="text" value="<?php echo $arr_quest["pr"]; ?>" name="pr" maxlength="120" size="40"></td>
</table>

Данные из этой формы передаются обработчику update.php:



$where[] = "1=1"; 
  if(!empty($_POST['q'])) $where[] = "q = ".$_POST['q']; 
  if(!empty($_POST['ro'])) $where[] = "ro = ".$_POST['ro']; 
  if(!empty($_POST['pr'])) $where[] = "pr = ".$_POST['pr']; 
  
  
$query = "UPDATE proba SET ".implode(" , ", $where)." WHERE id=".$_POST['id']; 


mysql_query($query);
if(mysql_query($query))  
  {  
    echo "Запись изменена";  
  } 

?>


Проблема в том, что если изсправляет только переменную $ro он не меняет значение, а остается таким же, а если использовать обработчик:



$query = "UPDATE proba SET q = '".$_POST['q']."',
ro = '".$_POST['ro']."', 
pr = '".$_POST['pr']."',
  WHERE id=".$_POST['id'];
mysql_query($query);
if(mysql_query($query))  
  {  
    echo "Запись изменена";  
  } 

?>

То он просто обнуляет все переменные, и ничего не записывает, помогите пожалуйста, спасибо!!!

   
 
 автор: mechanic   (01.12.2006 в 14:07)   письмо автору
 
   для: Front   (01.12.2006 в 12:35)
 

если ничего не записывает, должна возвращаться ошибка, ошибку в студию!
во первых $where[] = "1=1"; лушче заменить на $where[] = array(); или вообще убрать
во вторых добавить кавычки и апострофы здесь
if(!empty($_POST['ro'])) $where[] = "`ro` = '".$_POST['ro']."'";
if(!empty($_POST['pr'])) $where[] = "`pr` = '".$_POST['pr']."'";

в последнем куске кода
$query = "UPDATE proba SET q = '".$_POST['q']."',
ro = '".$_POST['ro']."',
pr = '".$_POST['pr']."',
WHERE id=".$_POST['id'];
не нужно заключать значение $_POST['q'] в апострофы, ибо это число
пишется так "...SET q = ".(int)$_POST['q'].", ...."

   
 
 автор: Front   (01.12.2006 в 17:40)   письмо автору
 
   для: mechanic   (01.12.2006 в 14:07)
 

Ошибок никаких не выдает, просто "0" записывает в строки и все.
Просто если я изменяю через форму updateform.php только значение ro, мне нужно чтобы в базе значения q и pr остались такими же, а он "0" из них делает...

   
 
 автор: ShadowXak   (01.12.2006 в 19:10)   письмо автору
 
   для: Front   (01.12.2006 в 17:40)
 

так ты зделай проще когда у тя идеть редактирование то в ячейки соответствующие вставляй данные из бд и тогда хоть заизменяйся в ечейках данные просто перезапишуться!

add=1 тобишь добавляем
edit=1 тобишь редактируем

2 формы 1 для добавления
вторая для редактирования!

   
 
 автор: Front   (04.12.2006 в 10:06)   письмо автору
 
   для: ShadowXak   (01.12.2006 в 19:10)
 

А немогли бы Вы поподробнее объяснить...?

   
 
 автор: Front   (04.12.2006 в 14:37)   письмо автору
 
   для: Front   (04.12.2006 в 10:06)
 

Народ, ну че никто не подскажет чтоли:
Уже заколебался, записи обновляются, но если менять значение только одного поля, то все остальные становятся "0".
Это про вариант кода

$query = "UPDATE proba SET q = '".$_POST['q']."', 
ro = '".$_POST['ro']."',  
pr = '".$_POST['pr']."', 
  WHERE id=".$_POST['id']; 
mysql_query($query); 
if(mysql_query($query))   
  {   
    echo "Запись изменена";   
  }  

?> 


Может быть проблема в select при передаче значения...?
Все перепутал, извиняюсь,
Если один select c q, то все нормально. А вот если допустим еще добавить такое же поле как и q, тоже с селектом, то если меняешь только в одном поле, в другом селекте остается "0".

   
 
 автор: elenaki   (04.12.2006 в 14:43)   письмо автору
 
   для: Front   (04.12.2006 в 14:37)
 

если остальные поля не выбраны, они и равны 0. надо обновлять только те поля, которые выбраны.

   
 
 автор: Front   (04.12.2006 в 14:49)   письмо автору
 
   для: elenaki   (04.12.2006 в 14:43)
 

А как передать обрабьотчику только те поля, которые я исправил...?

   
 
 автор: elenaki   (04.12.2006 в 14:51)   письмо автору
 
   для: Front   (04.12.2006 в 14:49)
 

надо обновлять только те поля, которые не равны 0 или заполнять поля в форме старыми
значениями

   
 
 автор: Front   (05.12.2006 в 12:31)   письмо автору
 
   для: elenaki   (04.12.2006 в 14:51)
 

Хочу задать вопрос по другому:
Из формы updateform.php, я передаю значения полей id, q,pr,ro в скрипт:

$q=$_POST['q'];
$ro=$_POST['ro'];
$pr=$_POST['pr'];
$id=$_POST['id'];
$query="update proba set q='$q', pr='$pr', ro='$ro' where (id='$id')";
mysql_affected_rows();

mysql_query($query);
if(mysql_query($query))  
  {  
    echo "Запись изменена";  
  } 


Если при этом я меняю в форме значения переменных, все нормально, если просто в форме нажимаю кнопку обновить, то запись в базе обнуляется, т.е. q=0, pr=0, ro=0.
Как мне при изменении одного параметра, например q, оставить неизменными другие

Перепробовал по всякомо, ничего не получается... :-((

   
 
 автор: Serrrgio   (05.12.2006 в 13:24)
 
   для: Front   (05.12.2006 в 12:31)
 

зачем mysql_affected_rows?

перед запросом в БД: print $query;
что показывает? и существует такой id в таблице?

   
 
 автор: Front   (05.12.2006 в 14:04)   письмо автору
 
   для: Serrrgio   (05.12.2006 в 13:24)
 

Все разобрался, всем спасибо...:-))

   
 
 автор: Serrrgio   (05.12.2006 в 14:29)
 
   для: Front   (05.12.2006 в 14:04)
 

что было-то?

   
 
 автор: Front   (05.12.2006 в 17:59)   письмо автору
 
   для: Serrrgio   (05.12.2006 в 14:29)
 

Неправильный синтаксис:
Надо было:


if(!empty($_POST['q'])) $where[] = "q = ".$_POST['q']; 
  if(!empty($_POST['ro'])) $where[] = "'ro' = ".$_POST['ro']; 
  if(!empty($_POST['pr'])) $where[] = "`pr` = '".$_POST['pr']."'";


И напутал с переменными в форме, спасибо всем...за помощь..

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования