|
|
|
| Есть таблица:
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 "Запись изменена";
}
?>
|
То он просто обнуляет все переменные, и ничего не записывает, помогите пожалуйста, спасибо!!! | |
|
|
|
|
|
|
|
для: 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'].", ...." | |
|
|
|
|
|
|
|
для: mechanic
(01.12.2006 в 14:07)
| | Ошибок никаких не выдает, просто "0" записывает в строки и все.
Просто если я изменяю через форму updateform.php только значение ro, мне нужно чтобы в базе значения q и pr остались такими же, а он "0" из них делает... | |
|
|
|
|
|
|
|
для: Front
(01.12.2006 в 17:40)
| | так ты зделай проще когда у тя идеть редактирование то в ячейки соответствующие вставляй данные из бд и тогда хоть заизменяйся в ечейках данные просто перезапишуться!
add=1 тобишь добавляем
edit=1 тобишь редактируем
2 формы 1 для добавления
вторая для редактирования! | |
|
|
|
|
|
|
|
для: ShadowXak
(01.12.2006 в 19:10)
| | А немогли бы Вы поподробнее объяснить...? | |
|
|
|
|
|
|
|
для: 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". | |
|
|
|
|
|
|
|
для: Front
(04.12.2006 в 14:37)
| | если остальные поля не выбраны, они и равны 0. надо обновлять только те поля, которые выбраны. | |
|
|
|
|
|
|
|
для: elenaki
(04.12.2006 в 14:43)
| | А как передать обрабьотчику только те поля, которые я исправил...? | |
|
|
|
|
|
|
|
для: Front
(04.12.2006 в 14:49)
| | надо обновлять только те поля, которые не равны 0 или заполнять поля в форме старыми
значениями | |
|
|
|
|
|
|
|
для: 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 в таблице? | |
|
|
|
|
|
|
|
для: Serrrgio
(05.12.2006 в 13:24)
| | Все разобрался, всем спасибо...:-)) | |
|
|
|
|
автор: Serrrgio (05.12.2006 в 14:29) |
|
|
для: Front
(05.12.2006 в 14:04)
| | что было-то? | |
|
|
|
|
|
|
|
для: 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']."'";
|
И напутал с переменными в форме, спасибо всем...за помощь.. | |
|
|
|