За последние 24 часа нас посетили 18346 программистов и 1605 роботов. Сейчас ищут 910 программистов ...

удаление данных из формы....

Тема в разделе "PHP и базы данных", создана пользователем rodion4657, 29 янв 2012.

  1. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    Здравствуйте, подскажите пожалуйста где ошибка в коде...происходит почему-то удаление всех записей сразу...
    Форма
    Код (PHP):
    1.  <html>
    2.  <HEAD>
    3.  <META http-equiv=content-type content="text/html; charset=windows-1251">
    4.  </HEAD>
    5.  <body >
    6.  <br><br><br><br><br>
    7.  <center><h2>Удаление данных о туристе</h2></center>
    8.  <form method="post" action="example2.php" >
    9.  <table align="center"border=1>
    10.  <tr align="center">
    11.  <td>Имя </td>
    12.  <td>Возраст</td>
    13.  <td>Вес</td>
    14.  </tr>
    15.  <?php
    16.  $link = mysql_connect("localhost", "rau2","")
    17.  or die("Could not connect");
    18.  mysql_select_db("baza2") or die("Could not select database");
    19.  $query="SELECT * FROM t";
    20.  $result = mysql_query($query) or die("Query failed");
    21.  while ($line = mysql_fetch_array($result)) { 
    22.  print "<tr align=\"center\"><td>$line[1]</td>";
    23.  print "<td>$line[2]</td>";
    24.  print "<td>$line[3]</td>";
    25.  print "<td>";
    26.  $v=$line[0];
    27.  ?>
    28.  <input type=checkbox name=dfile[] value= "<?php echo $v ?>" >
    29.  <?php
    30.  print "</td></tr>";
    31.  }
    32.  ?>
    33.  </table>
    34.  <br>
    35.  <center><input type=submit name="ud" value=удалить></center>
    36.  </form>
    37.  </body>
    38.  </html>
    example2.php
    Код (PHP):
    1. <HTML>
    2. <HEAD>
    3. <TITLE> Турагенство "Travel" - Добавление данных о туристе 
    4. </TITLE>
    5. </HEAD>
    6. <BODY>
    7. <H1> Турагенство "Travel".</H1>
    8. <H2> Удаление данных о туристе.</H2>
    9. <?php
    10.  if(isset($_POST["dfile"]))
    11.  { $mass=$_POST["dfile"];
    12.  $i=0;
    13.  while($mass[$i])
    14.  {
    15.  $link = mysql_connect("localhost", "rau2","")
    16.  or die("Could not connect");
    17.  mysql_select_db("baza2",$link) or die("Could not select database");
    18.  $s1="DELETE FROM t WHERE $mass[$i]";
    19.  $result1 = mysql_query($s1) or die("Query failed");
    20.  $i++;
    21.  }
    22.  
    23. }
    24.  ?>
    25. </BODY> 
    26. </HTML>
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    столбик не указан в WHERE
     
  3. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Sql запрос не верный
    $s1="DELETE FROM t WHERE $mass[$i]";

    не указано условие нужно на пр. так
    $s1="DELETE FROM t WHERE name = '$mass[$i]'";

    так же не забывай фильтровать данные использую mysql_real_escape_string()
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Добавлю, что подключаться к б.д. на каждой итерации цикла и выбирать базу данных по-новой - это... ну, в общем весьма неправильно. Вынеси это до цикла. Да и сам запрос на удаление тоже. Тут вообще цикл не нужен - делай implode по запятой и один запрос, в котором все перечисленные через запятую значения будут попадать в MySQL функции IN().
     
  5. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    mysql_real_escape_string() можно подробней про эту функцию и как ее правильно использовать и где именно в коде?
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  8. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    На php.net описываются сами функции. Та ссылка, которую я предложил ведёт на статью для новичков о том, почему вообще нужно слэшить данные, про SQL-инъекции и пр., всё на русском и доступно :)
     
  9. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    вынес подключение к базе за цикл...указал
    Код (Text):
    1.  $s1="DELETE FROM t WHERE name = $mass[$i]";
    в результате теперь вообще не удаляются данные...и никаких ошибок не выкидывает...что делать???
     
  10. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    $mass[$i] - строка, возьми в апострофы
     
  11. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    пробывал и такой вариант, не помогает...(((
     
  12. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ну либо "пост" пустой, либо.....не верю (с)

    давай код целиком...
     
  13. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    форма
    Код (Text):
    1.  <html>
    2.  <HEAD>
    3.  <META http-equiv=content-type content="text/html; charset=windows-1251">
    4.  </HEAD>
    5.  <body >
    6.  <br><br><br><br><br>
    7.  <center><h2>Удаление данных о туристе</h2></center>
    8.  <form method="post" action="example2.php" >
    9.  <table align="center"border=1>
    10.  <tr align="center">
    11.  <td>Имя </td>
    12.  <td>Возраст</td>
    13.  <td>Вес</td>
    14.  </tr>
    15.  <?php
    16.  $link = mysql_connect("localhost", "rau2","")
    17.  or die("Could not connect");
    18.  mysql_select_db("baza2") or die("Could not select database");
    19.  $query="SELECT * FROM t";
    20.  $result = mysql_query($query) or die("Query failed");
    21.  while ($line = mysql_fetch_array($result)) {
    22.  print "<tr align=\"center\"><td>$line[1]</td>";
    23.  print "<td>$line[2]</td>";
    24.  print "<td>$line[3]</td>";
    25.  print "<td>";
    26.  $v=$line[0];
    27.  ?>
    28.  <input type=checkbox name=dfile[] value= "<?php echo $v ?>" >
    29.  <?php
    30.  print "</td></tr>";
    31.  }
    32.  ?>
    33.  </table>
    34.  <br>
    35.  <center><input type=submit name="ud" value=удалить></center>
    36.  </form>
    37.  </body>
    38.  </html>
    "example2.php"......
    Код (Text):
    1. <HTML>
    2. <HEAD>
    3. <TITLE> Турагенство "Travel" - Добавление данных о туристе
    4. </TITLE>
    5. </HEAD>
    6. <BODY>
    7. <H1> Турагенство "Travel".</H1>
    8. <H2> Удаление данных о туристе.</H2>
    9. <?php
    10.  if(isset($_POST["dfile"]))
    11.  { $mass=$_POST["dfile"];
    12.  $i=0;
    13.   $link = mysql_connect("localhost", "rau2","")
    14.  or die("Could not connect");
    15.  mysql_select_db("baza2",$link) or die("Could not select database");
    16.  $s1="DELETE FROM t WHERE name = '$mass[$i]'";
    17.  $result1 = mysql_query($s1) or die("Query failed");
    18.  
    19.  while($mass[$i])
    20.  {
    21.  
    22.  $i++;
    23.  }
    24.  
    25. }
    26.  ?>
    27. </BODY>
    28. </HTML>
     
  14. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ой, этта, а это не "ЛАНТА-ТУР ВОЯЖ" тебе заказала скрипт удаления клиентов написать?
     
  15. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    нет))))я просто новичок вообще во всем этом деле...хочу научиться ...вот скачал скрипт уже не помню с какого сайта...создал примитивную БД ...вот хочу написать несколько скриптов, чтобы производить некоторые операции с этой базой(добавление, удаление, обновление данных), тем самым вникнуть в весь этот "темный лес"...но пока не очень получается((((не силен я в программировании...помоги если можешь...буду очень признателен
     
  16. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ну переде удалением сделай хотя бы echo $mass[$i] чтобы понять, есть тебе что удалять или нет...
     
  17. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    выводится число 12...что это означает?
     
  18. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    это означает, что ты даешь команду удалить юзера, имя которому 12

    вот теперь иди и смотри в БД, есть ли у тебя юзер, у которого name равно 12
     
  19. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    такого имени нет в базе...
     
  20. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    вот, ответили на этот вопрос :) может еще какие есть вопросы? :)
     
  21. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    так почему все таки не удаляются записи?
     
  22. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ты издеваешься чтоль?

    что "оно" должно удалить? нельзя удалить то, чего НЕТ в базе....
     
  23. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А ты проверь есть ли хотя бы 1 пользователь с именами которые находятся в $mass[$i]

    Возьми за привычку экранировать все данные которые ты подставляешь в sql запросы
     
  24. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    откуда оно тогда вообще берется? я использую checkbox ставлю галочку на против той строки которую хочу удалить
     
  25. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Берется что???

    Сможешь для примера дать строку из базы.В массиве ты передаешь числа, а имена пользователей то же числа???
    Или ты все таки хотел удалять по ID номеру или по другому идентификатору?