Jump to content
  • 0

Формы+PHP


lapwing
 Share

Question

Здравствуйте! Подскажите пожалуйста в чем ошибка?Код не работает

<?php

if($_POST['submit']=='submit') {

if(!$_POST['p1']||$_POST['p1']==''||!$_POST['p2']||$_POST['p2']==''||!$_POST['p3']||

$_POST['p3']=='') {

$message = 'Вы не заполнили поле';

} else {

$db = mysql_connect ("localhost","buy","buy");

mysql_select_db ("board",$db);

mysql_query("SET NAMES cp1251");

$p1=htmlspecialchars(trim($_POST['p1']));

$p2=htmlspecialchars(trim($_POST['p2']));

$p3=htmlspecialchars(trim($_POST['p3']));

$result=mysql_query("INSRT INTO buy_kv(p1,p2,p3) VALUES('$p1','$p2','$p3')");

if(mysql_affected_rows()==1) {

$message='<p> Данные занесены</p>';

$noform_var=1;

} else {

error_log(mysql_error());

$message='<p> Что-то пошло не так</p>';

}

}

if(!$noform_var) {

$formfile=$_SERVER['PHP_SELF'];

$message.=<<<EOMSG

<p> Все поля обязательны для заполнения </p>

<FORM METHOD="post" ACTION="$formfile">

<INPUT TYPE="text" NAME"p1"><br>

<INPUT TYPE="text" NAME"p2"><br>

<INPUT TYPE="text" NAME"p3"><br>

<INPUT TYPE="hidden" NAME="added" VALUE="<?php echo date("Y-m-d");?>">

<INPUT TYPE="submit" NAME="submit" VALUE"submit">

</FORM>

EOMSG;

}

}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<link href="styles.css" rel="stylesheet" type="text/css">

</head>

<body>

<div class="container">

<?php include("blocks/header.php");?>

<div class="top_pan">

</div>

<div><a href="index.php">Главная</a> </div>

<?php include("blocks/left_pan.php");?>

<div class="connent">

<?php echo $message;?>

</div>

<?php include("blocks/prav_pan.php");?>

<?php include("blocks/copyrigt.php");?>

</div>

</body>

</html>

Link to comment
Share on other sites

21 answers to this question

Recommended Posts

  • 0

я тоже думаю что проблема с инклудами. у меня только на них ругался. и может лучше лучше использовать конструкцию

$date = date("Y-m-d");

$message.=<<<EOF

<p> Все поля обязательны для заполнения </p>

<FORM METHOD="post" ACTION="$formfile">

<INPUT TYPE="text" NAME="p1"><br>

<INPUT TYPE="text" NAME="p2"><br>

<INPUT TYPE="text" NAME"=p3"><br>

<INPUT TYPE="hidden" NAME="added" VALUE="{$date}">

<INPUT TYPE="submit" NAME="submit" VALUE="submit">

</FORM>

EOF;

это убирает "> перед кнопкой. У меня показывалась.

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

Link to comment
Share on other sites

  • 0

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

неожиданный $end пишет после тега </html>/ Может нужна какая-то конструкция типа endif?

<?php 
if(isset($_POST['submit'])) {
if(!$_POST['p1']||$_POST['p1']==''||!$_POST['p2']||$_POST['p2']==''||!$_POST['p3']||
$_POST['p3']=='') {
$message = 'Вы не заполнили поле';
} else{
$db = mysql_connect ("localhost","buy","buy");
mysql_select_db ("board",$db);
mysql_query("SET NAMES cp1251");

$p1=htmlspecialchars(trim($_POST['p1']));
$p2=htmlspecialchars(trim($_POST['p2']));
$p3=htmlspecialchars(trim($_POST['p3']));
$result=mysql_query("INSERT INTO buy_kv(p1,p2,p3) VALUES('$p1','$p2','$p3')");
if(mysql_affected_rows()==1) {
$message='<p> Данные занесены</p>';
$noform_var=1;
} else {
error_log(mysql_error());
$message='<p> Что-то пошло не так</p>';
}
}
if(!$noform_var) {
$formfile=$_SERVER['PHP_SELF'];
$date=date("Y-m-d");
$message.=<<<EOF
<p> Все поля обязательны для заполнения </p>
<FORM METHOD="post" ACTION="$formfile">
<INPUT TYPE="text" NAME="p1"><br>
<INPUT TYPE="text" NAME="p2"><br>
<INPUT TYPE="text" NAME="p3"><br>
<INPUT TYPE="hidden" NAME="added" VALUE="{$date}">
<INPUT TYPE="submit" NAME="submit" VALUE"submit">
</FORM>
EOF;
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="container">
<div class="top_pan"></div>
<div><a href="index.php">Главная</a> </div>
<div class="connent">
<?php echo $message;?>
</div>
</div>
</body>
</html>

Link to comment
Share on other sites

  • 0

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


</FORM>
EOF;
}

Должно быть так:


</FORM>
EOF;
}

Если вы не начинаете закрывающий идентификатор в первом столбце строки, то парсер думает что это строка и нижеследующие - продолжение heredoc-строки. Для избежания подобных вещей советую приобрести какой-либо редактор с подсветкой синтаксиса php - увидев неправильную расцветку вы быстрее обнаружите источник проблемы.

Подробности про синтаксис heredoc можно прочитать здесь:

http://www.php.net/manual/ru/language.type....syntax.heredoc

Link to comment
Share on other sites

  • 0

   if(isset($_POST['submit'])) {
...
if(!$noform_var) {
...
}
}

Вот я немного не понял. тут получается только ссылка на главную отображается. В связи с тем, что POST запрос не выполнен, форма не показывается, т.к. условие показывать форму только если на кнопку нажали. ))

ну и EOF; надо в самом начале строки ниписать.

а так все работает. осталось теперь по очереди вставлять инклуды и смотреть где в них ошибку выдаст.

Edited by demous
Link to comment
Share on other sites

  • 0

Убрал пробелы перед EOF - спасибо за подсказку,сам бы долго рылся, теперь выводится сама страница, а форма почему-то нет. Я так понял, что форма должна выводиться во всех случаях, кроме тех, когда передача завершается успешно, для этого и существует переменная $noform_var? которая принимает значение в случае успешного выполнения команды INSERT , а до этого переменной не существует и по условию if(!$noform_var) форма должна выводиться, а не выводится. Что я упускаю или не понимаю? Вот demous мысль подкинул. Может первый запрос должен выглядеть как-то иначе?

Link to comment
Share on other sites

  • 0

if(isset($_POST['submit'])) { // сначала проверяешь если поступили данные
...
}
if(!$noform_var) { // потом проверяешь нужно ли показывать форму
...
}

2 разных условия получается. ))

и кстати если action у формы не указать, то она на эту же страницу ссылаться будет. так что action можно убрать и переменная $formfile тоже не нужна

и у кнопки value тоже "=" пропустил

Edited by demous
Link to comment
Share on other sites

  • 0

Похоже я запутался в трех соснах. Я рассуждал так: сначала условие if(isset($_POST['submit'])), поскольку кнопка не нажата, переменной $_POST['submit'] не существует, значит идем дальше - -подключаемся к БД, пытаемся выполнить INSERT, вставлять нечего, переменная $noform_var не определена и по условию if(!noform_var) должна выводиться форма. Может надо ввести вообще какую-либо другую переменную ( не submit) , а как пока не соображу.

Link to comment
Share on other sites

  • 0

я же написал решение.

<?php
if(isset($_POST['submit'])) {
if(!$_POST['p1']||$_POST['p1']==''||!$_POST['p2']||$_POST['p2']==''||!$_POST['p3']||$_POST['p3']=='') {
$message = 'Вы не заполнили поле';
} else{
$db = mysql_connect ("localhost","buy","buy");
mysql_select_db ("board",$db);
mysql_query("SET NAMES cp1251");

$p1=htmlspecialchars(trim($_POST['p1']));
$p2=htmlspecialchars(trim($_POST['p2']));
$p3=htmlspecialchars(trim($_POST['p3']));
$result=mysql_query("INSERT INTO buy_kv(p1,p2,p3) VALUES('$p1','$p2','$p3')");
if(mysql_affected_rows()==1) {
$message='<p> Данные занесены</p>';
$noform_var=1;
} else {
error_log(mysql_error());
$message='<p> Что-то пошло не так</p>';
}
}
}
if(!$noform_var) {
$date=date("Y-m-d");
$message.=<<<EOF
<p> Все поля обязательны для заполнения </p>
<FORM METHOD="post">
<INPUT TYPE="text" NAME="p1"><br>
<INPUT TYPE="text" NAME="p2"><br>
<INPUT TYPE="text" NAME="p3"><br>
<INPUT TYPE="hidden" NAME="added" VALUE="{$date}">
<INPUT TYPE="submit" NAME="submit" VALUE="submit">
</FORM>
EOF;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="container">
<div class="top_pan"></div>
<div><a href="index.php">Главная</a> </div>
<div class="connent">
<?php echo $message;?>
</div>
</div>
</body>
</html>

вот так должно работать. если не понятно почему, лучше спроси сразу, чтоб вопросов не осталось ))

Edited by demous
Link to comment
Share on other sites

  • 0

Наконец-то получилось!Разобрался с if(isset($_POST['submit'], остался только вопрос по ACTION. Действительно, в htmlbook.ru написано, что если параметр action отсутствует, то текущая страница перезагружается, а элементы формы возвращаются к значениям по умолчанию, но в то же время указано, что данный параметр обязателен - вроде бы получается противоречие? В каких случаях тогда используется конструкция :

$formfile=$_SERVER['PHP_SELF'];
..............
<FORM ACTION="$formfile">
// или вот так я еще видел
<FORM ACTION="<?php echo $formfile;?>"

Может, это потом понадобится? Допустим, если я захочу доработать форму в таком направлении: если пользователь все поля ввеп нормально, а какое-то одно не заполнил или заполнил как-то неправильно то, чтобы возвращалась страница с заполненной пользователем формой и стояла пометка "такое-то поле не заполнено"

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

Сейчас все работает.Прыгаю до потолка.

Link to comment
Share on other sites

  • 0
чтобы вывести страницу с заполненной формой, нужно делать что-то типа

<input type="text" name="name" value="<? if (isset($_POST['name'])) echo $_POST['name'];?>">

Я конечно могу ошибаться, но зачем ставить проверку. Если поста не было то и поле будет пустым. Можно ведь проще:

<input type="text" name="name" value="<?=$_POST['name'];?>"> ))

А по поводу action, ну может оно и обязательное поле с точки зрения w3c, и если уж так нужно его использовать, то можно сделать анологично

action="<?=$_SERVER['PHP_SELF'];?>".

P.S. <? echo $aaa;?> == <?=$aaa?> ))

Link to comment
Share on other sites

  • 0
Если проверку не делать, php завалит нотисами, тогда уж value="<?=@$_POST['name']?>", с подавлением ошибок, но это как-то негуманно.

Странно, у меня никогда ни на хостинге, ни локально ошибок не выводил. Это же массив просто, не функция. Возможно дело в настройке PHP. Ну и я не говорил что это не правильно, просто на мой взгляд это более просто.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy