За последние 24 часа нас посетили 17845 программистов и 1656 роботов. Сейчас ищут 2049 программистов ...

Удаление отмеченных записей / проблема...

Тема в разделе "PHP и базы данных", создана пользователем Flip, 9 мар 2008.

  1. Flip

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

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    Чекбоксами отмечаю те записи, которые собираюсь удалить. Но при нажатии кнопки [Удалить], скрипт обрабатывает только одну запись.
    код на удаление вот такой:
    PHP:
    1. <?php
    2. if($_POST["dfile"])
    3. { $mass=$_POST["dfile"];
    4. $i=0;
    5. while($mass[$i])
    6. {
    7. // Устанавливаем соединение с базой данных
    8. include "../include/config.php";
    9.  
    10. $s="DELETE FROM Resources WHERE idres=$mass[$i]";
    11. $result = mysql_query($s) or die("Query failed");
    12. $i++;
    13. }
    14.  
    15. Header("Location: otvet.php?i=2");
    16. }
    17. ?>
    помогите разобраться, пжлста =\
     
  2. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    код формы в студию - здесь всё нормально.
     
  3. Clone

    Clone Guest

    Попробуй
    PHP:
    1. <?php
    2. if($_POST["dfile"])
    3. { $mass=$_POST["dfile"];
    4. $i=0;
    5. foreach($mass as $i => $val)
    6. {
    7. // Устанавливаем соединение с базой данных
    8. include "../include/config.php";
    9.  
    10. $s="DELETE FROM Resources WHERE idres=$mass[$i]";
    11. $result = mysql_query($s) or die("Query failed");
    12. $i++;
    13. }
    14.  
    15. Header("Location: otvet.php?i=2");
    16. }
    17.  
     
  4. Flip

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

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    вот код на форму
    PHP:
    1. <?php
    2. // ПОДКЛЮЧАЕМ КОНФИГУРАЦИОННЫЙ ФАЙЛ
    3. include "../include/config.php";
    4.  
    5. $query="select * from resources order by Name";
    6. $result = mysql_query($query) or die("Query failed");
    7. while ($line = mysql_fetch_array($result)) {
    8. print "<tr align=\"center\"><td>$line[idres]</td>";
    9. print "<td>$line[catid]</td>";
    10. print "<td>$line[Name]</td>";
    11. print "<td>$line[Link]</td>";
    12. print "<td>$line[Hint]</td>";
    13. print "<td>";
    14. $v=$line[0];
    15. ?>
    16. <input type=checkbox name=dfile[] value= "<?php echo $v ?>" >
    17. <?php
    18. print "</td></tr>";
    19. }
    20. ?>
    21. </table>
    22. <br>
    23. <center><input type=submit name="ud" value=удалить></center>
    24. </form>
    25. </body>
    26. </html>
     
  5. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Кажется я понял - у тебя в первом письме вот этот код:
    стоит ВНУТРИ цикла. То есть - ты в каждом проходе цикла подключаешь базу данный. Один раз она подключает, а второй раз она тебя посылает.
    Корочь - вынеси подключение перед циклом.
    И, когда оформляешь письмо, пользуйся не кнопкой "Code", а кнопкой "PHP" для подсветки кода - тогда лучше вид и ошибки сразу видны.
     
  6. Flip

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

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    да, всё верно....всё заработало!

    учту =)

    Спасибки!
     
  7. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Код (Text):
    1.  <?php
    2.  if($_POST["dfile"])
    3.  { $mass=$_POST["dfile"];
    4.  $i=0;
    5.  while($mass[$i])
    6.  {
    7.  // Устанавливаем соединение с базой данных
    8.  include "../include/config.php";
    9.  
    10.  $s="DELETE FROM Resources WHERE idres=$mass[$i]";
    11.  $result = mysql_query($s) or die("Query failed");
    12.  $i++;
    13.  }
    14.  
    15.  Header("Location: otvet.php?i=2");
    16.  }
    17.  ?>
    Писец. В цикле делаем туеву кучу запросов на удление да к базе коннекктимся также каждый цикл. Это больше, чем писец.

    PHP:
    1. <?php
    2. if ($_POST['dfile']){
    3.     include '../include/config.php';
    4.     if (mysql_query('delete from `resources` where `idres` in ('.join (', ', $_POST['dfile']).')'))
    5.         header('Location: otvet.php?i=2');
    6. }
     
  8. Flip

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

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    и что? О_о
     
  9. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Плохо это. А после этих слов - решение, как этого избежать. Волшебные слова "join" и "in".
    А плохо это тем, что многократный вызов базы - это ресурсоёмкая штука. Если этого можно избежать, то лучше этого избежать.
    Можешь замерить скорость работы твоего варианта и того, который тебе предложили. Как это сделать. Например, с помощью microtime:
    PHP:
    1. <?
    2. function getminitime()
    3. {
    4.    list($usec, $sec) = explode(" ", microtime());
    5.    return ((float)$usec + (float)$sec);
    6. }
    7.  
    8. $time1=getminitime();
    9.  
    10. здесь сам скрипт
    11.  
    12. $time2=getminitime();
    13. echo "Скрипт работал: ".($time2-$time1)." секунд.";
    14. ?>
     
  10. Flip

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

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    так я студент, молодой ещё...зеленый =\
    пока стараюсь реализовывать идеи как могу, а lexa я ни в коем случае не хотел как-то обидеть (ему мои извинения)

    RomanBush спасибо тебе за наставления!
     
  11. Anonymous

    Anonymous Guest

    Ниче. Они грубые, неженственные, но хорошие программисты ) Хоть и выражаются грубо и прямолинейно, но как раз таки пытаются помочь )
     
  12. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Flip, не стоит извинятся. Ты нигде и не писал того, что могло бы обидеть. Вот смайлик примирения -> :)