За последние 24 часа нас посетили 17568 программистов и 1722 робота. Сейчас ищут 1673 программиста ...

Помогите начинающему

Тема в разделе "PHP для новичков", создана пользователем SkifSilver, 5 апр 2007.

  1. Adamant

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

    С нами с:
    8 апр 2007
    Сообщения:
    234
    Симпатии:
    0
    Адрес:
    Казахстан г.Тараз
    P.S. Совсем забыл:
    <a href="http://www.phpclub.ru/detail/article/regexp_1> Статья о регулярных выражениях</a> после изучения которой вы себя почувствуете "волшебником" который тоже знаком с "китайской грамотой" механизма регулярных выражений!
    Всегда к вашим услугам!
     
  2. cpuuuh

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

    С нами с:
    4 апр 2007
    Сообщения:
    88
    Симпатии:
    0
    Помогите пожалуйста чайнику

    вот код из книги PHP 5 самоучитель Колисниченко
    учит получать информацию из форм

    ФОРМА
    HTML:
    1. <form action="form01.php" method="POST">
    2. Tetx field <input type="text" name="txt"><br />
    3. Password field <input type="password" name="pwd"><br />
    4. Hidden field<input type="hidden" name="hid" value="hid"><br />
    5. <hr>
    6. <input type="checkbox" name="ch1" value="Opt1">
    7. <input type="checkbox" name="ch2" value="Opt2">
    8. <input type="checkbox" name="ch3" value="Opt3">
    9. <input type="checkbox" name="ch4" value="Opt4">
    10. <input type="checkbox" name="ch5" value="Opt5">
    11. <hr>
    12. <input type="radio" name="sex" value="male" checked>Male
    13. <input type="radio" name="sex" value="Female">Female
    14. <hr>
    15. <textarea name="texta" rows=15 cols=45 wrap="virtual">
    16. Enter text here
    17.    <hr>
    18.    Scroll 1
    19. <select size="1" name="month1">
    20.   <option value="Январь">Январь</option>
    21.   <option value="Февраль">Февраль</option>
    22.   <option value="Март">Март</option>
    23.   <option value="Апрель">Апрель</option>
    24.   <option value="Май">Май</option>
    25.   <option value="Июнь">Июнь</option>
    26.   <option value="Июль">Июль</option>
    27.   <option value="Август">Август</option>
    28.   <option value="Сентябрь">Сентябрь</option>
    29.   <option value="Октябрь">Октябрь</option>
    30.   <option value="Ноябрь">Ноябрь</option>
    31.   <option value="Декабрь">Декабрь</option>
    32.  
    33.  
    34. <hr>
    35.    Scroll 2
    36. <select size="1" name="month1" multiple>
    37.   <option value="Январь">Январь</option>
    38.   <option value="Февраль">Февраль</option>
    39.   <option value="Март">Март</option>
    40.   <option value="Апрель">Апрель</option>
    41.   <option value="Май">Май</option>
    42.   <option value="Июнь">Июнь</option>
    43.   <option value="Июль">Июль</option>
    44.   <option value="Август">Август</option>
    45.   <option value="Сентябрь">Сентябрь</option>
    46.   <option value="Октябрь">Октябрь</option>
    47.   <option value="Ноябрь">Ноябрь</option>
    48.   <option value="Декабрь">Декабрь</option>
    49.                              <br />
    50. <input type="submit" value="Send">
    51. <input type="reset" value="clear">
    52. </form>

    Вот получатель, я уже подредактировал чуток.



    PHP:
    1. <?php
    2. echo $_POST['txt']."<br>";
    3. echo $_POST['pwd']."<br>";
    4. echo $_POST['hid']."<br>";
    5.  
    6. if(isset($ch1)) echo"$ch1 : $ch1";
    7. if(isset($ch2)) echo"$ch2 : $ch2";
    8. if(isset($ch3)) echo"$ch3 : $ch3";
    9. if(isset($ch4)) echo"$ch4 : $ch4";
    10. if(isset($ch5)) echo"$ch5 : $ch5";
    11.  
    12. echo $_POST['sex']."<br>";
    13.  
    14. echo $_POST['texta']."<br>";
    15.  
    16. echo $_POST['month1']."<br>";
    17.  
    18.  
    19. foreach ($month2[] as $key => $name)
    20. {
    21.         echo $key = $name ."<br>";
    22. }
    23. ?>


    1.Почему нельзя сразу писать echo $variable как сказано в книге?
    2.if(isset($ch1)) echo"$ch1 : $ch1"; и остальные вообще неотображаются.
    3.Немогу получить имя месяца пишет value1 - разобрался
    4.Проход через foreach вообще неработает.

    Помогите пожалуйста, больше спросить негде.
     
  3. Anonymous

    Anonymous Guest

    Потому что это не правильно. =)
    www.phpfaq.ru/globals
    2. То же самое. $ch1 — НЕ надо обращатся так к значениям.
    $_POST['ch1'], и т.п.
    3,4. У тебя обе формы называются month1
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    upd: опоздал
     
  5. Anonymous

    Anonymous Guest

    Luge, лучше поздно, чем никогда. Добавь лучше что нибудь к сказанному. =)
     
  6. cpuuuh

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

    С нами с:
    4 апр 2007
    Сообщения:
    88
    Симпатии:
    0
    Поскольку писать каждый раз $_GET | $_POST долго я решил написать так

    $c = getenv($_POST);

    foreach ($c as $key => $var)

    Браузер
    echo $txt;

    Неработает, пишет

    Браузер
    Почему так, $c содержит все что лежит в глобальном массиве $_POST?
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Горбунов Олег
    :) *показал язык*

    cpuuuh, в случаях вроде
    PHP:
    1. <? echo $_POST['txt']."<br>"; ?>
    пользуйся одинарными кавычками
    PHP:
    1. <? echo $_POST['txt'].'<br>'; ?>
    в двойных кавычках php ищет переменные и заменяет на значение, в одинарных выводит всё, что в них заключено без изменений
    попробуй
    PHP:
    1. <?php
    2. $test='жидкость';
    3. echo "вода - $test<br>";
    4. echo 'вода - $test';
    5. ?>
    поэтому даже со включенным register_globals
    PHP:
    1. <? echo"$ch1 : $ch1"; ?>
    вывело бы
    , а не
    все результаты, которые надо вывести лучше накапливать в переменныую и вывести за 1 раз:
    PHP:
    1. <?php
    2. $str = '';
    3.  $str .=$_POST['txt'].'<br>';
    4.  $str .=$_POST['pwd'].'<br>';
    5.  $str .=$_POST['hid'].'<br>';
    6.  
    7.  if(isset($_POST['ch1'])) $str .='$ch1 : '.$_POST['ch1'];
    8.  if(isset($_POST['ch2'])) $str .='$ch2 : '.$_POST['ch2'];
    9.  if(isset($_POST['ch3'])) $str .='$ch3 : '.$_POST['ch3'];
    10.  if(isset($_POST['ch4'])) $str .='$ch4 : '.$_POST['ch4'];
    11.  if(isset($_POST['ch5'])) $str .='$ch5 : '.$_POST['ch5'];
    12.  
    13.  $str .=$_POST['sex'].'<br>';
    14.  
    15.  $str .=$_POST['texta'].'<br>';
    16.  
    17.  $str .=$_POST['month1'].'<br>';
    18.  
    19.  foreach ($_POST['month2'] as $key => $name)
    20.    $str .=$key.' = '.$name .'<br>';
    21.  
    22. print $str;
    23.  ?>
    в форме
    HTML:
    1.  Scroll 2
    2.  <select size="1" name="month1" multiple>
    3.    <option value="Январь">Январь</option>
    4. <!-- остальные месяцы -->
    5.    <option value="Декабрь">Декабрь</option>
    6.  </select>
    month1 замени на month2[] - будет храниться несколько выбранных значений
    в size="1" единицу на большее число, будет видно большее количество месяцев и будет удобнее выбирать
    и на будущее, перед выводом пользовательских данных стоит обработать их htmlspecialchars чтобы предотвратить появление чего-нибудь вроде
    [js] <script language="JavaScript" type="text/javascript">
    alert('Бяка');
    </script>[/js]

    Горбунов Олег, хватит для начала? ;)
     
  8. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    странно, а народ не возмущается :)
    getnv возвращает переменную окружения $_SERVER или $_ENV, а не значения из $_POST, $_GET

    если очень хочется, то пользуйся extract
     
  9. cpuuuh

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

    С нами с:
    4 апр 2007
    Сообщения:
    88
    Симпатии:
    0
    Горбунов Олег
    Исправил

    <select name="month2[]" multiple>
    <option value='Январь'>Январь</option>
    <option value='Февраль'>Февраль</option>



    if(isset($ch1)) echo"$ch1 : $ch1";
    заменил

    if(isset($_POST['ch2'])) echo $_POST['ch2']
     
  10. cpuuuh

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

    С нами с:
    4 апр 2007
    Сообщения:
    88
    Симпатии:
    0
    Непонял как это работает

    Мой вопрос был как превратить ключи массива $_GET | $_POST в переменные или с выключенной register_globals проход невозможен?

    Объясните foreach не может осуществить проход по глобальнм массивам?
     
  11. Anonymous

    Anonymous Guest

    www.phpfaq.ru/globals
    ЧИТАТЬ НАДО. Там — это написано. Не смотреть, ЧИТАТЬ.
     
  12. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    прочитай в мануале, ссыку я тебе уже дал
    PHP:
    1. <?php
    2. foreach ($_POST as $key => $name)
    3.    echo $key.' = '.$name .'<br>';
    4. ?>
     
  13. cpuuuh

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

    С нами с:
    4 апр 2007
    Сообщения:
    88
    Симпатии:
    0
    Нашел такой вариант в книге
     
  14. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    мдя...
    ещё в начале хотел написать, что какая-то левая книга
     
  15. cpuuuh

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

    С нами с:
    4 апр 2007
    Сообщения:
    88
    Симпатии:
    0
    Самоучитель PHP 5 Колиснеченко.
    Книга хорогая?

    Мой предыдущий пост просто переделка по книжному шаблону.

    Оригинал
     
  16. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    вримательное чтение МАНУАЛА и выполнение примеров из него. что может быть лучше?
     
  17. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    напиши класс который будет тебе возвращать то, что нужно + сделаешь проверку на поступающие данные.

    $page_id = $REQ->GetInt('page_id');

    гарантированно вернет (int) а не что нить типа "' or 1=1 '"

    там же можно порулить кавычками, при желании...
     
  18. cpuuuh

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

    С нами с:
    4 апр 2007
    Сообщения:
    88
    Симпатии:
    0
    Самоучитель предположительно пишет не просто хороший програмист, но и хороший преподователь, который знает как подать материал человеку занимающемуся самостоятельно. Увы это не всегла так.



    Не мой уровень.
     
  19. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    человек, который хочет срубить побольше денег за короткий период
     
  20. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Код (Text):
    1. class parsePost {
    2. var $data = array();
    3.  
    4. function parseP($input) {
    5. $curArray = array();
    6. foreach($input as $field => $value) {
    7.     $key = $this->cut_data($field);
    8.     if (is_array($value)) {
    9.         $curArray[$key] = $this->parseP($value);
    10.     } else {
    11.         $curArray[$key] = $this->cut_data($value);
    12.     }
    13. }
    14. return $curArray;
    15. }
    16.  
    17.  
    18.  
    19.  
    20.  
    21. function parsePost() {
    22. $this->data = $this->parseP($_GET);
    23. }
    24.  
    25.  
    26. function cut_data($data) {
    27. $data=htmlspecialchars($data);
    28. $data=addslashes($data);
    29. return $data;
    30. }
    31.  
    32. function getVar($key0,$key1='',$key2='',$key3='') {
    33. $out=$this->data[$key0];
    34. if ($key1!=='') $out=$this->data[$key0][$key1];
    35. // convert to what you need
    36. return $out;
    37. }
    38.  
    39. }
    40.  
    41. print_r($_GET);
    42. if (!isset($REQ)) $REQ = new parsePost;
    43. $bb = $REQ->getVar('b','1');
    44. echo $bb;
    45.  
    46. //http://localhost/2.php?page_id=2&b[0]=3&b[1]=4
     
  21. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    мама! они хотят съесть мой моск!
    armadillo
    оно не ездит :) даже если ошибки исправить
     
  22. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Ок, поправил и взял $_GET для отладки
     
  23. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    armadillo, а чем твой класс лучше функции
    PHP:
    1. <?php
    2. function Parse_GET($name,$key=NULL)
    3. {
    4.     if($key!=NULL)
    5.       if(isset($_GET[$name][$key]))
    6.            $out = $_GET[$name][$key];
    7.       else
    8.           return -1;
    9.     else
    10.           if(isset($_GET[$name]))
    11.            $out = $_GET[$name];
    12.       else
    13.           return -1;
    14.  
    15.     if(is_array($out))
    16.         return $out;
    17.     else
    18.         return htmlspecialchars(addslashes($out));
    19. }
    20. ?>
    ;)
    из минусов: ошибки нигде не обрабатываются, если я хочу передать пароль и сравнить с хэшем в базе, то значения при использовании htmlspecialchars и addslashes не совпадут. Для GET и POST создавать разные объекты? А если я ещё хочу брать значения из $_SERVER, $_SESSION и $_COOKIE? Как получить значение из вложенного массива?

    из плюсов: произошло знакомство с классами в php :D
     
  24. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    это заготовка для класса, которую я написал в форме форума. Ее цель в наглядности, а не мощности.
    проблема добавить обработку ошибок?
    смысл в том, что в нормальном классе массив data доступен только через методы getInt, getStr, etc.

    Добавляй массив $masks для обработки конкретных переменных.
    в чем проблема?
    да вроде именно это я как раз сделал.
     
  25. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    а для такого
    PHP:
    1. <? $R=array('z1'=>array('t1'=>array('m1'=>array('z2'=>array('t2'=>array('m2'=>array('z3'=>
    2. array('t3'=>array('m4'=>array('z4'=>array('t4'=>array('m5'=>'1')))))))))))); ?>
    3.  
    править класс? :(