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

Форум PHP

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

 

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

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

тема: Обработка radiobutton
 
 автор: kyzma   (05.12.2007 в 16:25)   письмо автору
 
 

Пишу скрипт, который осуществляет выборку из базы данных и выводит некоторые данные. Данные выводятся в виде таблицы и напротив каждой строки добавляется radiobutton, т.е. этим выбирается какая то одна строка. Как сделать, чтобы по нажатию кнопки, например, выбранную строку можно было удалить из БД? Вся проблема в том, что я не могу определить для какой строки выбран radiobutton и что он вообще выбран. Подскажите...

   
 
 автор: sim5   (05.12.2007 в 16:41)   письмо автору
 
   для: kyzma   (05.12.2007 в 16:25)
 

То есть удалить можно только одну запись? Тогда по событию onclick выбранной кнопки отправлять форму. Все радиокнопки это массив с именами, например, "bt[]". Значение радиокнопок должно быть связано (по Id, например) с записями в таблице. Пулучаете значение $_POST['bt'], и удаляете соответсвующую запись в таблице.

PS. В вашем случае, видимо, вообще можно имена кнопкам дать как просто "bt", без [].

   
 
 автор: kyzma   (05.12.2007 в 17:09)   письмо автору
 
   для: sim5   (05.12.2007 в 16:41)
 

при выводе данных из базы, я просто добавляю перед каждой строкой радиокнопку. как связать значение радиокнопки с id записи?

   
 
 автор: sim5   (05.12.2007 в 17:17)   письмо автору
 
   для: 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, и отправлять форму ею.

   
 
 автор: kyzma   (05.12.2007 в 17:33)   письмо автору
 
   для: sim5   (05.12.2007 в 17:17)
 


$query = "DELETE FROM table WHERE table.id=$_POST[bt]";

в условии WHERE так нужно написать?

   
 
 автор: sim5   (05.12.2007 в 17:40)   письмо автору
 
   для: kyzma   (05.12.2007 в 17:33)
 

trim($_POST["bt"]) перед вставкой в запрос, либо в запросе пропишите так.

   
 
 автор: kyzma   (05.12.2007 в 18:16)   письмо автору
 
   для: 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:21)   письмо автору
 
   для: kyzma   (05.12.2007 в 18:16)
 

такое ощущение значение радиокнопки не передаётся. пробую

echo $_POST['bt'];

ничего не выводится

   
 
 автор: Faraon   (05.12.2007 в 21:15)   письмо автору
 
   для: 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];
}
?>

   
 
 автор: Faraon   (05.12.2007 в 21:10)   письмо автору
 
   для: kyzma   (05.12.2007 в 18:16)
 

Интересно а где у вас оператор DELETE ?

   
 
 автор: Eugene77   (05.12.2007 в 18:22)   письмо автору
 
   для: kyzma   (05.12.2007 в 17:33)
 


<?php
$query 
"DELETE FROM table WHERE id=".intval($_POST['bt']);


Не забывайте от sql-иньекции защищаться!
И trim вам здесь не поможет, только intval

   
 
 автор: sim5   (05.12.2007 в 18:30)   письмо автору
 
   для: Eugene77   (05.12.2007 в 18:22)
 

trim не от иньекции, а от пробелов.

   
 
 автор: kyzma   (05.12.2007 в 19:17)   письмо автору
 
   для: sim5   (05.12.2007 в 18:30)
 

всё же...не передаётся или не присваивается значение радиокнопки

   
 
 автор: sim5   (05.12.2007 в 20:06)   письмо автору
 
   для: kyzma   (05.12.2007 в 19:17)
 

Пропишите так

<input name='bt' type='radio' value='".$id."'>

   
 
 автор: kyzma   (05.12.2007 в 20:24)   письмо автору
 
   для: sim5   (05.12.2007 в 20:06)
 

не помогло((((((пол дня с этим бьюсь(((((

   
 
 автор: kyzma   (05.12.2007 в 20:36)   письмо автору
 
   для: kyzma   (05.12.2007 в 20:24)
 

реально...фигня же какая то...не получается узнать значение радиокнопки

   
 
 автор: sim5   (05.12.2007 в 21:22)   письмо автору
 
   для: kyzma   (05.12.2007 в 20:36)
 

Щелчек правой кнопкой, и посмотреть код полученной вами страницы - можно понять в чем проблема. Узнать когда, при выводе таблицы или при получении формы? У вас хотя бы форма прописана в коде? Например, на том участке кода, что вы представили этого не видно.

   
 
 автор: kyzma   (05.12.2007 в 22:43)   письмо автору
 
   для: 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());
        }
    }
?>

вот весь код.
подскажите, пожалуйста, в чём проблема. я уже всю надежду потерял(((

   
 
 автор: Faraon   (05.12.2007 в 23:08)   письмо автору
 
   для: kyzma   (05.12.2007 в 22:43)
 

Откуда вы берете переменную $id_ls ?

   
 
 автор: kyzma   (05.12.2007 в 23:23)   письмо автору
 
   для: Faraon   (05.12.2007 в 23:08)
 

там на самом деле

$id

случайно получилось

   
 
 автор: sim5   (06.12.2007 в 08:40)   письмо автору
 
   для: 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), если обращение происходит к другой странице. У вас нет самих элементов в форме, и чего тогда вы ожидаете?

   
 
 автор: kyzma   (06.12.2007 в 10:05)   письмо автору
 
   для: 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>";

как быть в моей ситуации?
может я уже совсем того, но Ваш пример у меня не заработал

   
 
 автор: sim5   (06.12.2007 в 10:25)   письмо автору
 
   для: 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.

   
 
 автор: kyzma   (06.12.2007 в 11:45)   письмо автору
 
   для: sim5   (06.12.2007 в 10:25)
 

Спасибо большое!!!заработало)))
только после нажатия кнопки удаления, запись остаётся..нужно сделать перезагрузку странице. в конце обработчика кнопки я вставил этот код, но это не помогло.

echo "<HTML><HEAD>
          <META HTTP_EQUIV='Refresh' CONTENT='0; URL=$_SERVER[PHP_SELF]'> 
    </HEAD></HTML>";

   
 
 автор: sim5   (06.12.2007 в 11:59)   письмо автору
 
   для: kyzma   (06.12.2007 в 11:45)
 

Если запрос на удаление составлен верно, и если в таблице существует запись удовлетворяющая запросу на удаление, то запись будет удалена. Можете глянуть свою таблицу, чтобы убедиться в этом, а Refresh здесь не причем. Если необходимо перезагрузить страницу после удаления записи (защита от F5, например), то достаточно прописать после "удачного удаления":

<?
header
('location: имя файла скрипта.php');

   
 
 автор: kyzma   (06.12.2007 в 12:14)   письмо автору
 
   для: sim5   (06.12.2007 в 11:59)
 

я так уже попробовал, заголовки же нужно отправлять до вывода каких либо данных, и выдаётся ошибка
Warning: Cannot modify header information - headers already sent by

   
 
 автор: sim5   (06.12.2007 в 12:23)   письмо автору
 
   для: kyzma   (06.12.2007 в 12:14)
 

Естественно до, и не только каких либо, но даже пустых строк в коде не должно быть перед хидером. Нужно просто правильно прописать код, и все будет работать.

   
 
 автор: kyzma   (06.12.2007 в 15:44)   письмо автору
 
   для: sim5   (06.12.2007 в 12:23)
 

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

   
 
 автор: sim5   (06.12.2007 в 16:04)   письмо автору
 
   для: kyzma   (06.12.2007 в 15:44)
 

А вы подумайте. Ведь пока не будет этого:

if(isset($_REQUEST['doDelete']))

не будет и передачи хидера. А вот теперь задача: как правильно прописать ваш код на странице так, чтобы все выводилось и работало без проблем? Подумайте, это вам только на пользу будет, честное слово.

   
 
 автор: kyzma   (09.12.2007 в 00:09)   письмо автору
 
   для: sim5   (06.12.2007 в 16:04)
 

sim5, два дня думал, только чего не переделал, всё равно эта ошибка. Подскажите пожалуйста

   
 
 автор: Faraon   (09.12.2007 в 00:37)   письмо автору
 
   для: sim5   (06.12.2007 в 11:59)
 

>то достаточно прописать после "удачного удаления":

Что значит после удачного удаления?

   
 
 автор: kyzma   (09.12.2007 в 00:47)   письмо автору
 
   для: Faraon   (09.12.2007 в 00:37)
 

значит сперва произошло удаление записи из базы данных, и затем страница перезагрузилась(обновилась) уже без этой записи

   
 
 автор: Faraon   (09.12.2007 в 01:09)   письмо автору
 
   для: kyzma   (09.12.2007 в 00:47)
 

Попробуйте

<meta http-equiv="refresh" content="0; url=http://ваш сайт.ru"> 

   
 
 автор: sim5   (09.12.2007 в 06:37)   письмо автору
 
   для: 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>

Опять заполняем и отправляем, что получите теперь? Различны ли эти два примера кода по содержанию? Чем они различаются?

   
 
 автор: kyzma   (09.12.2007 в 17:23)   письмо автору
 
   для: sim5   (09.12.2007 в 06:37)
 

Спасибо, sim5...отлично)))

   
Rambler's Top100
вверх

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