Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Не верно считывает данные из формы


Автор: Enya 9.5.2006, 12:59
Код

<? 
if ($_SERVER['REQUEST_METHOD']=='POST') { 
  //обрабатываем полученные переменные. 
  foreach($_POST as $key => $value) { 
    //сначала делаем обработку, которая не испортит данные, 
    //если их придется выводить в форму снова, при ошибке 
    $value=trim($value); // убираем пробелы в начале и в конце переменной. 
    if (get_magic_quotes_gpc()) $value = stripslashes($value); //убираем слеши, если надо 
    $value=htmlspecialchars($value,ENT_QUOTES); //заменяем служебные символы HTML на эквиваленты 
    $_POST[$key]=$value; //все изменения записываем в массив $_POST 
    //дальше делаем изменения, которые пойдут только в файл, 
    //а в форму их выводить не нужно. 
    $value=str_replace("\r","",$value); // заменяем все переводы строк 
    $value=str_replace("\n","<br>",$value); //на <br> 
    $msg[$key]=$value; //и присваиваем новые значения элементам массива $msg. 
  } 
  //дальше делаем разнообразные проверки. Они здесь для 
  //примера, вы можете добавлять, какие захотите 
  //главное то, что при любых ошибках переменная $err становится не пустой. 
  //то есть, она одновременно является и флагом ошибки и 
  //содержит все сообщения об ошибках. 
  $err=''; 
  if (!$name) $err.="Вы забыли написать свое имя<br>"; 
  if (!$notes) $err.="Вы забыли написать сам отзыв!<br>"; 
  if (!$Qudrat) $err.="Не указанно кол-во квадратов!<br>";
  //if (strlen($Qudrat) > 20) $err.="количество квадратов не может быть больше 25%<br>"; 
  if (strlen($name) > 30) $err.="Длина имени не может превышать 30 символов<br>"; 
  if (strlen($notes) > 1000) $err.="Длина отзыва не может превышать 1000 символов<br>"; 
  if (strlen($email) > 50) $err.="емейл длинноват...<br>"; 
  if (preg_match("/[0-9a-zA-Zа-яА-ЯЁё]{30,}/",$notes,$matches)) { 
    $err.="В отзыве присутствует слишком длинное слово ".$matches[0].". Cократите или разбейте его, пожалуйста."; 
  } 
  $email_ok=eregi("^([_\.0-9a-z-]+@)([0-9a-z][0-9a-z-]+\.)+([a-z]{2,4})$", $email); 
  if (!$email_ok && $email) $err.="Ошибка в емейле. Если не хотите, то просто не пишите!<br>"; 
  //если ошибок нет, то пишем в файл 
  if (!$err) { 
    $s=$msg['name']."|".$msg['email']."|".$msg['notes']."|".$Qudrat['Qudrat']."\n";
    $fp=fopen("gbook.txt","a"); 
    fwrite($fp,$s); 
    fclose($fp); 
    //после записи перенаправляем браузер на страницу, 
    //которая отображает сообщения 
    Header("Location: ".$_SERVER['PHP_SELF']); 
    //и обязательно завершаем работу скрипта 
    exit; 
  } 
  //если у нас были ошибки при заполнении формы, то в файл 
  //ничего не запишется, скрипт не завершится, а выведется 
  //форма, с заполненными полями и сообщения об ошибках 
} else { 
  //если это не пост, то присваиваем переменным, выводимым 
  //в форме пустую строку 
  $_POST['name'] = $_POST['email'] = $_POST['notes'] = $_POST['Qudrat'] =''; 
} 
?> 
<html> 
<head></head> 
<body> 
<table border=1 align=center>
    <tr>
        <td>
        <? if ($err) echo '<font color=red><b>'.$err.'</b></font>'; ?> 
            <form action="<? echo $_SERVER['PHP_SELF'] ?>" method="POST"><br> 
                Name: <input type="text" name="name" value="<? echo $_POST['name'] ?>"><br> 
                Email: <input type="text" name="email" value="<? echo $_POST['email'] ?>"><br> 
                Notes: <textarea rows="3" cols="30" name="notes"><? echo $_POST['notes'] ?></textarea><br>
                Qudrat: <input type="text" name="Qudrat" maxlength="6" value="<? echo $_POST['Qudrat'] ?>"><br>
                <input type="submit" name="submit"> 
            </form> 
        </td>
    </tr>
</table>
</body>
</html>  

Вот воожу в поле 
Цитата

Qudrat: <input type="text" name="Qudrat" maxlength="6" value="<? echo $_POST['Qudrat'] ?>"><br>
10
а сохраняет только 1
Вот как выглядит в файле
Цитата
Igor|[email protected]|ewqe|1
admin01|[email protected]|fgdfhg hff fhg fgh|2
Ïðèíöåñà Òóðàíäîò|[email protected]|dasfdasfasdf daf dasf ffd|2
А нужно, чтобы сколько введи в поле, столько и записал. 

Автор: Darhazer 9.5.2006, 13:09
А почему пользует $Qudrat['Qudrat'] а не $msg['Qudrat'] ? 

Автор: Enya 9.5.2006, 13:12

Darhazer, спасибо.

Не, ребята, нельзя так долго работать....... smile  smile  smile  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)