За последние 24 часа нас посетили 17786 программистов и 1280 роботов. Сейчас ищет 1461 программист ...

Конструирование сложного SQL условия на основе POST данных

Тема в разделе "PHP и базы данных", создана пользователем e-sederick, 2 ноя 2006.

  1. e-sederick

    e-sederick Активный пользователь

    С нами с:
    24 окт 2006
    Сообщения:
    9
    Симпатии:
    0
    Генерим из базы чекбоксы (кол-во разное может быть)
    после того как сгенерились мы видим:

    <form name="form1" method="post" action="">
    <input type="checkbox" name="checkbox2" value="1">
    <input type="checkbox" name="checkbox3" value="2">
    <input type="checkbox" name="checkbox" value="3">
    </form>
    так вот, потом после того как юзер отметит чекбоксы, как всё передать в запрос к БД?
    т.е. SELECT * WHERE а тут данные из чекбоксов (допусти 1 и 3)
    как это генерить?
     
  2. Davil

    Davil Guest

    $chbx = $_POST['checkbox'];
    $chbx .= $_POST['checkbox2'];
    $chbx .= $_POST['checkbox4'];
     
  3. <input type="checkbox" name="checkbox[]" value="1">
    <?
    $arr=array_map("intval",$_POST['checkbox']);
    $query.="WHERE id in (".implode(",",$arr).")";
    ?>

    То ли я на точно такой же вопрос отвечал не далее пары дней назад, то ли у меня дежавю
     
  4. e-sederick

    e-sederick Активный пользователь

    С нами с:
    24 окт 2006
    Сообщения:
    9
    Симпатии:
    0
    <?
    $arr=array_map("intval",$_POST['checkbox']);

    Как сюда переслать данные всех чекбоксов?
     
  5. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Код (Text):
    1. <form name="form1" method="post" action="">
    2. <input type="checkbox" name="checkbox[1]" value="1">
    3. <input type="checkbox" name="checkbox[2]" value="2">
    4. <input type="checkbox" name="checkbox[3]" value="3">
    5. <input type='submit' value='Переслать данные всех чекбоксов'>
    6. </form>
     
  6. Mavir

    Mavir Guest

    topas. Уверен?
     
  7. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    уже начал сомневаться :)
     
  8. e-sederick

    e-sederick Активный пользователь

    С нами с:
    24 окт 2006
    Сообщения:
    9
    Симпатии:
    0
    $_POST['checkbox'] - 'checkbox' - сюда как загнать все чекбоксы?
     
  9. Mavir

    Mavir Guest

     
  10. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Так, не поленился, зделал "копи-паст", что получилось:
    PHP:
    1. <html>
    2. <head>
    3. <meta http-equiv="Content-Language" content="en" />
    4. <meta name="GENERATOR" content="Zend Studio" />
    5. <meta http-equiv="Content-Type" content="text/html; charset=cp1251" />
    6. <title>test</title>
    7. </head>
    8. <body bgcolor="#FFFFFF" text="#000000" link="#FF9966" vlink="#FF9966" alink="#FFCC99">
    9.     <form name="form1" method="post" action="">
    10.     <input type="checkbox" name="checkbox[1]" value="1">
    11.     <input type="checkbox" name="checkbox[2]" value="2">
    12.     <input type="checkbox" name="checkbox[3]" value="3">
    13.     <br>
    14.     <input type='submit' value=' Послать '>
    15.     </form>
    16. </body>
    17. </html>
    18. <?php
    19.  
    20. if (!isset($_POST['checkbox'])) die();
    21.  
    22. $arr=array_map("intval",$_POST['checkbox']);
    23. $query.="WHERE id in (".implode(",",$arr).")";
    24. echo $query;
    25. ?>
     
  11. e-sederick

    e-sederick Активный пользователь

    С нами с:
    24 окт 2006
    Сообщения:
    9
    Симпатии:
    0
    Не получается...
    буду читать и разбираться...
    надеюсь поможет
     
  12. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Что конкретно не получается? Объясните пожалуйста!
    Включите обработку ошибок
    Код (Text):
    1. error_reporting(E_ALL);
    Делайте просмотр HTML кода и кидайте сюда: будем разбираться
     
  13. e-sederick

    e-sederick Активный пользователь

    С нами с:
    24 окт 2006
    Сообщения:
    9
    Симпатии:
    0
    Правильно ли:


    <?php include("config.php");

    $connect = mysql_connect("$user_hostname", "$user_username", "$user_password");
    mysql_select_db("$user_database", $connect);

    if (isset($_POST['checkbox']))
    {
    $arr=array_map("intval",$_POST['checkbox']);
    $query.="WHERE id_lesson in (".implode(",",$arr).")";
    echo $query;
    }
    else
    {
    echo ("<form method=\"POST\">");
    $sql = mysql_query("SELECT * FROM lessons", $connect);
    while ($tablerows_1 = mysql_fetch_row($sql))
    {
    //теперь в цикле для каждой полученной строки сделаем вывод
    echo "<input type=\"checkbox\" name=\"checkbox[$tablerows_1[0]]\" value=\"$tablerows_1[0]\">$tablerows_1[1]</option> <BR>";
    }
    echo ("<input type=\"submit\" name=\"Submit\" value=\"Submit\">
    </form>");
    }



    mysql_close($connect);
    ?>
     
  14. Что значит "правильно ли"?
    Неужели читателям форума проще в уме исполнить этот код, чем тебе ткнуть один раз мышкой, и увидеть собственными глазами?!
    Что за манера задавать вопросы, ответ на которые можно получить самостоятельно?
     
  15. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Попробуйте вот так:
    PHP:
    1. <?php include("config.php");
    2.  
    3. $connect = mysql_connect("$user_hostname", "$user_username", "$user_password");
    4. mysql_select_db("$user_database", $connect);
    5.  
    6. if (isset($_POST['checkbox'])){
    7.     $arr      = array_map("intval",$_POST['checkbox']);
    8.     $query  = ' WHERE id_lesson in ('.implode(',',$arr).')';
    9.     echo ($query);
    10. } else {
    11.     echo ('<form method="POST">');
    12.     $sql = mysql_query('SELECT * FROM lessons');
    13.     while ($tablerows_1 = mysql_fetch_row($sql)){
    14.         //теперь в цикле для каждой полученной строки сделаем вывод
    15.         echo '<input type="checkbox" name="checkbox['.$tablerows_1[0].']" value="'.$tablerows_1[0].'">'.$tablerows_1[1].'<br>';
    16.     }
    17.     echo ('<input type="submit" name="Submit" value="Submit"></form>');
    18. }
    19.  
    20. mysql_close($connect);
    21. ?>
    Обратите внимание на ковычки ' и " (они по разному работают)

    Ну и сообщите о результатах: интересует сгенерированный HTML и ваше изречение о том что вас не устраивает :)
     
  16. e-sederick

    e-sederick Активный пользователь

    С нами с:
    24 окт 2006
    Сообщения:
    9
    Симпатии:
    0
    Работает, спасибо... буду дальше мучить...
    Только начинаю разбирать в ПХП... удобный язык, однако...
     
  17. topas
    позволю себе предположить, что ты старательно позаменял все двойные кавычки на одинарные в целях повышения производительности. я прав?
     
  18. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Чебурген
    и нет и да... привычка скорее всего :)
     
  19. привычка твоя неудачная.
    никакой разницы нету, ачеловека ты только с толку сбиваешь, добавляя ему ещё неизвестности.
    хтмл выводить эхом - и вовсе моветон. в любых кавычках.
    если уж где и стоило трогать кавычки в этом коде, так это в
    mysql_connect
     
  20. e-sederick

    e-sederick Активный пользователь

    С нами с:
    24 окт 2006
    Сообщения:
    9
    Симпатии:
    0
    <?php
    include("config.php");
    $connect = mysql_connect("$user_hostname", "$user_username", "$user_password");
    mysql_select_db("$user_database", $connect);

    $arr = array_map("intval",$_POST['checkbox']);
    $query = ' WHERE lessons.id_lesson in ('.implode(',',$arr).') AND users.school=school.id_school AND main.user_id=users.id AND main.lesson_id=lessons.id_lesson
    ORDER BY main.date'; // готовим текст запроса
    $result = 'SELECT `main`.`id`, `main`.`date`, `users`.`login`, `users`.`name`, `school`.`name_school`, `users`.`class`, `users`.date_reg`, `lessons`.`name_lesson`, `main`.`mark`
    FROM `main`, `users`, `school`, `lessons`'.$query; // подготовили текст запроса
    or die($query.'<br>'.$mysql_error());//запрос

    while ($row = mysql_fetch_assoc($result)) {
    {
    // echo("<BR> $tablerows[7]");
    }
    mysql_close($connect);

    ?>
     
  21. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Попробуй так:
    PHP:
    1. <?php
    2.  
    3. include("config.php");
    4.  
    5. $connect = mysql_connect("$user_hostname", "$user_username", "$user_password");
    6. mysql_select_db("$user_database", $connect);
    7.  
    8. $arr = array_map("intval",$_POST['checkbox']);
    9. $query = 'SELECT `main`.`id`, `main`.`date`, `users`.`login`, `users`.`name`, `school`.`name_school`, `users`.`class`, `users`.`date_reg`, `lessons`.`name_lesson`, `main`.`mark` ';
    10. $query .= ' FROM `main`, `users`, `school`, `lessons`';
    11. $query .= ' WHERE lessons.id_lesson in ('.implode(',',$arr).') AND users.school=school.id_school AND main.user_id=users.id AND main.lesson_id=lessons.id_lesson ';
    12. $query .= ' ORDER BY main.date';
    13. $result = mysql_query($query) or die($query.'<br>'.mysql_error());
    14.  
    15. while ($row = mysql_fetch_row($result)){
    16.     echo("<BR> $row[7]");
    17. }
    18.  
    19. mysql_close($connect);
    20.  
    21. ?>
     
  22. это ты к чему?