|
|
|
| Пишу скрипт, который осуществляет выборку из базы данных и выводит некоторые данные. Данные выводятся в виде таблицы и напротив каждой строки добавляется radiobutton, т.е. этим выбирается какая то одна строка. Как сделать, чтобы по нажатию кнопки, например, выбранную строку можно было удалить из БД? Вся проблема в том, что я не могу определить для какой строки выбран radiobutton и что он вообще выбран. Подскажите... | |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 16:25)
| | То есть удалить можно только одну запись? Тогда по событию onclick выбранной кнопки отправлять форму. Все радиокнопки это массив с именами, например, "bt[]". Значение радиокнопок должно быть связано (по Id, например) с записями в таблице. Пулучаете значение $_POST['bt'], и удаляете соответсвующую запись в таблице.
PS. В вашем случае, видимо, вообще можно имена кнопкам дать как просто "bt", без []. | |
|
|
|
|
|
|
|
для: sim5
(05.12.2007 в 16:41)
| | при выводе данных из базы, я просто добавляю перед каждой строкой радиокнопку. как связать значение радиокнопки с id записи? | |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 17:09)
| |
<FORM ACTION="" METHOD="post">
<INPUT TYPE="radio" NAME="bt" VALUE="1" ONCLICK="this.form.submit();">
<INPUT TYPE="radio" NAME="bt" VALUE="2" ONCLICK="this.form.submit();">
<INPUT TYPE="radio" NAME="bt" VALUE="3" ONCLICK="this.form.submit();">
</FORM>
|
Здесь три радиокнопки с зависимой фиксацией - выбарть можно только одну из трех. Ну собственно при выборе сразу происходит отправка формы на сервер. Значения кнопок должны иметь значения id записей (или иных полей формы), которые требуется удалить, здесь для примера это 1, 2, 3. Если не требуется отправки формы при выборе кнопки, то у радиокнопок нужно удалить обработку события ONCLICK="this.form.submit();", а в форму добавить кнопку SUBMIT, и отправлять форму ею. | |
|
|
|
|
|
|
|
для: sim5
(05.12.2007 в 17:17)
| |
$query = "DELETE FROM table WHERE table.id=$_POST[bt]";
|
в условии WHERE так нужно написать? | |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 17:33)
| | trim($_POST["bt"]) перед вставкой в запрос, либо в запросе пропишите так. | |
|
|
|
|
|
|
|
для: sim5
(05.12.2007 в 17:40)
| | не удаляет...может ошибка в том, как я присваиваю значение радиокнопки???
$query = "SELECT id, fio, data_birth FROM table";
$usr = mysql_query($query);
if ($usr)
{
echo "<table border='0' align='center' cellspacing='5'>";
echo "<tr>
<td>"." "."</td>
<td>"."ФИО"."</td>
<td>"."Дата рождения"."</td>
</tr>";
while (list ($id, $fio, $data_birth) = mysql_fetch_row($usr))
{
echo "<tr>
<td><input name='bt' type='radio' value='$id'></td>
<td>$id_ls</td>
<td>$fio</td>
<td>$data_birth</td>
</tr>";
}
echo "</table>";
|
| |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 18:16)
| | такое ощущение значение радиокнопки не передаётся. пробую
ничего не выводится | |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 18:21)
| | Вот простой пример:
<FORM ACTION="" METHOD="post">
<INPUT TYPE="radio" NAME="bt" VALUE="1">
<INPUT TYPE="radio" NAME="bt" VALUE="2">
<INPUT TYPE="radio" NAME="bt" VALUE="3">
<input type=submit name=q>
</FORM>
<?
if($_POST[q]){
print $_POST[bt];
}
?>
|
| |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 18:16)
| | Интересно а где у вас оператор DELETE ? | |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 17:33)
| |
<?php
$query = "DELETE FROM table WHERE id=".intval($_POST['bt']);
|
Не забывайте от sql-иньекции защищаться!
И trim вам здесь не поможет, только intval | |
|
|
|
|
|
|
|
для: Eugene77
(05.12.2007 в 18:22)
| | trim не от иньекции, а от пробелов. | |
|
|
|
|
|
|
|
для: sim5
(05.12.2007 в 18:30)
| | всё же...не передаётся или не присваивается значение радиокнопки | |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 19:17)
| | Пропишите так
<input name='bt' type='radio' value='".$id."'>
|
| |
|
|
|
|
|
|
|
для: sim5
(05.12.2007 в 20:06)
| | не помогло((((((пол дня с этим бьюсь((((( | |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 20:24)
| | реально...фигня же какая то...не получается узнать значение радиокнопки | |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 20:36)
| | Щелчек правой кнопкой, и посмотреть код полученной вами страницы - можно понять в чем проблема. Узнать когда, при выводе таблицы или при получении формы? У вас хотя бы форма прописана в коде? Например, на том участке кода, что вы представили этого не видно. | |
|
|
|
|
|
|
|
для: sim5
(05.12.2007 в 21:22)
| |
<?php
require_once("mysql_connect.php");
$query = "SELECT id, fio, data_birth FROM table";
$usr = mysql_query($query);
if ($usr)
{
echo "<table border='0' align='center' cellspacing='5'>";
echo "<tr>
<td>"." "."</td>
<td>"."ФИО"."</td>
<td>"."Дата рождения"."</td>
</tr>";
while (list ($id, $fio, $data_birth) = mysql_fetch_row($usr))
{
echo "<tr>
<td><input name='bt' type='radio' value='".$id_ls."'></td>
<td>$fio</td>
<td>$data_birth</td>
</tr>";
}
echo "</table>";
}
else exit(mysql_error());
?>
<table align="center" width="450" border="0">
<form method="post" action="">
<tr>
<td><input type="submit" name="doAdd" value="Добавить">
</td>
<td>
<input type="submit" name="doDelete" value="Удалить">
</td>
</tr>
</form>
</table>
<?php
if(isset($_REQUEST['doDelete']))
{
$qw = "DELETE FROM table WHERE id=".intval($_POST['bt']);
if (mysql_query($qw))
{
echo $_POST['bt'];
}
else
{
exit (mysql_error());
}
}
?>
|
вот весь код.
подскажите, пожалуйста, в чём проблема. я уже всю надежду потерял((( | |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 22:43)
| | Откуда вы берете переменную $id_ls ? | |
|
|
|
|
|
|
|
для: Faraon
(05.12.2007 в 23:08)
| | там на самом деле
случайно получилось | |
|
|
|
|
|
|
|
для: kyzma
(05.12.2007 в 22:43)
| | Что это означает?:
<input type="submit" name="doAdd" value="Добавить">
....
<input type="submit" name="doDelete" value="Удалить">
|
Если ваши записи имеют уникальный id, то при попытке добавить запись с существующим id, вы просто получите ошибку.
Я вас спрашивал о форме, и где она у вас? Проверяйте:
<FORM ACTION="" METHOD="post">
<INPUT TYPE="radio" NAME="bt" VALUE="1">
<INPUT TYPE="radio" NAME="bt" VALUE="2">
<INPUT TYPE="radio" NAME="bt" VALUE="3">
<INPUT TYPE="submit" NAME="doDelete" VALUE="Удалить">
</FORM>
<?
if (isset($_REQUEST['doDelete'])) echo $_POST['bt'];
?>
|
Все элементы формы должны пренадлежать форме (у вас элементы вне формы), у которой должен быть указан соответсвующий метод передачи (по умолчанию это GET), а также скрипт обработчик (ACTION), если обращение происходит к другой странице. У вас нет самих элементов в форме, и чего тогда вы ожидаете? | |
|
|
|
|
|
|
|
для: sim5
(06.12.2007 в 08:40)
| | запись с существующим id я не собираюсь добавлять, вопрос же не в этом.
форма???записи берутся из БД, и их количество не фиксировано. просто перед каждой записью добавляю радиокнопку. вот:
<?php
$query = "SELECT id, fio, data_birth FROM table";
$usr = mysql_query($query);
if ($usr)
{
echo "<table border='0' align='center' cellspacing='5'>";
echo "<tr>
<td>"." "."</td>
<td>"."ФИО"."</td>
<td>"."Дата рождения"."</td>
</tr>";
while (list ($id, $fio, $data_birth) = mysql_fetch_row($usr))
{
echo "<tr>
<td><input name='bt' type='radio' value='".$id."'></td>
<td>$fio</td>
<td>$data_birth</td>
</tr>";
}
echo "</table>";
|
как быть в моей ситуации?
может я уже совсем того, но Ваш пример у меня не заработал | |
|
|
|
|
|
|
|
для: kyzma
(06.12.2007 в 10:05)
| | Еще бы он не работал. Тег <FORM ACTION="" METHOD="post"> вы должны вывести до начала цикла вывода элементов, например, тут:
<?
if ($usr) {
echo "<FORM ACTION=\"\" METHOD=\"post\">";
echo "<table border='0' align='center' cellspacing='5'>";
|
А после цикла, вывести элемент SUBMIT и закрыть форму - </FORM>. Если вы не добавляете, то к чему добавлять второй SUBMIT. | |
|
|
|
|
|
|
|
для: sim5
(06.12.2007 в 10:25)
| | Спасибо большое!!!заработало)))
только после нажатия кнопки удаления, запись остаётся..нужно сделать перезагрузку странице. в конце обработчика кнопки я вставил этот код, но это не помогло.
echo "<HTML><HEAD>
<META HTTP_EQUIV='Refresh' CONTENT='0; URL=$_SERVER[PHP_SELF]'>
</HEAD></HTML>";
|
| |
|
|
|
|
|
|
|
для: kyzma
(06.12.2007 в 11:45)
| | Если запрос на удаление составлен верно, и если в таблице существует запись удовлетворяющая запросу на удаление, то запись будет удалена. Можете глянуть свою таблицу, чтобы убедиться в этом, а Refresh здесь не причем. Если необходимо перезагрузить страницу после удаления записи (защита от F5, например), то достаточно прописать после "удачного удаления":
<?
header('location: имя файла скрипта.php');
|
| |
|
|
|
|
|
|
|
для: sim5
(06.12.2007 в 11:59)
| | я так уже попробовал, заголовки же нужно отправлять до вывода каких либо данных, и выдаётся ошибка
Warning: Cannot modify header information - headers already sent by | |
|
|
|
|
|
|
|
для: kyzma
(06.12.2007 в 12:14)
| | Естественно до, и не только каких либо, но даже пустых строк в коде не должно быть перед хидером. Нужно просто правильно прописать код, и все будет работать. | |
|
|
|
|
|
|
|
для: sim5
(06.12.2007 в 12:23)
| | а как просто правильно прописать код, чтобы перезагрузить страницу после удаления запис???..ведь данные выводятся до удаления | |
|
|
|
|
|
|
|
для: kyzma
(06.12.2007 в 15:44)
| | А вы подумайте. Ведь пока не будет этого:
if(isset($_REQUEST['doDelete']))
|
не будет и передачи хидера. А вот теперь задача: как правильно прописать ваш код на странице так, чтобы все выводилось и работало без проблем? Подумайте, это вам только на пользу будет, честное слово. | |
|
|
|
|
|
|
|
для: sim5
(06.12.2007 в 16:04)
| | sim5, два дня думал, только чего не переделал, всё равно эта ошибка. Подскажите пожалуйста | |
|
|
|
|
|
|
|
для: sim5
(06.12.2007 в 11:59)
| | >то достаточно прописать после "удачного удаления":
Что значит после удачного удаления? | |
|
|
|
|
|
|
|
для: Faraon
(09.12.2007 в 00:37)
| | значит сперва произошло удаление записи из базы данных, и затем страница перезагрузилась(обновилась) уже без этой записи | |
|
|
|
|
|
|
|
для: kyzma
(09.12.2007 в 00:47)
| | Попробуйте
<meta http-equiv="refresh" content="0; url=http://ваш сайт.ru">
|
| |
|
|
|
|
|
|
|
для: kyzma
(09.12.2007 в 00:47)
| | Не в этом проблема, что header, что meta, суть то одна, не в том месте заголовки передаются.
Я не знаю всего, что у вас на странице, да это для уяснения причины не так и важно. Вы же сами говорите, что заголовок должен передаваться до любого вывода в браузер. Пишем так:
<FORM ACTION="test.php" METHOD="post">
<INPUT TYPE="text" NAME="user">
<INPUT TYPE="submit" VALUE="GO">
</FORM>
<?
if(!empty($_POST['user'])) {
header("location: test.php?user=".$_POST['user']);
}
if (!empty($_GET['user'])) echo $_GET['user'];
?>
|
Заполните поле и отправьте форму, что получите? Теперь напишем так:
<?
if(!empty($_POST['user'])) {
header("location: test.php?user=".$_POST['user']);
}
if (!empty($_GET['user'])) echo $_GET['user'];
?>
<FORM ACTION="test.php" METHOD="post">
<INPUT TYPE="text" NAME="user">
<INPUT TYPE="submit" VALUE="GO">
</FORM>
|
Опять заполняем и отправляем, что получите теперь? Различны ли эти два примера кода по содержанию? Чем они различаются? | |
|
|
|
|
|
|
|
для: sim5
(09.12.2007 в 06:37)
| | Спасибо, sim5...отлично))) | |
|
|
|