[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как правильно составить форму
fanat-vlg
Всем привет, что-то смотрел форум и не один и что-то именно такого решения никак не могу найти.
Направьте на путь истинный плз.
Пишу форму, ее заполняю, передаю на вторую страницу для проверки пользователем, чтобы сам еще раз проверил че написал и после этого добавляю в таблицу. В принципе все работает но получается или без проверки т.е. выводит на дисплей то что набрал и сразу добавляет в таблицу или создает только пустые строки т.к. не передает переменные. как правильно сделать?? в один файл или в 3 файла??? как правильнее?? вроде много файлов как то захломленно для одной формы.

первая страница:

HTML
<form action="processor.php" method="post">
<br><br><br>
<table border=1 align="center" bordercolor="#0033FF" bordercolordark="#0099FF">
<tr>
<td>Номер телефона</td>
<td align=center><input type="text" name="nom_tel" size=30 maxlength=40></td>
</tr>


вторая страница, вот тут не знаю как правильно передать переменную с этой страницы:

PHP
<form action="connect.phpmethod="post">
&
#60;!--таблица с проверочными данными-->
<table width="400" height="100" border="1" align="center">
  <
tr>
    <
td width="150">Номер телефона</td>
    <
td>
    <?
php
    
echo $_POST[nom_tel];
    
?>
   &n


третья страница:

PHP
<?php
//Получаем переменные, отправленные с формы
 
$nom_tel=$_POST['nom_tel_'];
?>

<?php
$link 
mysql_pconnect (localhostrootroot);
if ( !
$link ) die ("Невозможно подключение к MySQL");

$db "tel_data";
mysql_select_db $db ) or die ("Невозможно открыть $db");

$query "INSERT INTO osn_data
          VALUES ('', '"
.$nom_tel_."')";
mysql_query $query );
mysql_close $link );




Спустя 31 минута, 51 секунда (31.01.2009 - 23:35) kirik написал(а):
Цитата (fanat-vlg @ 31.01.2009 - 15:04)
вот тут не знаю как правильно передать переменную с этой страницы

Нужно создать скрытое поле, в которое заносить инфу. Типа такого -
PHP
<td width="150">Номер телефона</td>
    <td>
          <input type="hidden" name="nom_tel" value="<?=$_POST['nom_tel']?>">
          <?=$_POST['nom_tel']?>

И если данные верны, то юзер отправит их на 3-й скрипт (тем же методом post).

Спустя 19 часов, 32 минуты, 22 секунды (1.02.2009 - 19:08) fanat-vlg написал(а):
Все равно добавляет пустые строки. вот если я делаю в 2 скрипта на 2 страницах вот так:

страница 1

PHP
<form action="connect.phpmethod="post">
<
br><br><br>
  <
table border=1 align="center" bordercolor="#0033FF" bordercolordark="#0099FF">
    <
tr>
      <
td>Номер телефона</td>
        <
td align=center><input type="text" name="nom_tel" size=30 maxlength=40></td>
</
tr>


страница 2
PHP
<?$nom_tel=$_POST['nom_tel'];

$link mysql_pconnect (localhostrootroot);
if ( !
$link ) die ("Невозможно подключение к MySQL");

$db "tel_data";
mysql_select_db $db ) or die ("Невозможно открыть $db");

$query "INSERT INTO osn_data
          VALUES ('', '"
.$nom_tel."')";
mysql_query $query );
mysql_close $link );


Так добавляет на ура, а вот передать со второй на третью страницу никак. проверял скрытое поле работа или нет (заменой хайдден на текст), все работает.

Ну может будут какие нить предложения другого решения этой задачи, тоже очень даже рассмотрю smile.gif


Спустя 2 часа, 57 минут, 11 секунд (1.02.2009 - 22:05) kirik написал(а):
1. Похоже что у вас включена деректива register globals (верятно вы используете PHP4). Если вы попробуете запустить этот скрипт на более-менее вменяемом хостинге, то он вообще никаких данных не будет принимать. Нужно вместо $nom_tel писать $_POST['nom_tel'].

2. Запрос INSERT INTO osn_data VALUES ('', '".$_POST['nom_tel']."')"; - дырка в скрипте (sql инъекция). Попробуй вписать в поле "Номер телефона" одинарную кавычку "'". Посмотри что получится smile.gif

3. Вот рабочий скрипт в один файл. Просто как пример.
PHP
<?php
header
('Content-Type: text/html; charset=utf-8');

// Преобразуем все опасные символы в их метасимволы посредством ф-ии htmlspecialchars() [ заменяются & " ' < > ]
// потом можем безбоязненно использовать эти переменные и при в занесении в БД и при простом выводе не странице
if(isset($_POST['tel'])) htmlspecialchars($_POST['tel'], ENT_QUOTES);
if(isset(
$_POST['city'])) htmlspecialchars($_POST['city'], ENT_QUOTES);

if(isset(
$_POST['edit']) || empty($_POST)) // Заполнение / редактирование формы
{
    echo '
    <form target="_self" method="post">
        Телефон: <input type="text" name="tel" value="'
.$_POST['tel'].'" /><br />
        Город: <input type="text" name="city" value="'
.$_POST['city'].'" /><br /><br />
        <input type="submit" name="check" value="Проверить >" />
    </form>'
;
}
elseif(isset(
$_POST['check'])) // Проверка данных
{
    echo '
    <h3>Проверьте правильность введенных данных:</h3>
    
    <form target="_self" method="post">
        <input type="hidden" name="tel" value="'
.$_POST['tel'].'" />
        Телефон: <b>'
.(empty($_POST['tel']) ? 'Не введен!' : $_POST['tel']).'</b><br />
    
        <input type="hidden" name="city" value="'
.$_POST['city'].'" />
        Город: <b>'
.(empty($_POST['city']) ? 'Не введен!' : $_POST['city']).'</b><br /><br />
    
        <input type="submit" name="edit" value="Редактировать" /> <input type="submit" name="send" value="Отправить" />
    </form>'
;
}
elseif(isset(
$_POST['send'])) // Запись данных
{
    echo 'Ваши данные успешно сохранены! [Телефон - '.$_POST['tel'].'; Город - '.$_POST['city'].']';
    // И запрос типа "INSERT INTO `osn_data` VALUES ('', '{$_POST['tel']}')";
}


Зы. Щас придет г-н twin и опять наругает меня за использование htmlspecialchars smile.gif Раскрытие темы fanat-vlg, тебе будет интересно наверное =)

Спустя 7 дней, 1 час, 21 минута, 50 секунд (8.02.2009 - 23:27) fanat-vlg написал(а):
kirik

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

еще раз спасибо!!!

Спустя 17 минут, 38 секунд (8.02.2009 - 23:44) LoneCat написал(а):
Цитата (kirik @ 1.02.2009 - 23:05)
Щас придет г-н twin и опять наругает меня за использование htmlspecialchars

Так ведь и правильно сделает smile.gif Ну не для бд htmlspecialchars создан, ну вот как вокруг него не пляши smile.gif для бд есть специфичные для каждого типа бд функции, mysql_real_escape_string, pg_escape_string и т.п., только они обеспечат должный уровень безопасности, тем более что есть-то они не просят, возвращать данные база уже будет не в экранированном виде.


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.