За последние 24 часа нас посетили 17502 программиста и 1650 роботов. Сейчас ищут 932 программиста ...

Трубеутся помощь в связях форм

Тема в разделе "Прочие вопросы по PHP", создана пользователем Huan, 3 окт 2014.

  1. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Все же я буду писать так как мне нравится, ок?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Я в душе не ебу что ты делаешь не так, но проверять в таком случае надо на массивность для прохода в цикле (а еще лучше один раз и навсегда решить, массив ли этот параметр у тебя), а не на строковость, потому что конечные члены массива один хрен будут строками. =)
    Ну давай уже, соберись.

    Добавлено спустя 29 секунд:
    Ты можешь кота назвать Шарик, и водить на поводке.
     
  3. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты сам своей головой додумайся. ну реально. ты написал лажу. да, про массив все поняли. если ты думаешь что проверка у тебя только на строку то ты ошибаешься. там много проверочного кода. который не нравится моей зазнавшейся душе. но только ты настолько горд что не видишь какую стряпню написал. чувак, расслабься уже)))
     
  4. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Да то, что конечные члены массива - это строки и ежу понятно. Ну ок, я определился. У меня в параметре page должна быть строка. Проверку убираю нафиг.

    Делаем так:
    Код (PHP):
    1. $str = $_GET['page'];
    2.  
    3. if ($str === urldecode($str)) {
    4.     $str = trim($str);
    5. } else {
    6.     $str = trim(urldecode($str));
    7. }
    8.  
    9. switch ($str) {
    10.     case 'Владимир':
    11.         $id=1; break;
    12.     case 'Виталий':
    13.         $id=2; break;
    14.     case 'Егор':
    15.         $id=3; break;
    16.     default:
    17.         echo 'Нет такого имени в БД';
    18. }
    Что будет, если я зайду на страничку с такими get параметрами: "&page[]=blablabla&page[]=blablabla"?
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну не позорься ты ну
     
  6. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    блин, что мы получим, если:

    Код (PHP):
    1. $str = $_GET['page'];
    2.  
    3. $str = trim(urldecode($str));
    4.  
    5. switch ($str) {
    6.     case 'Владимир':
    7.         $id=1; break;
    8.     case 'Виталий':
    9.         $id=2; break;
    10.     case 'Егор':
    11.         $id=3; break;
    12.     default:
    13.         echo 'Нет такого имени в БД';
    14. }
    15.  
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не понял
     
  8. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Ну что мне покажет страничка, если я зайду с такими параметрами "?page[]=blablabla&page[]=blablabla"?

    Добавлено спустя 2 минуты 55 секунд:
    Не спорю, лучше бы это не выкладывал, но сердцу не прикажешь... Вы ложил и выложил. Спор не об этом.
     
  9. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    GET /bla.php?p=ololo HTTP/1.1
    PHP Notice: Undefined index: page in bla.php on line 0
    Нет такого имени в БД

    вот так, например

    Добавлено спустя 3 минуты 15 секунд:
    GET /bla.php?page[]=ololo&page[]=lolol HTTP/1.1
    PHP Warning: urldecode() expects parameter 1 to be string, array given in bla.php on line 0+1
    Нет такого имени в БД

    вот+1 так+1, например+1
     
  10. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Зачем ты мне это пишешь, если не отправить page я и сам знаю что произойдет. Ты вот это вставь: "?page[]=blablabla&page[]=blablabla".

    Добавлено спустя 53 секунды:
    Ну так проверка нужна была или нет?

    Добавлено спустя 1 минуту 23 секунды:
    Как же так, чувак? Строки ведь должны были быть?
     
  11. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вот и я о том же. тебе говорят что твой код низкого качества а ты до усеру доказываешь что там может быть массив. фу...
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Дык у тебя не предусмотрена обработка массива, что она покажет? Ворнинг. Не понимаю, чего ты хочешь. Ты запутался, и не можешь собраться с мыслями, и не понимаешь, что тебе говорят.
     
  13. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Ну так а когда была предусмотрена, мне сказали, что она не нужна... Мне сказали, что она бессмысленна...
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    блин
    давай ты уже включай голову, ладно?
    не было у тебя никакой проверки массива. тебе об этом было сказано несколько раз. соберись уже.
     
  15. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Какое качество? Ты о чем? Я пример привел! Я по-твоему веб приложение тебе сейчас предоставил?

    Добавлено спустя 1 минуту 42 секунды:
    У меня была проверка, которая не пропускала ничего, кроме строки. Мне сказали, что она бессмысленна. Люди, вы что не выспались что-ли?
     
  16. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вот в этом и разница между нами. я даже для новичков и потерявшихся предоставляю высококачественный код. бесплатно. а ты налепил кусок кода который сам не понимаешь и не понимаешь какая к тебе претензия. да еще и отказываешься от ответственности за свой код. клевый же диалог вышел, да?)))) голова не только чтоб в неё кушать. удачи тебе)))
     
  17. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Да, чувак, в $_GET['page'] может быть только строка... Нет смысла проверять строка это или нет... Тебе тоже удачи.

    Добавлено спустя 24 секунды:
    Высококачественный...
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    еще раз. для детей.
    Если у тебя подразумевается, что параметр это массив, то ты должен делать проверку на то, что он массив, и что не пустой. И то, не потому, что так "правильно", а потому что иначе форыч выдаст ворнинг.

    Если ты не подразумеваешь, что твой параметр массив, то он - строка, если isset или !empty. Кстати, использовать обе эти функции - глупо. Достаточно одной.

    А что ты там себе нафантазировал, что проверка на строку позволит тебе выявить массив - это ошибочно.
     
  19. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    оооох, Игорь, ну блин, я такое мог от этого чувака ожидать, но от тебя...

    Вот смотри, я предполагаю, что мне должна приходить строка. Ок? Ок.

    Пишу такой код:
    Код (PHP):
    1. $str = $_GET['page'];
    2.  
    3. if (is_string($str)) {
    4.     $str = trim(urldecode($str));
    5.  
    6.     switch ($str) {
    7.         case 'Владимир':
    8.             $id=1; break;
    9.         case 'Виталий':
    10.             $id=2; break;
    11.         case 'Егор':
    12.             $id=3; break;
    13.         default:
    14.             echo 'Нет такого имени в БД';
    15.     }
    16. } else {
    17.     echo '$str не массив';
    18. }
    19.  
    Почему мне говорят, что проверка is_string не имеет смысла?
     
  20. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    =) просто забей.
     
  21. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Не, чувак, это уже дело принципа. Почему она не имеет смысла? Может потому что в этом случае вывалившийся ворнинг не так страшен, как если бы вывалился ворнинг, когда мы начнем скакать по воображаемому массиву?
     
  22. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сдаюсь, ты победил!
     
  23. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    блин, я ожидал более серьезного диалога... обидно шопесец...
     
  24. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    ТС, "Ты теперь так кури", например:

    Код (Text):
    1.  
    2. $names=array('Виталий'=>1,'Владимир'=>2,'Акакий'=>99);
    3.  
    4. $get_names=function() use(&$names) {
    5.  
    6.   extract($_GET);
    7.  
    8.   if(!isset($page)
    9.     return null;
    10.  
    11.  if(isset($names[$page]))
    12.      return $names[$page];
    13.   else
    14.     return false;
    15. };
    16.  
    17. if($get_names = $get_names()){
    18.  // do something
    19. }
    20. else
    21.   echo 'Нинашол';
    id может быть и 0, можно еще проверить на ===null чтоб типа сказать "нет ввода" итп.

    Каждый раз когда вы замечаете потребность в switch, вспоминайте что в php все массивы это balanced tree, то есть голимые ключи.

    Добавлено спустя 2 минуты 45 секунд:
    Да, если у вас допустим из БД был такой массив:

    1=>Виталий, 2=>Владимир, 99=>Акакий, то

    array_flip();

    вам сделает такой, как в примере. Пользуйтесь встроенным деревом!

    Это не считая array_search() конечно. Что касается куда деваются данные из формы - если они по заголовкам ушли на сервер - значит там надо просто их найти и все. В браузерах есть панель показа заголовков. А, да, в форму тоже полезно воткнуть атрибут accept-charset, или как он там,

    Добавлено спустя 11 минут 13 секунд:
    Еще мелки совет. Вместо вот такой лапши

    Код (Text):
    1. echo "<CENTER>";
    2. echo "<FORM method=GET>";
    3. echo "Название страны <br>";
    4. echo "<INPUT type=text NAME=page SIZE=57> <br>";
    5. echo "<INPUT type=reset VALUE=Сброс>";
    6. echo "<INPUT type=SUBMIT VALUE=Послать>";
    7. echo "</FORM>";
    8. echo "</CENTER>";
    Делается по-разному, однако зная что такое echo вы можете сделать в стопицот раз проще

    Код (Text):
    1. echo '<CENTER>
    2.        <FORM method=GET>
    3.        Название страны <br>
    4.       <INPUT type=text NAME=page SIZE=57> <br>
    5.       <INPUT type=reset VALUE=Сброс>
    6.       <INPUT type=SUBMIT VALUE=Послать>
    7.       </FORM>
    8.      </CENTER>';
    В отличии от JS - PHP спокойно передает переносы в литералах. Но это еще не все, позвонив прямо сейчас вы можете получить нормально разукрашенные IDE текст html если прекратите катить php, причем оно совершенно нормально выводится из функции или из цикла - но с циклами и условиями будет некоторый геморрой, в общем как из функции

    Код (Text):
    1.  
    2. $form = function() {
    3. ?>
    4.        <CENTER>
    5.        <FORM method=GET>
    6.        Название страны <br>
    7.       <INPUT type=text NAME=page SIZE=57> <br>
    8.       <INPUT type=reset VALUE=Сброс>
    9.       <INPUT type=SUBMIT VALUE=Послать>
    10.       </FORM>
    11.      </CENTER>
    12. <?php
    13. };
    $form(); // вывели на страницу

    Кстати, а это что за тег такой? - <CENTER>
     
  25. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Морально устаревший.