P.S. Совсем забыл: <a href="http://www.phpclub.ru/detail/article/regexp_1> Статья о регулярных выражениях</a> после изучения которой вы себя почувствуете "волшебником" который тоже знаком с "китайской грамотой" механизма регулярных выражений! Всегда к вашим услугам!
Помогите пожалуйста чайнику вот код из книги PHP 5 самоучитель Колисниченко учит получать информацию из форм ФОРМА HTML: <html> <form action="form01.php" method="POST"> Tetx field <input type="text" name="txt"><br /> Password field <input type="password" name="pwd"><br /> Hidden field<input type="hidden" name="hid" value="hid"><br /> <hr> <input type="checkbox" name="ch1" value="Opt1"> <input type="checkbox" name="ch2" value="Opt2"> <input type="checkbox" name="ch3" value="Opt3"> <input type="checkbox" name="ch4" value="Opt4"> <input type="checkbox" name="ch5" value="Opt5"> <hr> <input type="radio" name="sex" value="male" checked>Male <input type="radio" name="sex" value="Female">Female <hr> <textarea name="texta" rows=15 cols=45 wrap="virtual"> Enter text here </textarea> <hr> Scroll 1 <select size="1" name="month1"> <option value="Январь">Январь</option> <option value="Февраль">Февраль</option> <option value="Март">Март</option> <option value="Апрель">Апрель</option> <option value="Май">Май</option> <option value="Июнь">Июнь</option> <option value="Июль">Июль</option> <option value="Август">Август</option> <option value="Сентябрь">Сентябрь</option> <option value="Октябрь">Октябрь</option> <option value="Ноябрь">Ноябрь</option> <option value="Декабрь">Декабрь</option> </select> <hr> Scroll 2 <select size="1" name="month1" multiple> <option value="Январь">Январь</option> <option value="Февраль">Февраль</option> <option value="Март">Март</option> <option value="Апрель">Апрель</option> <option value="Май">Май</option> <option value="Июнь">Июнь</option> <option value="Июль">Июль</option> <option value="Август">Август</option> <option value="Сентябрь">Сентябрь</option> <option value="Октябрь">Октябрь</option> <option value="Ноябрь">Ноябрь</option> <option value="Декабрь">Декабрь</option> </select> <br /> <input type="submit" value="Send"> <input type="reset" value="clear"> </form> <html> Вот получатель, я уже подредактировал чуток. PHP: <?php echo $_POST['txt']."<br>"; echo $_POST['pwd']."<br>"; echo $_POST['hid']."<br>"; if(isset($ch1)) echo"$ch1 : $ch1"; if(isset($ch2)) echo"$ch2 : $ch2"; if(isset($ch3)) echo"$ch3 : $ch3"; if(isset($ch4)) echo"$ch4 : $ch4"; if(isset($ch5)) echo"$ch5 : $ch5"; echo $_POST['sex']."<br>"; echo $_POST['texta']."<br>"; echo $_POST['month1']."<br>"; foreach ($month2[] as $key => $name) { echo $key = $name ."<br>"; } ?> 1.Почему нельзя сразу писать echo $variable как сказано в книге? 2.if(isset($ch1)) echo"$ch1 : $ch1"; и остальные вообще неотображаются. 3.Немогу получить имя месяца пишет value1 - разобрался 4.Проход через foreach вообще неработает. Помогите пожалуйста, больше спросить негде.
Потому что это не правильно. =) www.phpfaq.ru/globals 2. То же самое. $ch1 — НЕ надо обращатся так к значениям. $_POST['ch1'], и т.п. 3,4. У тебя обе формы называются month1
Поскольку писать каждый раз $_GET | $_POST долго я решил написать так $c = getenv($_POST); foreach ($c as $key => $var) Браузер echo $txt; Неработает, пишет Браузер Почему так, $c содержит все что лежит в глобальном массиве $_POST?
Горбунов Олег *показал язык* cpuuuh, в случаях вроде PHP: <? echo $_POST['txt']."<br>"; ?> пользуйся одинарными кавычками PHP: <? echo $_POST['txt'].'<br>'; ?> в двойных кавычках php ищет переменные и заменяет на значение, в одинарных выводит всё, что в них заключено без изменений попробуй PHP: <?php $test='жидкость'; echo "вода - $test<br>"; echo 'вода - $test'; ?> поэтому даже со включенным register_globals PHP: <? echo"$ch1 : $ch1"; ?> вывело бы , а не все результаты, которые надо вывести лучше накапливать в переменныую и вывести за 1 раз: PHP: <?php $str = ''; $str .=$_POST['txt'].'<br>'; $str .=$_POST['pwd'].'<br>'; $str .=$_POST['hid'].'<br>'; if(isset($_POST['ch1'])) $str .='$ch1 : '.$_POST['ch1']; if(isset($_POST['ch2'])) $str .='$ch2 : '.$_POST['ch2']; if(isset($_POST['ch3'])) $str .='$ch3 : '.$_POST['ch3']; if(isset($_POST['ch4'])) $str .='$ch4 : '.$_POST['ch4']; if(isset($_POST['ch5'])) $str .='$ch5 : '.$_POST['ch5']; $str .=$_POST['sex'].'<br>'; $str .=$_POST['texta'].'<br>'; $str .=$_POST['month1'].'<br>'; foreach ($_POST['month2'] as $key => $name) $str .=$key.' = '.$name .'<br>'; print $str; ?> в форме HTML: Scroll 2 <select size="1" name="month1" multiple> <option value="Январь">Январь</option> <!-- остальные месяцы --> <option value="Декабрь">Декабрь</option> </select> month1 замени на month2[] - будет храниться несколько выбранных значений в size="1" единицу на большее число, будет видно большее количество месяцев и будет удобнее выбирать и на будущее, перед выводом пользовательских данных стоит обработать их htmlspecialchars чтобы предотвратить появление чего-нибудь вроде [js] <script language="JavaScript" type="text/javascript"> alert('Бяка'); </script>[/js] Горбунов Олег, хватит для начала?
странно, а народ не возмущается getnv возвращает переменную окружения $_SERVER или $_ENV, а не значения из $_POST, $_GET если очень хочется, то пользуйся extract
Горбунов Олег Исправил <select name="month2[]" multiple> <option value='Январь'>Январь</option> <option value='Февраль'>Февраль</option> if(isset($ch1)) echo"$ch1 : $ch1"; заменил if(isset($_POST['ch2'])) echo $_POST['ch2']
Непонял как это работает Мой вопрос был как превратить ключи массива $_GET | $_POST в переменные или с выключенной register_globals проход невозможен? Объясните foreach не может осуществить проход по глобальнм массивам?
прочитай в мануале, ссыку я тебе уже дал PHP: <?php foreach ($_POST as $key => $name) echo $key.' = '.$name .'<br>'; ?>
Самоучитель PHP 5 Колиснеченко. Книга хорогая? Мой предыдущий пост просто переделка по книжному шаблону. Оригинал
напиши класс который будет тебе возвращать то, что нужно + сделаешь проверку на поступающие данные. $page_id = $REQ->GetInt('page_id'); гарантированно вернет (int) а не что нить типа "' or 1=1 '" там же можно порулить кавычками, при желании...
Самоучитель предположительно пишет не просто хороший програмист, но и хороший преподователь, который знает как подать материал человеку занимающемуся самостоятельно. Увы это не всегла так. Не мой уровень.
Код (Text): class parsePost { var $data = array(); function parseP($input) { $curArray = array(); foreach($input as $field => $value) { $key = $this->cut_data($field); if (is_array($value)) { $curArray[$key] = $this->parseP($value); } else { $curArray[$key] = $this->cut_data($value); } } return $curArray; } function parsePost() { $this->data = $this->parseP($_GET); } function cut_data($data) { $data=htmlspecialchars($data); $data=addslashes($data); return $data; } function getVar($key0,$key1='',$key2='',$key3='') { $out=$this->data[$key0]; if ($key1!=='') $out=$this->data[$key0][$key1]; // convert to what you need return $out; } } print_r($_GET); if (!isset($REQ)) $REQ = new parsePost; $bb = $REQ->getVar('b','1'); echo $bb; //http://localhost/2.php?page_id=2&b[0]=3&b[1]=4
armadillo, а чем твой класс лучше функции PHP: <?php function Parse_GET($name,$key=NULL) { if($key!=NULL) if(isset($_GET[$name][$key])) $out = $_GET[$name][$key]; else return -1; else if(isset($_GET[$name])) $out = $_GET[$name]; else return -1; if(is_array($out)) return $out; else return htmlspecialchars(addslashes($out)); } ?> из минусов: ошибки нигде не обрабатываются, если я хочу передать пароль и сравнить с хэшем в базе, то значения при использовании htmlspecialchars и addslashes не совпадут. Для GET и POST создавать разные объекты? А если я ещё хочу брать значения из $_SERVER, $_SESSION и $_COOKIE? Как получить значение из вложенного массива? из плюсов: произошло знакомство с классами в php
это заготовка для класса, которую я написал в форме форума. Ее цель в наглядности, а не мощности. проблема добавить обработку ошибок? смысл в том, что в нормальном классе массив data доступен только через методы getInt, getStr, etc. Добавляй массив $masks для обработки конкретных переменных. в чем проблема? да вроде именно это я как раз сделал.
а для такого PHP: <? $R=array('z1'=>array('t1'=>array('m1'=>array('z2'=>array('t2'=>array('m2'=>array('z3'=> array('t3'=>array('m4'=>array('z4'=>array('t4'=>array('m5'=>'1')))))))))))); ?> править класс?