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

Форум MySQL

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

 

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

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

тема: Проблема сохранения данных в форме при проверки их введения (refresh)
 
 автор: jurij_83   (11.03.2006 в 22:31)   письмо автору
2.2 Кб
 
 

Имею базу данных (4 поля):
subject_name
subject_teacher
hide
id

Прикрепляю все файлы...

Проблема в том, что я хочу проверить обязательные для заполнения поля (и если они не заполнены - выводится соответственное сообщение: заполните то и то). Но есть проблема: допустим заполнил только одно поле (второе оставил пустым). Жму submit (происходит refresh na add_1.php). Вылезает сообщение: заполните такое-то поле.
Рядом ссылка
echo "<p><a href=# onClick='history.back()'>Back</a></p>";
Жму её (возращаюсь на первоначальный файл add.php). И вижу (то поле, которое я заполнил уже ранее - оно пустое), хотя и указано (value):
<input type="text" name="subject_teacher" size="35" value="<?= $subject_teacher ?>" /></p>

И вся фишка в том, что если я убираю в файле add.php
<?php

session_start();

if ($valid != "yes") {
header("Location: admin.php");
exit;

} else {
session_register('valid');
}

?>
то данные в полях уже сохраняются (что мне и нужно). Всё дело в session_start(), как я понимаю. Но мне обязательно нужно администрирование (т.е. сделанное через сессию на проверку admin.php).
КАК МНЕ РЕШИТЬ ЭТУ ПРОБЛЕМУ? Чтобы была и проверка данных вв полях (их сохранение), но и администрирование через сессию.


Файл add.php:

<?php

session_start();

if ($valid != "yes") {
header("Location: admin.php");
exit;

} else {
session_register('valid');
}

?>

<form method="post" action="add_1.php">

<p><strong><span class="style36">* </span>Predmet </strong><br />
<input type="text" name="subject_name" size="35" value="<?= $subject_name ?>" /></p>

<p><strong><span class="style36">* </span>Prepody: </strong><br />
<input type="text" name="subject_teacher" size="35" value="<?= $subject_teacher ?>" /></p>

<p><strong>Pokazyvat: </strong><br />
<input type="checkbox" name="hide" <?= $showhide ?> /></p>

<input type="hidden" name="id" value="<?= $_GET['id'] ?>" />

</form>

-------------
Файл add_1.php:

<?php

session_start();

if ($valid != "yes") {
header("Location: admin.php");
exit;

} else {
session_register('valid');
}

require_once("config.php");

if(empty($_POST['subject_name'])) links("Vvesti name.");
if(empty($_POST['subject_teacher'])) links("Vvesti prepod.");

if($_POST['hide'] == "on") $showhide = "show";
else $showhide = "hide";

$subject_name = str_replace("'","'",$_POST['subject_name']);
$subject_teacher = str_replace("'","'",$_POST['subject_teacher']);

$sql = "INSERT INTO db VALUES (NULL,
'$subject_name',
'$subject_teacher',
'$showhide')";

$result = @mysql_query($sql,$connection) or die("Error.");


function links($msg)
{
echo "<p>".$msg."</p>";
echo "<p><a href=# onClick='history.back()'>Back</a></p>";
exit();
}
?>

<table cellspacing="3" cellpadding="5" class="textsimplas" border="0" align="center">
<tr>
<td valign="top">

<p><strong>Predmet:</strong><br />
<?php echo "$subject_name"; ?></p>

<p><strong>Prepody:</strong><br />
<?php echo "$subject_teacher"; ?></p>

</td>
</tr>
</table>

</body>
</html>

Спасибо за помощь.

   
 
 автор: cheops   (12.03.2006 в 13:02)   письмо автору
 
   для: jurij_83   (11.03.2006 в 22:31)
 

Это из-за session_start(); - либо убирайте его, тогда при возвращении назад поля будут заполнены, либо помещайте всё что ввёл пользователь в сессию и выводите значения формы самостоятельно подставляя их в атрибуты value элементов управления.

   
 
 автор: jurij_83   (12.03.2006 в 15:44)   письмо автору
 
   для: cheops   (12.03.2006 в 13:02)
 

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

А как это сделать:
помещайте всё что ввёл пользователь в сессию и выводите значения формы самостоятельно подставляя их в атрибуты value элементов управления.

Напишите.

   
 
 автор: jurij_83   (12.03.2006 в 18:17)   письмо автору
 
   для: jurij_83   (12.03.2006 в 15:44)
 

Какие решения?

   
 
 автор: cheops   (12.03.2006 в 19:29)   письмо автору
 
   для: jurij_83   (12.03.2006 в 15:44)
 

В обработчике HTML-формы следует написать
<?php
  $_SESSION
['subject_name'] = $_POST['subject_name'];
?>

а при формировании HTML-формы проверять
<?php
  
if(!empty($_SESSION['subject_name'])) $subject_name $_SESSION['subject_name'];
?>

И так для каждого поля, которое входит в HTML-форму.

   
 
 автор: jurij_83   (12.03.2006 в 21:15)   письмо автору
 
   для: cheops   (12.03.2006 в 19:29)
 

1. На сколько я понял, это нужно сделать так (всё правлю в файле add_1.php):

$_SESSION['subject_name'] = $_POST['subject_name'];
$_SESSION['subject_teacher'] = $_POST['subject_teacher'];

if(!empty($_SESSION['subject_name'])) $subject_name = $_SESSION['subject_name'];
if(!empty($_SESSION['subject_teacher'])) $subject_teacher = $_SESSION['subject_teacher'];


if(empty($_POST['subject_name'])) links("Vvesti name.");
if(empty($_POST['subject_teacher'])) links("Vvesti prepod.");


Так ли?
Ответьте!

2. И ещё вопрос: как сделать, чтобы в файле (add_1.php) был бы квадратик (type="checkbox") и в нём бы отображалось (в зависимости была поставлена галочка или нет в файле add.php).

По идее пишу
<p><strong>Pokazyvat: </strong><br />
<input type="checkbox" name="hide" <?= $showhide ?> /></p>
но это не то.

У меня сделано в (add_1.php) если показывать, то в файле add_1.php отображает hide, если показывать - то show.
<p><strong>Pokazyvat:</strong><br />
<?php echo "$showhide"; ?></p>

Это работает. Но как сделать (с отображением галочки в квадратике). Понятна ли суть? Большое спасибо (да, ваша книга очень хорошая - толковая).

Мои файлы:

add.php:
<?php

session_start();

if ($valid != "yes") {
header("Location: admin.php");
exit;

} else {
session_register('valid');
}

if(!isset($showhide)) $showhide = "checked";

?>


<form method="post" action="add_1.php">

<p><strong><span class="style36">* </span>Predmet </strong><br />
<input type="text" name="subject_name" size="35" value="<?= $subject_name ?>" /></p>

<p><strong><span class="style36">* </span>Prepody: </strong><br />
<input type="text" name="subject_teacher" size="35" value="<?= $subject_teacher ?>" /></p>

<p><strong>Pokazyvat: </strong><br />
<input type="checkbox" name="hide" <?= $showhide ?> /></p>

<input type="hidden" name="id" value="<?= $_GET['id'] ?>" />

<p><input type="submit" name="submit" value="Dobavit" class="textsimplas" /></p>
</form>


------------
add_1.php

<?php

session_start();

if ($valid != "yes") {
header("Location: admin.php");
exit;

} else {
session_register('valid');
}



require_once("config.php");



$_SESSION['subject_name'] = $_POST['subject_name'];
$_SESSION['subject_teacher'] = $_POST['subject_teacher'];

if(!empty($_SESSION['subject_name'])) $subject_name = $_SESSION['subject_name'];
if(!empty($_SESSION['subject_teacher'])) $subject_teacher = $_SESSION['subject_teacher'];


if(empty($_POST['subject_name'])) links("Vvesti name.");
if(empty($_POST['subject_teacher'])) links("Vvesti prepod.");

if($_POST['hide'] == "on") $showhide = "show";
else $showhide = "hide";

$subject_name = str_replace("'","'",$_POST['subject_name']);
$subject_teacher = str_replace("'","'",$_POST['subject_teacher']);

$sql = "INSERT INTO tablica VALUES (NULL,
'$subject_name',
'$subject_teacher', '$showhide')";
$result = @mysql_query($sql,$connection) or die("Error.");


function links($msg)
{
echo "<p>".$msg."</p>";
echo "<p><a href=# onClick='history.back()'>Back</a></p>";
exit();
}
?>

<table cellspacing="3" cellpadding="5" class="textsimplas" border="0" align="center">
<tr>
<td valign="top">

<p><strong>Predmet:</strong><br />
<?php echo "$subject_name"; ?></p>

<p><strong>Prepody:</strong><br />
<?php echo "$subject_teacher"; ?></p>

<p><strong>Pokazyvat:</strong><br />
<?php echo "$showhide"; ?></p>
</td>
</tr>
</table>

</body>
</html>

   
 
 автор: cheops   (13.03.2006 в 00:58)   письмо автору
 
   для: jurij_83   (12.03.2006 в 21:15)
 

1) Да, правильно.
2) В принципе вы правильно всё делает, а переменная $showhide откуда берётся в HTML-форме?

   
 
 автор: jurij_83   (13.03.2006 в 11:28)   письмо автору
 
   для: cheops   (13.03.2006 в 00:58)
 

Спасибо за ответ.

переменная $showhide - есть такое поле в базе данных (hide) - это и есть этот квадратик в файле add.php, а в файле add_1.php - отображается всё то, что выбрал в файле add_1.php.

Тогда как сделать, чтобы в файле (add_1.php) был бы квадратик (type="checkbox") и в нём бы отображалось (в зависимости была поставлена галочка или нет в файле add.php)?

   
Rambler's Top100
вверх

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