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

Форум PHP

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

 

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

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

тема: Не знаю как кратко описать проблему, " переменная внутри переменной?"
 
 автор: and_alex   (30.11.2004 в 20:09)   письмо автору
 
 

Файл form.php для обработки формы (например гостевая книга).
Я хочу, чтобы , если не введены "имя" и/или "EMail", рядом с соответствующим полем формы появлялся комментарий типа " * Вы забыли ввести .....".
Так я это делаю:
<?PHP
$post_date 
date("F d, Y, H:i");

// Определяем форму через переменную $form
 
$form "<form action=\"form.php\" method=\"post\">
<input type=\"hidden\" name=\"seenform\" value=\"Y\">
<table align=\"center\">
<tr><td align=\"left\"><font color=\"#006666\"><b>Имя: </b></font></td>
</tr>

<tr><td align=\"left\"><input type=\"text\" name=\"name\" size=\"25\" maxlength=\"45\" value=
$name>
<font color=\"red\">
$error_msg_name</font>
</td>
</tr>

<tr><td align=\"left\"><font color=\"#006666\"><b>Email: </b></font></td>
</tr>

<tr><td align=\"left\"><input type=\"text\" name=\"email\" size=\"25\" maxlength=\"45\" value=
$email>
<font color=\"red\">
$error_msg_email</font></td>
</tr>

<tr><td align=\"left\"><font color=\"#006666\"><b>Коментарий: </b></font></td>
</tr>

<tr><td align=\"left\"><textarea name=\"comments\" rows=\"4\" cols=\"55\"></textarea></td>
</tr>

<tr><td align=\"left\"><input type=\"submit\" value=\"ОТПРАВИТЬ\"></td>
</tr>
</table>
</form>"
;



if (!
$seenform) :

print 
"<tr><td><font color=\"#006666\" size=\"4\"><center>Нам очень важно знать Ваше  мнение о нашем сайте.<br>

Добавьте, пожалуйста, Ваши коментарии.<br>"
;

print 
$form;

// Форма уже отображалась - проверяем введено ли имя и EMail.

else :

$error_flag "n";
    
// Убедиться в том. что поле имени содержит информацию
    
if ($name == "") :
    
$error_msg_name "* Вы забыли внести Ваше Имя!";
    
$error_flag "y";
    endif;

    
// Убедиться в том, что поле адреса содержит информацию
    
if ($email == "") :
    
$error_msg_email "* Вы забыли внести Ваш E-Mail!";
    
$error_flag "y";
    endif;

    
// Если флаг ошибки $error_flag установлен.
    // заново отобразить форму

    
if ($error_flag == "y") :
    print 
$form;

    else :

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

$msg "Уважаемый $name,
Cегодня 
$post_date,
Ваши Коментарии:
$comments
Добавлены в Гостевую Книгу сайта http:/comp4u.h12.ru
Спасибо за интерес, проявленный к нашему сайту.
Администратор comp4u@inbox.ru"
;

    
mail($email"Guest Book"$msg"From: Comp4U@Inbox.ru") or die("Could not send email!");

    print 
"<tr><td><h3>Ваши коментарии добавлены.</h3></td></tr>";

    endif;

endif;
?>

Делать то я делаю, да только не выводится ничего.
Причем, если перед print $form; определить переменные $error_msg_name и $error_msg_email определить явным образом
$error_msg_name = "* Вы забыли внести Ваше Имя!";
$error_msg_email = "* Вы забыли внести Ваш E-Mail!";
print $form;

коментарии появляются в нужном месте.
Может быть поможете разобраться.
P.S. Кстати, если форму создать не через переменную $form, а прописать в явном виде, один раз без коментариев, а после проверки с переменными $error_msg_name и $error_msg_email, то все работает

   
 
 автор: BAHO   (30.11.2004 в 20:34)   письмо автору
 
   для: and_alex   (30.11.2004 в 20:09)
 

Лучше заключи форму в функцию:
function form()
{?>
...
<?}
За место многоточия код формы.
А потом вызови форму в нужном месте form();

   
 
 автор: and_alex   (30.11.2004 в 21:08)   письмо автору
 
   для: BAHO   (30.11.2004 в 20:34)
 

Поскольку я в стадии начала изучения PHP, хотелось бы понять почему так как у меня не работает.
А к изучению функций я еще серьезно не приступал...
Теперь будет повод попробовать ;)
За ответ, Спасибо, ВАНО.

   
 
 автор: cheops   (30.11.2004 в 20:37)   письмо автору
 
   для: and_alex   (30.11.2004 в 20:09)
 

Так неполучится, так как PHP - это интерпретатор и встретив в начале скрипта переменную $form он подставит в неё значение $error_msg_name, который на этот момент будет равно пустой строке... Можно поступить так как это сделано в прикреплённом к этому сообщению файле.

   
 
 автор: and_alex   (30.11.2004 в 21:22)   письмо автору
 
   для: cheops   (30.11.2004 в 20:37)
 

Разъяснение понял, спасибо, Хеопс.
Единственное, уточни, пож., внутри переменной $form error_msg_... должны входить как строки, а не как переменные, у то у тебя в листинге один раз так, другой раз с $

   
 
 автор: cheops   (30.11.2004 в 21:31)   письмо автору
 
   для: and_alex   (30.11.2004 в 21:22)
 

Нет... именно так как приведено, дело в том, что строка
<?php
    
print str_replace("error_msg_name"$error_msg_name$form); 
?>

ищет и заменяет в переменной $form, подстроку "error_msg_name" на значение переменной $error_msg_name...

PS С синтаксисом этой функции можно ознакомится по ссылке

http://www.softtime.ru/dic/id_dic=53&id_group=1

   
 
 автор: and_alex   (30.11.2004 в 21:30)   письмо автору
 
   для: cheops   (30.11.2004 в 20:37)
 

Разобрался.
Оди раз так
print str_replace("error_msg_email", "", str_replace("error_msg_name", "", $form));

После проверки, так
print str_replace("error_msg_email", $error_msg_email, str_replace("error_msg_name", $error_msg_name, $form));

Все работает, Ура
Спасибо, Хеопс, еще раз большое
Спасибо всем.............
Ушел изучать функции ;-))
P.S. Кстати посоветуйте какой-нибудь не дорогой хостиг с поддержкой доменов в нац. зоне co.il , у меня сейчас сайт на h12.ru и я так и не добился от администрации, почему функция mail() второй раз не отрабатывает

   
 
 автор: cheops   (30.11.2004 в 21:34)   письмо автору
 
   для: and_alex   (30.11.2004 в 21:30)
 

Хм... по хостингу у нас не так много тем было, вот пожалуй наиболее интересная
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=307
Но там помоему нет ответа на ваш вопрос...

   
Rambler's Top100
вверх

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