Проблемы с передачей данных методом Post

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Voron3
Сообщения: 15
Зарегистрирован: 22 янв 2007, 14:29

Здравствуйте все,

Помогите решить возникшую проблемку.

Проблема в том, что при передаче данных методом POST данные, передаються но не все. К примеру у меня создано на страничке 100 шт. следующим образом:
В цикле:
print "<select name='prior".$n."'>";
print "<OPTION value='".$y."' $str><font>$y</font>";

затем передаю данные и принимаю их следующим образом:

for ($y=0; $y++<$n ;)
{
echo ($_POST['prior'.$y.'']);
print "
";
}

для проверки. Но что странно, он передает данные только начиная при y=6 и до конца. А начальные 5 переменных prior1-5 равны значениям которые установлены по умолчанию.

Такая же фигня происходит, когда я передаю данные через checkbox. Но там он вообще не передает ни какие данные

Что удивительно этого не наблюдалось, когда я поставил только Apache Apache/2.2.3 (Unix) PHP/4.4.4. Мне кажется, что такой глюк возник после установки mod_perl-2.0.3.

Подскажите что делать, как исправить глюк?
Xaljava
Сообщения: 17
Зарегистрирован: 01 дек 2006, 14:25

для отладки используй print_r($_POST) обрамленный тегами <pre></pre>

Код: Выделить всё

print '<pre>';
print_r($_POST);
print '</pre>';
 
И попробуй закрывать теги <select><option></option></select>, тогда проблем не должно быть
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Покажи форму
Voron3
Сообщения: 15
Зарегистрирован: 22 янв 2007, 14:29

Вот форма

Код: Выделить всё


Цикл открывается

print "<form action='scr_prior.php' method='POST'>";

... Вывод данных из бд

print "<select name='prior".$n."'>";
for ($y=0; $y++<$xx ;)
{
    if ($y==$line[prior]) -/*$line[prior] - запись из бд*/
                $str='selected';
    else
             $str='';
    print "<OPTION  value='".$y."'$str><font>$y</font></OPTION>";
}
print "</select></td>";

Цикл закрывается

$HTML="            
        <input name='u' type='hidden' value='$u'>
        <input name='p' type='hidden' value='$p'>
    <input name='m' type='hidden' value='$m'>
    <input name='id' type='hidden' value='$id'>
        <input type=submit value='Сохранить'>


    </td>
        </TR>
    </TABLE>
    </form>
    </CENTER>
    </body>
    </html>
      ";
print $HTML;
 
Voron3
Сообщения: 15
Зарегистрирован: 22 янв 2007, 14:29

Xaljava писал(а):для отладки используй print_r($_POST) обрамленный тегами <pre></pre>

Код: Выделить всё

print '<pre>';
print_r($_POST);
print '</pre>';
 
И попробуй закрывать теги <select><option></option></select>, тогда проблем не должно быть
Спасибо, класный совет, по поводу отладки
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Ну первое что в глаза бросается цикл for, имеет следующую конструкцию
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
Далее от куда у тебя береться величина $xx
Voron3
Сообщения: 15
Зарегистрирован: 22 янв 2007, 14:29

Переменная $xx - это количество записей в бд
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

for ($y=0; $y<=$xx; $y++)
Voron3
Сообщения: 15
Зарегистрирован: 22 янв 2007, 14:29

Нет тут не в цикле проблема, отличие в том, что ты указал следующее

for ($y=0; $y<=$xx; $y++) - с начала идет проверка, а потом идет наращивание на единицу, т.е. первый шаг y=0, второй шаг y=1, третий y=3 и т.д.

В моем случае чуть чуть наоборот for ($y=0; $y++<$xx ;) - с начала идет наращивание y, а потом сравнение, т.е. первый шаг y=1, второй y=2, третий y=3 и т.д.

Но в любом случае спасибо, я об этом не знал до этого.

Тут решил проверить как же работает передача данных в отдельной страничке, т.е. не обрабатываю мои данные из бд, что-то типа теста. Код следующий

Файл 1.php

Код: Выделить всё

<?  
print "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>
    <html>
    <Title>My Admin for telephon&email</title>
    <META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=windows-1251'>
    <LINK HREF='styles.css' REL='stylesheet' TYPE='text/css'>
    <body bgcolor='#C4C1BD' TOPMARGIN='0' LEFTMARGIN='0' BOTTOMMARGIN='0'>
    <CENTER>
                <TABLE ALIGN='TOP' WIDTH='100%' HEIGHT='100%' valign='center' CELLPADDING='0' CELLSPACING='0' BORDER='0'>
                <TR height='50'>
                <TD colspan='2' valign='center' align='center'>
                                   <p><U>Настройка приоритета среди департаментов и филиалов</U></p>
                </TD>
        </TR>
    <TR height='50'>
                 <TD colspan='2' valign='center' align='center'>
                </TD>
    </TR>
    <TR>
                        <TD width='10'>&nbsp;</TD>
                 <TD valign='top' align='center'>
            <form action='2.php' method='POST'>
";
    for ($j=1; $j<=35; $j++)
    {
            print "
        <select name='prior".$j."'>";
                    for ($y=1; $y<=35; $y++)
                    {
                     print "<OPTION  value='".$y."' $str><font>$y</font></OPTION>";
        }
           print "</select>";
    }

print "<input type=submit value='Сохранить'>


         </td>
         </TR>
         </TABLE>
         </form>
         </CENTER>
         </body>
         </html>
        ";
?>

Файл 2.php

Код: Выделить всё

<?  
print "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>
         <html>
         <Title>My Admin for telephon&email</title>
         <META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=windows-1251'>
         <LINK HREF='styles.css' REL='stylesheet' TYPE='text/css'>
         <body bgcolor='#C4C1BD' TOPMARGIN='0' LEFTMARGIN='0' BOTTOMMARGIN='0'>
         <CENTER>
         <TABLE ALIGN='TOP' WIDTH='100%' HEIGHT='100%' valign='center' CELLPADDING='0' CELLSPACING='0' BORDER='0'>
    <TR height='50'>
        <TD valign='center' align='center'>
                                    <p><U>Редактировать $str</U></p>
        </TD>
    </TR>
    <TR>
                                <TD valign='center' align='center'>
";
    print '<pre>';
    print_r($_POST);
    print '</pre>';
    print "
";
    $HTML="        </td>
                </TR>
            </TABLE>

            </CENTER>
            </body>
            </html>
            ";
    print $HTML;

 

Что характерно, все данные передаются замечательно, значить я допустил ошибку в самом коде, но какую сам понять не могу.
Voron3
Сообщения: 15
Зарегистрирован: 22 янв 2007, 14:29

Нет тут не в цикле проблема, отличие в том, что ты указал следующее

for ($y=0; $y<=$xx; $y++) - с начала идет проверка, а потом идет наращивание на единицу, т.е. первый шаг y=0, второй шаг y=1, третий y=3 и т.д.

В моем случае чуть чуть наоборот for ($y=0; $y++<$xx ;) - с начала идет наращивание y, а потом сравнение, т.е. первый шаг y=1, второй y=2, третий y=3 и т.д.

Но в любом случае спасибо, я об этом не знал до этого.

Тут решил проверить как же работает передача данных в отдельной страничке, т.е. не обрабатываю мои данные из бд, что-то типа теста. Код следующий

Файл 1.php

Код: Выделить всё

<?  
print "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>
    <html>
    <Title>My Admin for telephon&email</title>
    <META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=windows-1251'>
    <LINK HREF='styles.css' REL='stylesheet' TYPE='text/css'>
    <body bgcolor='#C4C1BD' TOPMARGIN='0' LEFTMARGIN='0' BOTTOMMARGIN='0'>
    <CENTER>
                <TABLE ALIGN='TOP' WIDTH='100%' HEIGHT='100%' valign='center' CELLPADDING='0' CELLSPACING='0' BORDER='0'>
                <TR height='50'>
                <TD colspan='2' valign='center' align='center'>
                                   <p><U>Настройка приоритета среди департаментов и филиалов</U></p>
                </TD>
        </TR>
    <TR height='50'>
                 <TD colspan='2' valign='center' align='center'>
                </TD>
    </TR>
    <TR>
                        <TD width='10'>&nbsp;</TD>
                 <TD valign='top' align='center'>
            <form action='2.php' method='POST'>
";
    for ($j=1; $j<=35; $j++)
    {
            print "
        <select name='prior".$j."'>";
                    for ($y=1; $y<=35; $y++)
                    {
                     print "<OPTION  value='".$y."' $str><font>$y</font></OPTION>";
        }
           print "</select>";
    }

print "<input type=submit value='Сохранить'>


         </td>
         </TR>
         </TABLE>
         </form>
         </CENTER>
         </body>
         </html>
        ";
?>

Файл 2.php

Код: Выделить всё

<?  
print "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>
         <html>
         <Title>My Admin for telephon&email</title>
         <META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=windows-1251'>
         <LINK HREF='styles.css' REL='stylesheet' TYPE='text/css'>
         <body bgcolor='#C4C1BD' TOPMARGIN='0' LEFTMARGIN='0' BOTTOMMARGIN='0'>
         <CENTER>
         <TABLE ALIGN='TOP' WIDTH='100%' HEIGHT='100%' valign='center' CELLPADDING='0' CELLSPACING='0' BORDER='0'>
    <TR height='50'>
        <TD valign='center' align='center'>
                                    <p><U>Редактировать $str</U></p>
        </TD>
    </TR>
    <TR>
                                <TD valign='center' align='center'>
";
    print '<pre>';
    print_r($_POST);
    print '</pre>';
    print "
";
    $HTML="        </td>
                </TR>
            </TABLE>

            </CENTER>
            </body>
            </html>
            ";
    print $HTML;

 

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