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

Форум MySQL

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

 

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

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

тема: что не верно в запросе
 
 автор: lilu   (29.08.2005 в 15:26)   письмо автору
 
 


<?
$chk 
$_GET['chk'[; 
  if(
$chk
    foreach(
$chk as $num => $value
      if(
$value == "on"
      
$query1="DELETE FROM new WHERE id = '$num'";
      echo 
"$query1";
      
$rez1mysql_query($query1); 
             if (
$rez1) { 
             
             echo 
"нажата кнопка удалить записи"; }
?>


//chk[$num]

   
 
 автор: Loki   (29.08.2005 в 16:45)   письмо автору
 
   для: lilu   (29.08.2005 в 15:26)
 

Опечатка в первой строчке:

$chk = $_GET['chk']; 

А разве $chk является массивом?

   
 
 автор: lilu   (29.08.2005 в 17:01)   письмо автору
 
   для: Loki   (29.08.2005 в 16:45)
 

Дело не в опечатке :)))!
а chk[$num] вот откуда берётся:
<input type=\"checkbox\" name=\"chk[$num]\">

   
 
 автор: Евгений Петров   (29.08.2005 в 17:37)   письмо автору
 
   для: lilu   (29.08.2005 в 15:26)
 

Ты скобки операторные пропустил:
<?
$chk 
$_GET['chk'];
  if(
$chk)
    foreach(
$chk as $num => $value)
      if(
$value == "on")
      {
        
$query1="DELETE FROM new WHERE id = '$num'";
        echo 
"$query1";
        
$rez1mysql_query($query1);
        if (
$rez1) {
          echo 
"нажата кнопка удалить записи"; }
      }
?> 

Или что то вроде того

   
 
 автор: lilu   (29.08.2005 в 17:53)   письмо автору
 
   для: Евгений Петров   (29.08.2005 в 17:37)
 

По поводу операторных скобок то их пропущено больше чем одни, но всё-равно не пашет (я уже совсем запуталась):

<? 
$chk 
$_GET['chk']; 
  if(
$chk) {
    foreach(
$chk as $num => $value) {
      if(
$value == "on"
      { 
        
$query1="DELETE FROM new WHERE id = '$num'"
        echo 
"$query1"
        
$rez1mysql_query($query1); 
        if (
$rez1) { 
 echo 
"chk[$num]"// не определяется     
echo "нажата кнопка удалить записи"; } 
      } 
//if($value == "on") 
}//foreach($chk as $num => $value) 
}//if($chk) 
?> 

   
 
 автор: Евгений Петров   (29.08.2005 в 18:13)   письмо автору
 
   для: lilu   (29.08.2005 в 17:53)
 

А что конкретно не работает, не удаляет или ошибки пишет, вставь перед всем кодом но после $chk = $_GET['chk']; строку
print_r($chk);

   
 
 автор: lilu   (29.08.2005 в 18:17)   письмо автору
 
   для: Евгений Петров   (29.08.2005 в 18:13)
 

в том то и дело что ничего не пишет
и после вставленной строки тоже! как буд-то эта переменная пустая или что-то вроде того....

   
 
 автор: Евгений Петров   (29.08.2005 в 18:25)   письмо автору
 
   для: lilu   (29.08.2005 в 18:17)
 

Значит просто навсего массив не передается приведи полностью код где у тебя форма с checkbox'ами

   
 
 автор: lilu   (29.08.2005 в 18:32)   письмо автору
 
   для: Евгений Петров   (29.08.2005 в 18:25)
 

Совсем недавно мы с вами уже говорили про размещение checkbox в каждую строку и всё удачно получилось! только я вместо предложенного вами chk[%d] написала chk[$num]! ЧТобы скрипт получил значение переменной $num Но потом... Привожу код:
<? 
echo "<tr><td>№</td><td>наименование</td><td>цена</td><td>кол-во</td><td>checkbox</td></tr>"
while (
$myrow=mysql_fetch_row($rez)) 

printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td><input type=\"checkbox\" name=\"chk[$num]\"></td></tr>\n"$myrow[0], $myrow[1], $myrow[2],$myrow[3],$myrow[4],$myrow[0]); 

echo 
"</table>\n"
?> 
?>
<form action="<?php echo $_SERVER['REQUEST_URI']?>" method="post">
<input name="subdel" type="submit" value="удалить">
</form>
<?php
if ($_POST['subdel']) {   
$chk $_GET['$chk']; 

  if(
$chk) {
    foreach(
$chk as $num => $value) {
      if(
$value == "on") {
      
$query1="DELETE FROM new WHERE id = '$num'";
      echo 
"$query1";
      
$rez1mysql_query($query1); 
             if (
$rez1) { 
                         echo 
"chk[$num]";
                         echo 
"нажата кнопка удалить записи"
                         }
             }
// foreach($chk as $num => $value
             
}//if($value == "on")
             
}// if($chk)
             
}//if ($_POST['subdel'])

   
 
 автор: Евгений Петров   (29.08.2005 в 18:41)   письмо автору
 
   для: lilu   (29.08.2005 в 18:32)
 

Попробуй так
<?
echo "<tr><td>№</td><td>наименование</td><td>цена</td><td>кол-во</td><td>checkbox</td></tr>";
while (
$myrow=mysql_fetch_row($rez))
{
echo 
"<tr><td>$myrow[0]</td><td>$myrow[1]</td><td>$myrow[2]</td><td>$myrow[3]</td><td><input type=\"checkbox\" name=\"chk['$myrow[0]']\"></td></tr>\n";
}
echo 
"</table>\n";
?>
?>
<form action="<?php echo $_SERVER['REQUEST_URI']?>" method="post">
<input name="subdel" type="submit" value="удалить">
</form>
<?php
if ($_POST['subdel']) {   
$chk $_GET['$chk'];

  if(
$chk) {
    foreach(
$chk as $num => $value) {
      if(
$value == "on") {
      
$query1="DELETE FROM new WHERE id = '$num'";
      echo 
"$query1";
      
$rez1mysql_query($query1);
             if (
$rez1) {
                         echo 
"chk[$num]";
                         echo 
"нажата кнопка удалить записи";
                         }
             }
// foreach($chk as $num => $value
             
}//if($value == "on")
             
}// if($chk)
             
}//if ($_POST['subdel']) 

   
 
 автор: lilu   (30.08.2005 в 10:46)   письмо автору
 
   для: Евгений Петров   (29.08.2005 в 18:41)
 

Всё тоже ! У меня такое впечатление что $num вообще не хранит никакого значения!

   
 
 автор: Евгений Петров   (30.08.2005 в 13:13)   письмо автору
 
   для: lilu   (30.08.2005 в 10:46)
 

Стоп. Все правильно, просто ты отсылаешь данные методом POST а принимаешь их методом GET. Замени $chk = $_GET['$chk']; на $chk = $_POST['chk'];
И кстати у тебя неправильно было написано надо не $chk = $_GET['$chk']; а $chk = $_GET['chk']; (без доллара)

   
 
 автор: cheops   (30.08.2005 в 13:16)   письмо автору
 
   для: lilu   (30.08.2005 в 10:46)
 

А вы его echo выведите и посмотрите - появится он в окне браузера или нет
<?php
  
echo $num."<br>";
?>

   
 
 автор: lilu   (30.08.2005 в 15:28)   письмо автору
 
   для: cheops   (30.08.2005 в 13:16)
 

нет не появляется и не одно echo() что я вывожу на экран не появляется....и дело тут не в post или get! :((

   
 
 автор: cheops   (30.08.2005 в 16:39)   письмо автору
 
   для: lilu   (30.08.2005 в 15:28)
 

Вот скорее всего в чём проблема, помимо того, что писал Евгений Петров, у вас имеется строка вида
<?php
  $chk 
$_POST['$chk'];
?>

переменная $chk не будет интерпретироваться, а так и будет искаться ключ $chk - это связано с тем что в одинарных кавычках переменные не заменяются их значениями - подробнее в http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=130. Поэтому вас следует писать просто
<?php
  $chk 
$_POST[$chk];
?>

   
 
 автор: lilu   (30.08.2005 в 16:53)   письмо автору
 
   для: cheops   (30.08.2005 в 16:39)
 

не помогло...
мне кажется что-то не то в этом выражении
<input type=\"checkbox\" name=\"chk['$myrow[0]']\">

   
 
 автор: cheops   (30.08.2005 в 17:02)   письмо автору
 
   для: lilu   (30.08.2005 в 16:53)
 

Да, скорее всего, попрбуйте переписать его следующим образом
<input type=\"checkbox\" name=\"".chk[$myrow[0]]."\">

Однако всё вышесказанное тоже имейте ввиду...

   
 
 автор: lilu   (30.08.2005 в 17:17)   письмо автору
 
   для: cheops   (30.08.2005 в 17:02)
 

Я всё что мне советуют имею в виду..
После вашей замены вот что выдало
Parse error: parse error, expecting '','' or '';'' и далее номер строки (кстате не там совсем где я сделала эту замену)
Во как ...:((

   
 
 автор: Евгений Петров   (30.08.2005 в 17:54)   письмо автору
 
   для: cheops   (30.08.2005 в 16:39)
 

Не надо вообще писать $ это не переменная, это элемент ассоциативного массива. Пиши
$chk = $_POST['chk'];

   
 
 автор: napTu3aH   (30.08.2005 в 17:28)   письмо автору
 
   для: lilu   (29.08.2005 в 15:26)
 

это значит что вы где-то пропустили ;
точку с зяпятой в конце

   
 
 автор: lilu   (30.08.2005 в 17:32)   письмо автору
 
   для: napTu3aH   (30.08.2005 в 17:28)
 

Я знаю что это значит, но почему раньше этой ошибки не было! И меняла я не точки с запятой а синтаксис с checkbox, кот не в конце строчки! Как -то всё это странно....

   
 
 автор: cheops   (30.08.2005 в 17:48)   письмо автору
 
   для: lilu   (30.08.2005 в 17:32)
 

Без полного кода советовать что-то определённое сложно, я даже не знаю обрамлена ли строка одинарными кавычками или двойными.

   
 
 автор: lilu   (30.08.2005 в 17:55)   письмо автору
 
   для: cheops   (30.08.2005 в 17:48)
 

Вот эта строка

<?
echo "<table border=1>\n";
echo 
"<tr><td>№</td><td>наименование рубрики</td><td>наименование подрубрики</td><td>действие</td><td>текст объявления</td><td>контактные данные</td><td>дата</td><td>выбор</td></tr>";
while (
$myrow=mysql_fetch_row($rez))
{
echo 
"<tr><td>$myrow[0]</td><td>$myrow[1]</td><td>$myrow[2]</td><td>$myrow[3]</td><td>$myrow[4]</td><td>$myrow[5]</td><td>$myrow[6]</td><td>$myrow[7]</td><td><input type="checkbox" name=".chk[$myrow[0]]."> </td></tr>\n"
}
echo 
"</table>\n";
?>

Ещё мне интересно когда в конец каждой строки добавляется checkbox в ф-ции echo как-то надо закрывать и открывать php?

   
 
 автор: napTu3aH   (30.08.2005 в 17:58)   письмо автору
 
   для: lilu   (30.08.2005 в 17:55)
 

тут может быть проблема из-за кавычек внутри кавычек, у меня часто проблема именно в этом


Билебирда полная получаетсья, но попробуйте так


<table border=1>\n
<tr><td>№</td><td>наименование рубрики</td><td>наименование подрубрики</td><td>действие</td><td>текст объявления</td><td>контактные данные</td><td>дата</td><td>выбор</td></tr>
<? 
while ($myrow=mysql_fetch_row($rez)) 

echo 
"<tr><td>$myrow[0]</td><td>$myrow[1]</td><td>$myrow[2]</td><td>$myrow[3]</td><td>$myrow[4]</td><td>$myrow[5]</td><td>$myrow[6]</td><td>$myrow[7]</td><td>"
?>
<input type="checkbox" name="
<?
echo ".chk[$myrow[0]].";
?>
"> </td></tr>\n
<?

?>
</table>\n

   
 
 автор: Евгений Петров   (30.08.2005 в 18:00)   письмо автору
 
   для: lilu   (30.08.2005 в 17:55)
 

Измени вот так:
<?
echo "<table border=1>\n";
echo 
"<tr><td>№</td><td>наименование рубрики</td><td>наименование подрубрики</td><td>действие</td><td>текст объявления</td><td>контактные данные</td><td>дата</td><td>выбор</td></tr>";
while (
$myrow=mysql_fetch_array($rez))
{
echo 
"<tr><td>$myrow[0]</td><td>$myrow[1]</td><td>$myrow[2]</td><td>$myrow[3]</td><td>$myrow[4]</td><td>$myrow[5]</td><td>$myrow[6]</td><td>$myrow[7]</td><td><input type=\"checkbox\" name=chk[$myrow[0]]> </td></tr>\n";
}
echo 
"</table>\n";
?> 

И замени
$_POST['$chk'];
на
$_POST['chk'];

   
 
 автор: lilu   (30.08.2005 в 18:29)   письмо автору
 
   для: Евгений Петров   (30.08.2005 в 18:00)
 

Ошибку писать перестало, но ...
Таблица выводится с checkbox-ами всё красивенько так, после выбора соот-их checkbox и нажатия кнопки "удалить" галочки в checkbox изчезают и вид странички возвращается в исходное положение! И так который раз...
И что бы я не пробовала!

   
 
 автор: Евгений Петров   (30.08.2005 в 20:35)   письмо автору
 
   для: lilu   (30.08.2005 в 18:29)
 

Выложи дамп базы таблицы из которой выводятся данные, т.е. new

   
 
 автор: lilu   (30.08.2005 в 21:31)   письмо автору
 
   для: Евгений Петров   (30.08.2005 в 20:35)
 

Вот:
id int(2) - primary key - autoincrement
nameR varchar(15) - index
nameP varchar(15) - index
action set('покупка','продажа','обмен') - index
text varchar(250)
kontact varchar(30)
data date - index

   
 
 автор: lilu   (31.08.2005 в 12:35)   письмо автору
 
   для: lilu   (30.08.2005 в 21:31)
 

Проверяем пошагово:
Вот что я изменила и сдвинулвсь с мёртвой точки....


<?
echo "<table border=1>\n";
echo 
"<tr><td>№</td><td>наименование рубрики</td><td>наименование подрубрики</td><td>действие</td><td>текст объявления</td><td>контактные данные</td><td>дата</td><td>выбор</td></tr>";
while (
$myrow=mysql_fetch_row($rez))
{
$chk=$myrow[0];  //сразу одному массиву  присвоила значения другого 

echo "<tr><td>$myrow[0]</td><td>$myrow[1]</td><td>$myrow[2]</td><td>$myrow[3]</td><td>$myrow[4]</td><td>$myrow[5]</td><td>$myrow[6]</td><td>$myrow[7]</td><td><input type=\"checkbox\" name=$chk> </td></tr>\n";
echo 
"$chk"// всё правильно выводится, только почему-то выше всей таблицы
}
  echo 
"</table>\n";

 if (
$subdel) { 
echo 
"$chk";}   // а вот тут уже выводится только последнее значение этого массива почему?
?>

   
 
 автор: Евгений Петров   (31.08.2005 в 14:35)   письмо автору
 
   для: lilu   (31.08.2005 в 12:35)
 

А каким SQL - запросом ты выбираешь данные из БД

   
 
 автор: lilu   (31.08.2005 в 14:51)   письмо автору
 
   для: Евгений Петров   (31.08.2005 в 14:35)
 

$query = "SELECT * FROM new";

   
 
 автор: Евгений Петров   (31.08.2005 в 21:31)   письмо автору
 
   для: lilu   (31.08.2005 в 14:51)
 

Че то я все равно ничего не понимаю. Лучше выложи ПОЛНОСТЬЮ весь этот файл я посмотрю и исправлю. Только желательно прикрепи как файл.

   
 
 автор: lilu   (01.09.2005 в 14:03)   письмо автору
1.7 Кб
 
   для: Евгений Петров   (31.08.2005 в 21:31)
 

вот он

   
 
 автор: Евгений Петров   (01.09.2005 в 16:07)   письмо автору
 
   для: lilu   (01.09.2005 в 14:03)
 

Попробуй вот этот код

   
 
 автор: lilu   (02.09.2005 в 12:01)   письмо автору
 
   для: Евгений Петров   (01.09.2005 в 16:07)
 

у вас он работает?
у меня всё также - записи не удаляются!
теряется переменная $chk
вот вы интересно выводили сразу $chk где таблица выводится! Она уже там ничего не пишет и дальше всему остальному коду работать просто не с чем!
а когда я пишу вместо вашего <input type=\"checkbox\" name=\"chk[$myrow[0]]\">
я делаю вот так

<?
 
while($myrow=mysql_fetch_array($rez))
     {
       
$chk=$myrow[0];
       echo 
"<tr><td>$myrow[0]</td><td>$myrow[1]</td><td>$myrow[2]</td><td>$myrow[3]</td><td>$myrow[4]</td><td>$myrow[5]</td><td>$myrow[6]</td><td><input type=\"checkbox\" name=\"$chk\"></td></tr>\n";
       echo 
"$chk";
     }

?>

и тогда эта переменная действительно выводит 123456 и т.д. как номера столбцов, но потом когда мы её с помощью POST забираем и опять я вывожу её - то уже в ней ничего нет! Не понимаю я вот этого!

   
 
 автор: Евгений Петров   (02.09.2005 в 17:01)   письмо автору
 
   для: lilu   (02.09.2005 в 12:01)
 

Стоп! Ну конечно ничего не работало ты же сначала выводишь чекбоксы, а потом только форму к которой они якобы должны относиться. Вот попробуй это у меня работало.

   
 
 автор: lilu   (06.09.2005 в 15:34)   письмо автору
 
   для: Евгений Петров   (02.09.2005 в 17:01)
 

Спасибочки, теперь действительно всё работает!
Я и сама уже догадалась, но за терпение и за помощь вам особая благодарность:)))

   
 
 автор: napTu3aH   (30.08.2005 в 18:20)   письмо автору
 
   для: lilu   (29.08.2005 в 15:26)
 

не знал что кавычки экранируютсья слешами :)
конец моим мучениям
УРА!!!!

   
Rambler's Top100
вверх

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