|
|
|
| Помощь нужна...
Содержимое базы выводится на экран в виде таблицы , каждое поле в виде текстового поля для ввода данных со опред-ым значением из базы, для того, чтобы сразу можно было внести изменения в любые места таблицы и при нажатии на кнопку все они принялись бы в базе.
Вот код кот. выводит значения из базы и представляет каждое поле в виде текстового поля для ввода данных., но как запомнить все изменения и сохранить в таблицу.....:(((
<?
$rez = mysql_query("SELECT * FROM table",$db);
if($rez)
{
echo "<table border=1 bgcolor='#F1F1F1'>\n";
while($myrow=mysql_fetch_array($rez))
{
echo "<tr>
<td><input type =\"text\" name=\"new_phone\" value =\"$myrow[2]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_name\" value =\"$myrow[3]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_job\" value =\"$myrow[4]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_adres\" value =\"$myrow[5]\" size=\"10\"></td></tr>";
}
echo "</table>";
}?>
<input name='change' valign="right" type='submit' value='внести изменения'>
|
| |
|
|
|
|
|
|
|
для: lilu
(09.04.2007 в 16:49)
| | Ну а потом элементы массива $_РОSТ использовать в запросе на изменение
"UРDАТЕ таblе SЕТ fiеld_1=".$_РОSТ['nеw_рhоnе'].", fiеld_2=".$_РОSТ['nеw_nаmе'].", ... , fiеld_n=".$_РОSТ['nеw_']."
|
| |
|
|
|
|
|
|
|
для: mehelson
(09.04.2007 в 17:59)
| | Вы имеете ввиду так:
<?
$rez = mysql_query("SELECT * FROM table",$db);
if($rez)
{
echo "<table border=1 bgcolor='#F1F1F1'>\n";
while($myrow=mysql_fetch_array($rez))
{
echo "<tr>
<td><input type =\"text\" name=\"new_phone\" value =\"$myrow[2]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_name\" value =\"$myrow[3]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_job\" value =\"$myrow[4]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_adres\" value =\"$myrow[5]\" size=\"10\"></td></tr>";
}
echo "</table>";
}?>
<input name='change' valign="right" type='submit' value='внести изменения'>
<?
if ($change) { mysql_query("UРDАТЕ таblе SЕТ fiеld_1=".$_РОSТ['nеw_рhоnе'].", fiеld_2=".$_РОSТ['nеw_nаmе'].", ... , fiеld_n=".$_РОSТ['nеw_'].",$db);}
?>
|
Вся беда в том, что за пределами while переменные пустые, а внутри цикла - запоминаются только последние значения.... | |
|
|
|
|
|
|
|
для: lilu
(09.04.2007 в 16:49)
| | А первичный ключ у рассматриваемой таблицы есть? | |
|
|
|
|
|
|
|
для: Trianon
(09.04.2007 в 18:18)
| | есть конечно - id (auto_increment) | |
|
|
|
|
|
|
|
для: lilu
(09.04.2007 в 18:37)
| | Тогда напрашивается построение формы, подобное следующему:
<?
$rez = mysql_query("SELECT * FROM table",$db);
if($rez)
{
echo "<table border=1 bgcolor='#F1F1F1'>\n";
while($myrow=mysql_fetch_array($rez))
{ $id = $myrow['id'];
echo "<tr>
<td><input type =\"text\" name=\"new_phone[$id]\" value =\"$myrow[2]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_name[$id]\" value =\"$myrow[3]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_job[$id]\" value =\"$myrow[4]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_adres[$id]\" value =\"$myrow[5]\" size=\"10\"></td></tr>";
}
echo "</table>";
}?>
|
Только я всё же ограничил бы редактируемую область .... ну хотя бы страницей...
Запороть всю таблицу одним махом - жалко будет. | |
|
|
|
|
|
|
|
для: Trianon
(09.04.2007 в 20:21)
| | Жалко конечно :)
Я вот видела такое и думаю так действительно удобнее, чтобы напротив каждой записи в выводимой таблице выводилась в послей колонке картинка или кнопка или ссылка, при нажатии на кот. будут приняты изменения именно для этой записи....Вопрос как это делается:(( Видимо для onClick обработку писать надо...
<?
$rez = mysql_query("SELECT * FROM table",$db);
if($rez)
{
echo "<table border=1 bgcolor='#F1F1F1'>\n";
while($myrow=mysql_fetch_array($rez))
{ $id = $myrow['id'];
echo "<tr>
<td><input type =\"text\" name=\"new_phone[$id]\" value =\"$myrow[2]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_name[$id]\" value =\"$myrow[3]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_job[$id]\" value =\"$myrow[4]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_adres[$id]\" value =\"$myrow[5]\" size=\"10\"></td>
<td><a href=#><img src="/images/red.gif" border="0"></td></tr>
}
echo "</table>";
}?>
|
| |
|
|
|
|
|
|
|
для: lilu
(10.04.2007 в 12:19)
| | >...на кот. будут приняты изменения именно для этой записи....Вопрос как это делается:((
Для этого варианта формируется таблица, состоящая из независимых форм. Массивные имена в этом случае не нужны, а нужны теги <form ...>...<input type=submit name=Изменить /> </form> внутри каждой строки таблицы.
Есть еще вариант - создавать в общей форме чекбоксы, чтобы пользователь мог метить ими записи, в которые вносит изменения. Как в phpMyAdmin. Вот тут действительно полезны JS-eventhandler'ы. | |
|
|
|
|
|
|
|
для: Trianon
(10.04.2007 в 12:39)
| | Я вообще про то что в каждой строке есть ссылка или кнопка, например, изменить, допустим она неактивная, как только были внесены изменения в строке - ссылка становится активной и для принятия изменений надо нажать на неё.
Если для того чтобы это сделать нужны независимые формы - объясните на примере пож, что-то не совсем понятно.... | |
|
|
|
|
|
|
|
для: lilu
(10.04.2007 в 12:54)
| |
<?
$rez = mysql_query("SELECT * FROM table",$db);
if($rez)
{
echo "<table border=1 bgcolor='#F1F1F1'>\n";
while($myrow=mysql_fetch_array($rez))
{ $id = $myrow['id'];
echo "<tr> <form> <input type=hidden name=id value=$id />
<td><input type =\"text\" name=\"new_phone\" value =\"$myrow[2]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_name\" value =\"$myrow[3]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_job\" value =\"$myrow[4]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_adres\" value =\"$myrow[5]\" size=\"10\"></td>
<td><input type =submit name=upd value =\"Изменить\" /></td>
</form> </tr>\r\n";
}
echo "</table>";
}?>
|
Если есть желание вносить изменения без перезагрузки страницы - это совсем другой коленкор. Это прямиком в JS - AJAX организовывать. | |
|
|
|
|
|
|
|
для: Trianon
(10.04.2007 в 13:15)
| | Вы знаете с чекбоксами мне идея понравилась , до того как увидела ваш пример, во что сама написала, посмотрите
<?
$rez = mysql_query("SELECT * FROM table",$db);
if($rez)
{
echo "<table border=1 bgcolor='#F1F1F1'>\n";
echo "<tr><td>тел</td><td>наимен.</td><td>работа</td><td>адрес</td>
<td><input name='change' type='submit' value='изменить'></td></tr>";
while($myrow=mysql_fetch_array($rez))
{ $id = $myrow['id'];
echo "<tr>
<td><input type =\"text\" name=\"new_phone[$id]\" value =\"$myrow[2]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_name[$id]\" value =\"$myrow[3]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_job[$id]\" value =\"$myrow[4]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_adres[$id]\" value =\"$myrow[5]\" size=\"10\"></td>
<td><input type=\"checkbox\" name=\"chk1[$id]\"></td>
</tr>\r\n";
}
echo "</table>";
if($change)
{ $chk1 = $_POST['chk1'];
if($chk1)
{
foreach($chk1 as $num => $value)
{
if($value == "on")
{
$rez2=mysql_query("UPDATE smi SET name_smi=".$_POST['new_name_smi[$id]'].",
tel_kont=".$_POST['new_phone_smi[$id]'].", e-mail=".$_POST['new_mail_smi[$id]'].", grafik=".$_POST['new_gr_smi[$id]'].", ed_tarif=".$_POST['new_ed_tarif[$id]'].", tarif=".$_POST['new_tar_smi[$id]']."
WHERE id_smi = '$num' ",$db);
if($rez2) { echo "изменения приняты<br>";}
}//if($value == "on")
}// foreach($chk as $num => $value
}// if($chk)
}
}?>
|
написать то написала - но не работает :((( | |
|
|
|
|
|
|
|
для: lilu
(10.04.2007 в 13:38)
| | Я нашел два момента.
1. что такое if($change) ?
2. ох...
2а) при выводе значений полей, их нужно обрабатывать htmlspecialchars() - у них текстовая природа.
2б) . при вводе полей нужно учитывать magic_quotes и при необходимости вычищать слэши.
2в) при построении запроса к бд - при помещении в запрос литеральных констант, содержимое констант нужно экранировать mysql_escape_string() | |
|
|
|
|
|
|
|
для: Trianon
(10.04.2007 в 13:48)
| | $change - это кнопка ,при нажатии на кот. должны внестись изменения в строки отмеченные галочками.
а вот то, что вы написали под вторым пунктом .....:( | |
|
|
|
|
|
|
|
для: lilu
(10.04.2007 в 15:02)
| | $change - это не кнопка, а переменная.
Вы нигде её не определяете.
Если имеется в виду что $change = @$_POST['change']; то надо так и писать.
так... если уж мы перешли к деталям, то я не вижу ни этой кнопки, ни самой формы вокруг таблицы.
Кстати, в форме нужно не забыть поставить method=post . Я - в своем примере - забыл. :)
Ну а 2.... Это надо один раз усвоить. Так чтобы стало понятно, откуда ноги растут. И тогда вы научитесь эти вещи ставить на автомате, и они не будут отвлекать Вас от логики алгоритма. | |
|
|
|
|
|
|
|
для: Trianon
(10.04.2007 в 15:55)
| | Вы меня простите я не спец, но $change - это кнопка она описана выше просто (в шапке выводимой таблицы), а таблица у меня в форме просто этого я не написала (я думаю это само собой понятно)
<form action="<?php echo $_SERVER['REQUEST_URI']?>" method="post">
<?
$rez = mysql_query("SELECT * FROM table",$db);
if($rez)
{
echo "<table border=1 bgcolor='#F1F1F1'>\n";
echo "<tr><td>тел</td><td>наимен.</td><td>работа</td><td>адрес</td>
<td><input name='CHANGE' type='SUBMIT' value='изменить'></td></tr>";
while($myrow=mysql_fetch_array($rez))
{ $id = $myrow['id'];
echo "<tr>
<td><input type =\"text\" name=\"new_phone[$id]\" value =\"$myrow[2]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_name[$id]\" value =\"$myrow[3]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_job[$id]\" value =\"$myrow[4]\" size=\"10\"></td>
<td><input type =\"text\" name=\"new_adres[$id]\" value =\"$myrow[5]\" size=\"10\"></td>
<td><input type=\"checkbox\" name=\"chk1[$id]\"></td>
</tr>\r\n";
}
echo "</table>";
if($change)
{ $chk1 = $_POST['chk1'];
if($chk1)
{
foreach($chk1 as $num => $value)
{
if($value == "on")
{
$rez2=mysql_query("UPDATE smi SET name_smi=".$_POST['new_name_smi[$id]'].",
tel_kont=".$_POST['new_phone_smi[$id]'].", e-mail=".$_POST['new_mail_smi[$id]'].", grafik=".$_POST['new_gr_smi[$id]'].", ed_tarif=".$_POST['new_ed_tarif[$id]'].", tarif=".$_POST['new_tar_smi[$id]']."
WHERE id_smi = '$num' ",$db);
if($rez2) { echo "изменения приняты<br>";}
}//if($value == "on")
}// foreach($chk as $num => $value
}// if($chk)
}
}?>
</form>
|
Я когда echo $_POST['new_name_smi[$id]']; ничего вообще....
Второй момент на логику не влияет, но эти проверки напишу обязательно.... | |
|
|
|
|
|
|
|
для: lilu
(10.04.2007 в 16:17)
| | >а таблица у меня в форме просто этого я не написала (я думаю это само собой понятно)
Собственно, я тоже это предполагал. Но тогда всё должно работать. | |
|
|
|
|
|
|
|
для: Trianon
(10.04.2007 в 16:20)
| | Должно
только вот даже если в цикле echo $_POST['new_name_smi[$id]']; -- в ответ - ничего...
Я уже не говорю про update | |
|
|
|
|
|
|
|
для: lilu
(10.04.2007 в 16:24)
| | Я бы страшно удивился если бы это заработало... даже не знаю с чего тут начинать править... | |
|
|
|
|
|
|
|
для: lilu
(10.04.2007 в 16:24)
| | >Должно
>только вот даже если в цикле echo $_POST['new_name_smi[$id]']; -- в ответ - ничего...
>Я уже не говорю про update
echo '<pre>';print_r($_POST); что показывает? | |
|
|
|
|
|
|
|
для: Trianon
(10.04.2007 в 17:27)
| | Array
(
[change] => изменить
[new_name_smi] => Array
(
[0] => Иванов88888888888
[1] => Петров
и т.д.
)
[new_phone_smi] => Array
(
[0] => 22-85-34
[1] => 44-18-15
[2] => 22-46-93
.....)
и так все переменные.....
[chk1] => Array
(
[1] => on
)
)
Иванов88888888888 - это изменённое значение..., т.е. понимает где и на что поменять но не запонимает | |
|
|
|
|
|
|
|
для: lilu
(10.04.2007 в 17:35)
| | Вот видите?
Вот этот цикл
foreach($chk1 as $num => $value)
{
if($value == "on")
{
$rez2=mysql_query("UPDATE smi SET name_smi=".$_POST['new_name_smi[$id]'].",
tel_kont=".$_POST['new_phone_smi[$id]'].", e-mail=".$_POST['new_mail_smi[$id]'].", grafik=".$_POST['new_gr_smi[$id]'].", ed_tarif=".$_POST['new_ed_tarif[$id]'].", tarif=".$_POST['new_tar_smi[$id]']."
WHERE id_smi = '$num' ",$db);
if($rez2) { echo "изменения приняты<br>";}
}//if($value == "on")
}// foreach($chk as $num => $value
нужно построить по-другому.
1. if($value == 'on') не требуется. Дело в том, что неотмеченные чекбоксы в параметры скрипта просто не передаются - там будут лишь отмеченные, соответственно, в $value кроме on ничего и не будет.
2. А вот $num, который на самом деле является нашим id - нам может помочь.
3. К массивам в POST адресуются не так $_POST['new_name_smi[$id]'], а так $_POST['new_name_smi'][$id]
Соответственно:
<?
foreach($chk1 as $id => $value)
{ // чтобы не путаться - вынем значения из параметров.
$name = $_POST['new_name_smi'][$id];
$phone = $_POST['new_phone_smi'][$id];
$mail = $_POST['new_name_smi'][$id];
$grafik = $_POST['new_gr_smi'][$id];
$ed = $_POST['new_ed_tarif'][$id];
$tar = $_POST['new_tar_smi'][$id];
// теперь можно написать запрос.
$rez2=mysql_query("UPDATE smi
SET
name_smi='$name' ,
tel_kont='$phone',
`e-mail`=$mail,
grafik='$grafik',
ed_tarif='$ed',
tarif='$tar'
WHERE id_smi = '$id' ",$db);
if($rez2) echo "изменения для строки $id приняты<br>";
}
|
| |
|
|
|
|
|
|
|
для: Trianon
(10.04.2007 в 17:52)
| | Всё заработало -- спасибо вам!!!! И хватило же терпения....:))) | |
|
|
|
|
|
|
|
для: lilu
(10.04.2007 в 18:31)
| | Теперь приступайте к п 2. | |
|
|
|