Kredov long

Запросы $_POST

Тема в разделе "PHP", создана пользователем LOMANI, 7 фев 2013.

  1. LOMANI

    LOMANI

    Регистрация:
    18 янв 2013
    Сообщения:
    76
    Симпатии:
    5
    не понял
    это новый файлик создать нужно чтоль? у меня запрос <form name="form1" method="post" action="/null/seriya_null.php">
     
  2. alxndr52

    alxndr52

    Регистрация:
    5 фев 2013
    Сообщения:
    35
    Симпатии:
    13
    PHP:
    <form action="1.php" method="post">
    img<input name="img" type="text">
    </form>
     
     
    <?php
    $q 
    "SELECT `name`, `path` FROM `".$_POST['table_db']."` WHERE `active` = 1 AND ";
     
    if (isset(
    $_POST['img']))  { $q $q."`".$_POST['img']."` = '' OR";}
     
    echo 
    $q.' \n';
    echo 
    $_POST['img'];
    ?>
    PHP:
     $q "SELECT `name`, `path` FROM `".$_POST['table_db']."` WHERE `active` = 1 AND ";
     
    if (!empty(
    $_POST['img']))  { $q $q."`".$_POST['img']."` = '' OR";}
     
    echo 
    $q.' \n';
    echo 
    $_POST['img'];
    Все работает! ввел 445 ниже что вышло

    SELECT `name`, `path` FROM `` WHERE `active` = 1 AND `445` = '' OR \n445

    можно посмотреть поля базы
    --- добавлено: 7 фев 2013 в 17:32 ---
    вот так пойдет
    PHP:
    <form action="1.php" method="post">
    table_db<input name="table_db" type="text">
    pict<input name="pict" type="text">
    img<input name="img" type="text">
    pict_alt<input name="pict_alt" type="text">
    img_alt<input name="img_alt" type="text">
    rus_tpl<input name="rus_tpl" type="text">
    eng_tpl<input name="eng_tpl" type="text">
    text1<input name="text1" type="text">
    text2<input name="text2" type="text">
    <input name="" type="submit">
    </form>
     
     
    <?php
    $q 
    "SELECT `name`, `path` FROM `".$_POST['table_db']."` WHERE `active` = 1 AND ";
    if (!empty(
    $_POST['pict']))  { $q $q."`".$_POST['pict']."` = '' ";}
    if (!empty(
    $_POST['img']))  { $q $q."OR `".$_POST['img']."` = '' ";}
    if (!empty(
    $_POST['pict_alt']))  { $q $q."OR `".$_POST['pict_alt']."` = '' ";}
    if (!empty(
    $_POST['img_alt']))  { $q $q."OR `".$_POST['img_alt']."` = '' ";}
    if (!empty(
    $_POST['rus_tpl']))  { $q $q."OR `".$_POST['rus_tpl']."` = '' ";}
      if (!empty(
    $_POST['eng_tpl']))  { $q $q."OR `".$_POST['eng_tpl']."` = '' ";}
      if (!empty(
    $_POST['text1']))  { $q $q."OR `desc` < `".$_POST['text1']."` ";}
        if (!empty(
    $_POST['text2']))  { $q $q."OR `tech` < `".$_POST['text2']."`";}
    echo 
    $q;
    ?>
     
  3. LOMANI

    LOMANI

    Регистрация:
    18 янв 2013
    Сообщения:
    76
    Симпатии:
    5
    всё работает и выводит
    но только чтото не так... ща соображу
     
  4. saxum2010

    saxum2010

    Регистрация:
    6 фев 2013
    Сообщения:
    111
    Симпатии:
    34
    Смотри по запросу, сейчас я из POST все данные вынимаю и вставляю запрос

    если нужен `active` обязательно пиши так:
    PHP:
    foreach ($_POST as $key=>$item)
    {
    $where .= ($where " " " OR ") . $key "='" $item "'"
    }
    $q "SELECT `name`, `path` FROM `seriya` WHERE `active` = 1 AND (" $where ")";
     
    LOMANI нравится это.
  5. alxndr52

    alxndr52

    Регистрация:
    5 фев 2013
    Сообщения:
    35
    Симпатии:
    13
    А если $_POST['table_db'] пойдет не первым будет немного нето.
     
  6. saxum2010

    saxum2010

    Регистрация:
    6 фев 2013
    Сообщения:
    111
    Симпатии:
    34
    вытяни $_POST['table_db'] раньше , к примеру $table_db = $_POST['table_db']; затем удали из стека
    unset($_POST['table_db']);
    а потом вставиш
    $q = "SELECT `name`, `path` FROM $table_db WHERE `active` = 1 AND ($where)";
     
  7. alxndr52

    alxndr52

    Регистрация:
    5 фев 2013
    Сообщения:
    35
    Симпатии:
    13
    PHP:
    <form action="1.php" method="post">
    table_db<input name="table_db" type="text">
    pict<input name="pict" type="text">
    img<input name="img" type="text">
    pict_alt<input name="pict_alt" type="text">
    img_alt<input name="img_alt" type="text">
    rus_tpl<input name="rus_tpl" type="text">
    eng_tpl<input name="eng_tpl" type="text">
    text1<input name="text1" type="text">
    text2<input name="text2" type="text">
    <input name="" type="submit">
    </form>
     
     
    <?php
    if (!empty($_POST['table_db']))  {
    $q "SELECT `name`, `path` FROM `".$_POST['table_db']."` WHERE `active` = 1 AND ";
    $_POST['table_db'] = null;  <----------------------------- или  unset($_POST['table_db']) одно и тоже
     
    foreach ($_POST as $key=>$item)
    {
    $q .= ($where " " " OR ") . $key "='" $item "'";
    }
     
     
    echo 
    $q."  \n";
     
    } else { echo 
    'no';}
    так правильней
     
    LOMANI нравится это.
  8. LOMANI

    LOMANI

    Регистрация:
    18 янв 2013
    Сообщения:
    76
    Симпатии:
    5
    вывело SELECT `name`, `path` FROM `444` WHERE `active` = 1 AND OR table_db='' OR pict='333' OR img='' OR pict_alt='' OR img_alt='' OR rus_tpl='' OR eng_tpl='' OR text1='' OR text2=''

    я заполнил 2 поля table_db и pict /// лишнее OR table_db='' OR

    должно быть так:
    <input type="text" name="text1" value="50"> - текстовое поле, заполнено 50, в запрос должно попасть `desc` < '50'
    ну и 2рое поле
    <input type="text" name="text2" value="50"> - попасть в запрос `tech` < '50'

    далее 6 чекбоксов:

    <input type="checkbox" name="pict" value="pict"> - попадает `pict` = ''
    Большая картинка<br>
    <input type="checkbox" name="img" value="img"> - попадает `img` = ''
    Маленькая картинка

    <input type="checkbox" name="pict_alt" value="pict_alt"> - попадает `pict_alt` = ''
    ALT для большой картинки<br>
    <input type="checkbox" name="img_alt" value="img_alt"> - попадает `img_alt` = ''
    ALT для маленькой картинки

    <input type="checkbox" name="rus_tpl" value="rus_tpl"> - попадает`rus_tpl` = ''
    {1} - RUS шаблон метаинформации<br>
    <input type="checkbox" name="eng_tpl" value="eng_tpl"> - попадает `eng_tpl` = ''
    ENG


    между всеми нужно OR
    самый важный момент - в запрос должны попадать только те параметры, в которых есть галочки
    --- добавлено: 7 фев 2013 в 19:35 ---
    если ставить unset($_POST['table_db']) то лишним появляется только OR (`active` = 1 AND OR text1='50')
    --- добавлено: 7 фев 2013 в 19:42 ---
    я так понимаю нужно это вывести во 2й запрос , так как в первом запросе значение поля должно быть пустым , а в этом оно должно быть цифиркой т.е. введено
     
  9. saxum2010

    saxum2010

    Регистрация:
    6 фев 2013
    Сообщения:
    111
    Симпатии:
    34
    LOMANI, попробуй так вывести
    PHP:
    $table_db $_POST['table_db']; unset($_POST['table_db']);
     
    foreach (
    $_POST as $key=>$item)
    {
        if(
    $key == 'text1'){$r="<";}elseif($key == 'text2'){$r=">";}else{$r="=";}
        
    $where .= ( $where " OR " "" ) . $key $r '$item'";
    }
     
    $q "SELECT `name`, `path` FROM `$table_db` WHERE `active` = 1 AND ($where)";
     
  10. LOMANI

    LOMANI

    Регистрация:
    18 янв 2013
    Сообщения:
    76
    Симпатии:
    5
    saxum2010, вывело SELECT `name`, `path` FROM `seriya` WHERE `active` = 1 AND text1 < '50' OR text2 < '50' OR pict = 'pict' OR img = 'img'

    изменил знак text2 < (не в ту сторону был) .... ну и значения pict \ img не пусты, а сами себя туда вписали
    --- добавлено: 8 фев 2013 в 05:34 ---
    а ещё в запросе должен быть не text1 \ text2 , а desc \ tech
    --- добавлено: 8 фев 2013 в 05:38 ---
    если тут $key . " $r '$item'"; убрать item то pict \ img будут пустыми как и нужно ..... но desc \ tech то же будут пустыми, а должны быть значения
    всё ещё можно обойтись без разделения скрипта?

    з.ы. пытался через $key as $keys сделать ... чет не получилось


    з.ы. запускаю прямо в рабочую БД, а не в воздух
     
  11. saxum2010

    saxum2010

    Регистрация:
    6 фев 2013
    Сообщения:
    111
    Симпатии:
    34
    PHP:
    $table_db $_POST['table_db']; unset($_POST['table_db']);
     
        foreach (
    $_POST as $key=>$item)
        {
        if(
    $key == 'desc'){$r="<";}elseif($key == 'tech'){$r="<";}else{$r="="$item '';}
        
    $where .= ( $where " OR " "" ) . $key $r '$item'";
        }
     
        
    $q "SELECT `name`, `path` FROM `$table_db` WHERE `active` = 1 AND ($where)";
     
    LOMANI нравится это.
  12. LOMANI

    LOMANI

    Регистрация:
    18 янв 2013
    Сообщения:
    76
    Симпатии:
    5
    saxum2010, почти то что нужно, заменил в форме text1\text2 и получил SELECT `name`, `path` FROM `seriya` WHERE `active` = 1 AND (desc < '50' OR tech < '50' OR pict = '' OR img = '') ... супер
    не пойму зачем скобки AND ($where)";

    но в базу так и не улетело, пробовал сделать так, вообще ничего не вывело кроме echo которые рисуют табличку
    PHP:
    $q mysql_query ("SELECT `name`, `path` FROM `$table_db` WHERE `active` = 1 AND $where");
     
  13. alxndr52

    alxndr52

    Регистрация:
    5 фев 2013
    Сообщения:
    35
    Симпатии:
    13
    в кавычки
     
  14. LOMANI

    LOMANI

    Регистрация:
    18 янв 2013
    Сообщения:
    76
    Симпатии:
    5
    alxndr52, блин, точно, 3й раз я на эти ковычки напарываюсь в ЭТОМ скрипте, всё никак запомнить не могу
    --- добавлено: 8 фев 2013 в 09:57 ---
    аммм... а как это сделать? =))
    так $key == '`desc`' и так <input type="text" name="`desc`" value="50"> не работает
     
  15. alxndr52

    alxndr52

    Регистрация:
    5 фев 2013
    Сообщения:
    35
    Симпатии:
    13
    PHP:
    $where .= ( $where " OR " "" ) . '`'.$key.'`' $r '$item'";
     
    LOMANI нравится это.
  16. LOMANI

    LOMANI

    Регистрация:
    18 янв 2013
    Сообщения:
    76
    Симпатии:
    5
    оооо алилуля

    конечный результат
    PHP:
    $table_db $_POST['table_db'];
    unset(
    $_POST['table_db']);

    foreach (
    $_POST as $key=>$item)
    {
    if(
    $key == 'desc'){$r="<";}elseif($key == 'tech'){$r="<";}else{$r="="$item '';}
    $where .= ( $where " OR " "" ) . '`'.$key.'`' $r '$item'";
    }

    $q mysql_query ("SELECT `name`, `path` FROM `$table_db` WHERE `active` = 1 AND $where");
    --- добавлено: 8 фев 2013 в 10:29 ---
    ещё такой вопрос
    как можно отключать \ включать тактовые поля т.е. по чек бокс (галочка) активирует текстовое поле куда вписывается значение, если не активировано то значение и параметр поля не отсылается вообще

    так как при значении 0 всё= выводятся те поля которые не хотелось бы выводить по эти параметрам
     
  17. LOMANI

    LOMANI

    Регистрация:
    18 янв 2013
    Сообщения:
    76
    Симпатии:
    5
    такой вариант: если On то работает нормально и нормально уходит в базу... если Off то запрос в базу не уходит
    PHP:
    <p><input type="radio" name="activ_desc" onClick="form1.desc.disabled=false;">On
    <input type="radio" name="activ_desc" onClick="form1.desc.disabled=true;" radio>Off
    <br/><span>Количество (минимумзнаков в описании: </span>
    <
    input type="text" name="desc" disabled="disabled">
    </
    p>
    <
    p><input type="radio" name="activ_tech" onClick="form1.tech.disabled=false;">On
    <input type="radio" name="activ_tech" onClick="form1.tech.disabled=true;" radio="radio">Off
    <br/><span>Количество (минимумзнаков в техническом описании: </span>
    <
    input type="text" name="tech" disabled="disabled">
    </
    p>
     
  18. LOMANI

    LOMANI

    Регистрация:
    18 янв 2013
    Сообщения:
    76
    Симпатии:
    5
    ну да, догнал почему при офф не работает activ_tech
     
  19. alxndr52

    alxndr52

    Регистрация:
    5 фев 2013
    Сообщения:
    35
    Симпатии:
    13
    В мучениях рождается истина!:bounce:
     
  20. WAYS

    WAYS

    Регистрация:
    13 фев 2013
    Сообщения:
    6
    Симпатии:
    0
    Ну конечно не по теме, но вы хоть бы экранировали post.
    PHP:
    function clear($str)
        {
            
    $str trim($str);
            
    $str stripslashes($str);
            
    $str htmlspecialchars($str);
            return 
    $str;
        }