За последние 24 часа нас посетили 17848 программистов и 1679 роботов. Сейчас ищут 873 программиста ...

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

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

  1. Huan

    Huan Новичок

    С нами с:
    3 окт 2014
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте, требуется помощь по связи форм. передача производится методом Get(пробовал и Post), не передается переменная. ниже представляю код проги.

    1.html
    Код (Text):
    1. <FORM method="GET" action="index.php" >
    2. Название страны<br>
    3. <INPUT type="text" NAME="page" SIZE=57> <br>
    4. <INPUT type="reset" VALUE="Сброс">
    5. <INPUT type="SUBMIT" VALUE="Послать">
    6. </FORM>
    index.php
    Код (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>";
    9. //
    10. $str=$_GET['page'];
    11. switch ($str) {
    12. case "Владимир":
    13. $id=1;
    14. break;
    15. case "Виталий":
    16. $id=2;
    17. break;
    18. case "Егор":
    19. $id=3;
    20. break;
    21. default:
    22. echo "Нет такого имени в БД";
    23. }
    Выводит в итоге в index.php, что нет такого имени в БД.
     
  2. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Здесь у тебя нет никакой БД =)

    Добавлено спустя 9 минут 35 секунд:
    Ну а так:

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

    Huan Новичок

    С нами с:
    3 окт 2014
    Сообщения:
    4
    Симпатии:
    0
    Нет, не авторизацию...
    Все равно не идет, в Index.php начал выводить через эко все, выводит вопросительные знаки... Может библиотеку какую не установил?
     
  4. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Нет, там проблемы с кодировкой. В какой кодировке у тебя index.php?
     
  5. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Не вижу смысла проверять на строку.
    В $_GET не может ничего прийти кроме строки.
    Да и к тому же если у вас будет отсутствие, возникнут нотисы.
     
  6. Huan

    Huan Новичок

    С нами с:
    3 окт 2014
    Сообщения:
    4
    Симпатии:
    0
    utf-8...
     
  7. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Может
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    как?
     
  9. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    ?foo[]=bar&foo[]=bar&foo[]=bar
     
  10. Ganzal

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

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

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    мне то какая разница что мне там реализует массив, парсер или нет? мне нужно, чтобы в переменной $_GET['page'] была строка, а не массив.

    Добавлено спустя 7 минут 6 секунд:
    Ну так и что?
    Опять же делаю опыт.
    Код (PHP):
    1. echo '<pre>'; var_dump($_GET); echo '</pre>'; die;
    2.  
    Ответ:
    Код (PHP):
    1. array(1) {
    2.   'foo' =>
    3.   array(2) {
    4.     [0] =>
    5.     string(3) "bar"
    6.     [1] =>
    7.     string(3) "bar"
    8.   }
    9. }
    10.  
    Ну и где же там ничего, кроме строки?
     
  12. Ganzal

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

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

    ок?
     
  13. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Попробуй в корень сайта закинуть файлик с названием .htaccess, в котором будет AddDefaultCharset utf-8. Либо если есть этот файл - добавь эту строчку

    Добавлено спустя 4 минуты 26 секунд:
    Не ок. Чувак, перечитай тред. Мне тип пишет, что
    . Я печатаю $_GET - распечатку ты сам видишь. Мне пофигу, что там присылается в апач, отсылается из апача, в мускул что передается, что возвращается из бэкенда во фронтенд и т. д. Я проверял переменную, в которой мог быть массив!

    Добавлено спустя 3 минуты 18 секунд:
    И мне пофигу что там пхп делает с твоей строкой, мне наплевать, честно. Мне нужно было, чтобы в $_GET['page'] была присвоена строка.
     
  14. Ganzal

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

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

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Я не кипячусь, все ок. Не, ну так значением $_GET['page'] может быть массив, объясни мне?

    Ты имеешь ввиду то, что нет проверки на существование ранее?

    Добавлено спустя 16 минут 43 секунды:
    Ну так продолжение будет? Что ответишь на мои вопросы?
     
  16. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Ну так что, молодой человек, ты на вопросы ответишь? Или мне засчитать слив? Может быть в переменной $_GET['page'] массив и почему проверка некорректна?
     
  17. Ganzal

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

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

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    На первый отвечал. Итого - в переменной $_GET['page'] массива быть не может... Ок. Почему проверка не корректная?
     
  19. Ganzal

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

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

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Че ты как девочка, в самом деле. По факту ответить можешь? Почему не корректна проверка?
     
  21. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Код (Text):
    1. if (is_string($str)) {
    2.     if ($str === urldecode($str)) {
    3.         $str = trim($str);
    4.     } else {
    5.         $str = trim(urldecode($str));
    6.     }
    Во-первых, как тебе уже было сказано, в гет приходит всегда строка.
    Во-вторых, декодировать не закодированную строку можно смело, и будет снова незакодированная строка. т.е. второй иф тоже не требуется.
    Код (PHP):
    1. $str = "abcdef";
    2. var_dump ($str); //string(6) "abcdef"
    3. var_dump (urldecode($str)); //string(6) "abcdef" 
    Т.е. весь этот приведённый кусок кода не делает ровным счетом ничего и заменяется на одну строку
    Код (PHP):
    1. $str = trim(urldecode($_GET['page'])); 
     
  22. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    На счет, декодирования не спорю. Лишнее, но это уже личные предпочтения к написанию. Вы можете писать, конечно по другому, на счет этого спорить не буду.
     
  23. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а ты пользуешься конструкциями вида for(...; $i = mysql_num_rows($res); ...)? )))
     
  24. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Игорь, я дергаю страницу с такими данными... "&page[]=blablabla&page[]=blablabla". Печатаю массив $_GET. У меня элемент 'page' - это массив. Что я делаю не так?

    Добавлено спустя 27 секунд:
    Ты на вопрос, ответь! Шутник)
     
  25. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Что ты вообще такое говоришь? =)))))))))))

    ты выполняешь urldecode() В ОБОИХ СЛУЧАЯХ, а в элсе - так и ДВА РАЗА. Какие личные предпочтения, о чем ты.

    Просто будь внимательнее. Код же перед глазами.