Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Логическая ошибка обработки формы?
 
 автор: Nextia   (08.09.2010 в 10:26)   письмо автору
2.3 Кб
 
 

Имеется форма где надо цифрами набрать либо логин либо пароль.
к ней вот такой обработчик, который почему-то выдает пустую страницу- просто заголовки
синтаксических ошибок нет, скорее всего ошибка в логике построения обработчика.
помогите ошибку отыскать.

  Ответить  
 
 автор: Slo_Nik   (08.09.2010 в 10:47)   письмо автору
 
   для: Nextia   (08.09.2010 в 10:26)
 

первой строчкой пишите error_reporting(E_ALL); и смотрите, что Вам отвечает php
и в самом конце обработчика вывидите ошибки $errors;

  Ответить  
 
 автор: Trianon   (08.09.2010 в 10:48)   письмо автору
 
   для: Nextia   (08.09.2010 в 10:26)
 

какие заголовки выдаются в ответ?
Включена ли диагностика ВСЕХ ошибок (E_ALL) ?

ereg вообще-то применять настоятельно не рекомендуется. Её выносят из php.
Может в Вашей версии уже вынесли?

  Ответить  
 
 автор: .....   (08.09.2010 в 11:56)
 
   для: Nextia   (08.09.2010 в 10:26)
 

:) И вообще если не обращать внимание на print $errors; которая равна ''
то там по смыслу

if (isset($_REQUEST['alogin'])
&& preg_match("#^\d{11}$#", $_REQUEST['alogin']))
echo ........
else if (isset ($_REQUEST['anum'])
&& preg_match("#^\d{10}$#", $_REQUEST['anum']))
echo ....почти то-же самое ........
else вообще ничего

  Ответить  
 
 автор: Nextia   (09.09.2010 в 02:27)   письмо автору
 
   для: .....   (08.09.2010 в 11:56)
 

спасибо буду копать.
Заработало :-)

  Ответить  
 
 автор: .....   (09.09.2010 в 13:23)
 
   для: Nextia   (09.09.2010 в 02:27)
 

Всё-таки c такой неоднозначностью запросом обработка будет слишком запутанной, типа
<?php
$errors 
'';
$action 0;

if (isset(
$_REQUEST['ok'])) {
    
$alogin = (isset($_REQUEST['alogin'])) ? trim($_REQUEST['alogin']):    '';
    
$anum = (isset($_REQUEST['anum'])) ? trim($_REQUEST['anum']):    '';

    
# приоритет например у первого
    
if     ($alogin != '')    $action 1;
    elseif (
$anum != '')    $action 2;
//    $action = (($anum != '') << 1)| ($alogin != ''); // 3

    
switch($action) {
     case 
0:
        
$errors .= '<li>не введены цифры в поля num или login</li>'"\n";
     break;
     case 
1:
        if ( 
preg_match('#^\d{11}$#'$alogin)) break;
        
$errors .= '<li>login введён но не соответствует формату 11 цифр</li>'"\n";
        if (
$anum == '') break;
        
$action <<= 1;
     case 
2:
        if (! 
preg_match('#^\d{10}$#'$anum))
            
$errors .= '<li>num введён но не соответствует формату 10 цифр</li>'"\n";
        else { 
$errors ''; } //
    
}

//обработка
    
if ($errors == '') {
        echo 
'действия с полученной переменной '. (($action 1) ? 'login''num') ;
     
// exit;
    
} else {
        echo 
"<ol>\n" $errors ."\n</ol>\n";
    }
}
?>
<pre>
<form action="">
 login        <input type="text" name="alogin" />
 num        <input type="text" name="anum" />
            <input type="submit" name="ok" value=">>>"/>
</form>


намного удобнее две кнопки к одному input, тогда просто что-то вроде
<?php
$errors 
'';
$action 0;
$length = array('0''11''10');

if (isset(
$_REQUEST['ok'])) {

 
$action = ($_REQUEST['ok'] == 'login') ? 1: (($_REQUEST['ok'] == 'num') ? 20);
 if (!
$action$errors .= '<li>введите цифры форму и нажмите нужную кнопку</li>'"\n";
 
 
$num = (isset($_REQUEST['number'])) ? trim($_REQUEST['number']):    '';
 if (
$num == '')
    
$errors .= '<li>не введены цифры</li>'"\n";
 elseif (
$action && !preg_match('#^\d{'$length[$action] .'}$#'$num))
        
$errors .= '<li>цифры не соответствует формату '$length[$action] .' цифр</li>'"\n";

//обработка
    
if ($errors == '') {
        echo 
'действия с полученной переменной '. (($action 1) ? 'login''num') ;
     
// exit;
    
} else {
        echo 
"<ol>\n" $errors ."\n</ol>\n";
    }
}

?>
<pre>
<form action="">
 number        <input type="text" name="number" />
            <input type="submit" name="ok" value="login"/>
            <input type="submit" name="ok" value="num"/>
</form>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования