Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Передача переменных из одного скрипта в другой и обратно

29K
23 февраля 2010 года
Rifler
24 / / 12.05.2008
Сразу оговорюсь, что я новичок.
Так вот, читаю книгу по PHP и выполняю пример с простой контактной формой.
Есть два скрипта - mail_form.php(с формой, полями и тд) и process.php(куда передаются значения полей, проверяется их заполненность и формируется сообщение об ошибке).
В чем собственно проблема - пользователь заполняет поля, нажимает отослать и запускается process.php и если ошибок нет, то должен опять запуститься mail_form и ниже формы вывести сообщение "Письмо успешно отослано", если же есть ошибки - то опять же пониже формы вывести переменную $error, в которой текст ошибок. Как это сделать?

Может способ и глупый, и лучше делать проверку и отсылку в одном модуле, но все же...

mail_form:
Код:
<form action="process.php" method="post">
<table>
  <tr>
    <td align="right"> Ваше имя :</td>
    <td> <input name="name" size="53"/></td>
  </tr>  

  <tr>
    <td align="right"> Email адрес получателя :</td>
    <td> <input name="address" size="53" /></td>
  </tr>
 
  <tr>
    <td align="right"> Тема :</td>
    <td> <input name="theme" size="53" /></td>
  </tr>  
 
  <tr>
    <td align="right"> Ваше сообщение :</td>
    <td> <textarea rows="10" cols="41" name="message" size="53"></textarea></td>
  </tr>  

  <tr>
    <td></td>
    <td> <input type="submit" value="Отослать" /> </td>
  </tr>
</table>
<br />
</form>


process:
Код:
<?
$error = "";
$name = $_POST['name'];
$address = $_POST['address'];
$theme = $_POST['theme'];
$message = $_POST['message'];
if (empty($name)) $error .= "<li> Не указано имя</li>";
if (empty($address)) $error .= "<li> Не указан email адрес</li>";
if (!isset($theme)) $theme = "Без темы";
if (!isset($message)) $message = "Без текста";

if (empty($error))
    mail($address, $theme, $message, "From: ololo");

?>
244
23 февраля 2010 года
UAS
2.0K / / 19.07.2006
mail_form:
 
Код:
// html form here
<?php
if( isset($_REQUEST["error"]) ) {
    if( empty($_REQUEST["error"]) ) {
        echo("Сообщение отправлено");
    } else {
        echo($_REQUEST["error"]);
    }
}
?>



process:
 
Код:
// your php code

if (empty($error))
    mail($address, $theme, $message, "From: ololo");

header("Location: main_form.php?error=".$error);


Быдлокодерский код конечно, ну раз уж такой пример.
29K
27 февраля 2010 года
Rifler
24 / / 12.05.2008
UAS, спасибо, а как по вашему лучше сделать?
244
27 февраля 2010 года
UAS
2.0K / / 19.07.2006
Если делать все в двух файлах. Первый - это шаблон формы, второй - обработчик php.

form.tpl
Код:
<form action="process.php" method="post">
<table>
  <tr>
    <td align="right"> Ваше имя :</td>
    <td> <input name="name" size="53" value="%NAME%" /></td>
  </tr>  

  <tr>
    <td align="right"> Email адрес получателя :</td>
    <td> <input name="address" size="53" value="%ADDRESS%" /></td>
  </tr>
   
  <tr>
    <td align="right"> Тема :</td>
    <td> <input name="theme" size="53" value="%THEME%" /></td>
  </tr>  
   
  <tr>
    <td align="right"> Ваше сообщение :</td>
    <td> <textarea rows="10" cols="41" name="message" size="53">%MESSAGE%</textarea></td>
  </tr>  

  <tr>
    <td colspan="2">
        <input type="hidden" name="action" value="send" />
        <input type="submit" value="Отослать" />
    </td>
  </tr>  
</table>
<br />
</form>



proccess.php
Код:
// установка значений по умолчанию
$mail_values = array();
$mail_values["name"] = "";
$mail_values["address"] = "";
$mail_values["theme"] = "";
$mail_values["message"] = "";

if( isset($_POST["action"]) && $_POST["action"] == "send" ) {
    $error = "";

    if( isset($_POST['name']) )      $mail_values["name"] = $_POST['name'];
    if( isset($_POST['address']) )   $mail_values["address"] = $_POST['address'];
    if( isset($_POST['theme']) )     $mail_values["theme"] = $_POST['theme'];
    if( isset($_POST['message']) )  $mail_values["message"] = $_POST['message'];

    if( empty($mail_values["name"]) )     $error .= "<li> Не указано имя</li>";
    if( empty($mail_values["address"]) )  $error .= "<li> Не указан email адрес</li>";
    if( empty($mail_values["theme"]) )    $_POST['theme'] = "Без темы";
    if( empty($mail_values["message"]) ) $_POST['message'] = "Без текста";

    if (empty($error)) {
        mail($mail_values["address"], $mail_values["theme"], $mail_values["message"], "From: ololo");
    } else {
        echo($error);
    }
}

$print = file_get_contents("form.tpl");
$print = str_replace(
    array("%NAME%","%ADDRESS%","%THEME%","%MESSAGE%"),
    array($mail_values["name"],$mail_values["address"],$mail_values["theme"],$mail_values["message"]),
    $print
);
echo($print);



ЗЫ: Вот простенький слегка быдловатый код (зато Вам понятный). В идеале я бы ещё %ERROR% добавил бы в шаблон формы, чем его выводить через echo. Код писал не проверяя. Возможно ошибки в str_replace (в её параметрах, сейчас просто уже не помню точно так ли там делается. Вообщем, в мануале посмотреть всегда сможете =)
ЗЫ2: кстати теги <li> всегда должны быть внутри <ul>
253
27 февраля 2010 года
Proger_XP
1.5K / / 07.08.2004
Любителям написания PHP на PHP посвящается...

Забейте вы на эти strtr(), str_replace() и иже с ними! Гораздо быстрее будет вместо:
 
Код:
// ...
$print = file_get_contents("form.tpl");
$print = str_replace(
    array("%NAME%","%ADDRESS%","%THEME%","%MESSAGE%"),
    array($mail_values["name"],$mail_values["address"],$mail_values["theme"],$mail_values["message"]),
    $print
);
echo($print);

это:
 
Код:
include "form.tpl";


form.tpl (часть):
 
Код:
...
  <tr>
    <td align="right"> Ваше имя :</td>
    <td> <input name="name" size="53" value="<?=$mail_values["name"];?>" /></td>
  </tr>
...


Дёшево и сердито.
244
27 февраля 2010 года
UAS
2.0K / / 19.07.2006
Следую принципам (хотя бы основным) MVC и любви к шаблонам - никогда в жизни не буду мешать PHP и html.

Имхо, это плохой стиль и никто меня не переубедит. Все должно быть разделено, лежать по полочкам + верстальщику или тому кто занимается шаблонами будет напорядок легче и код более читаем.

Эти str_* я привел лишь для примера. В реальной жизни всегда юзаю Smarty.
253
27 февраля 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
...никогда в жизни не буду мешать PHP и html.


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

244
27 февраля 2010 года
UAS
2.0K / / 19.07.2006
Цитата: Proger_XP
Не буду начинать холивар по этой теме, но пхп изначально задуман для встраивания в хтмл и подобное. Язык шаблонов, иначе говоря.
Впрочем, дело каждого.



Ну да, изначально так и было. Когда и уровень веб-страниц и самого веба был соответствующий, т.е. сайты не выше уровня narod.ru.

Когда же проект большой, то я думаю вряд ли кто-то будет возиться вот с таким смешиванием, потому что разбираться потом крайне сложно. Мне только хватило полчаса поработать с Joomla и увидеть как там все организованно. Более быдлокодской CMS, в плане шаблонов также, я и не видел.

Так что, имхо, надо все таки разделять логику и представления. Ведь если идти теми же рассуждениями, то и нет смысла в CSS, ведь всю стилистику можно тупо в хтмл-коде указать.

Так, да, холивар лучше не начинать) Тут спорить бесползено)

13
27 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Цитата: UAS
Более быдлокодской CMS, в плане шаблонов также, я и не видел.


Посмотрите phpshop или phpnuke или slaed - по сравнению с ними джумла и битрикс просто образец идеального кода в вакууме

57K
03 марта 2010 года
Optibe
10 / / 03.03.2010
С помошью этого скрипта загружается тогда страница test.php?i_topik=1 а так как такой страницы не существует выдает что её нет, а мне нужно чтобы загружаласт эта же страница test.php а значение передовалось переменной i_topik. Что нужно для этого сделать?
244
03 марта 2010 года
UAS
2.0K / / 19.07.2006
Для этого нужно ещё раз понятно задать вопрос с соблюдением прав орфографии.
Я лично ничего не понял, что вы конкретно хотите.
14
05 марта 2010 года
Phodopus
3.3K / / 19.06.2008
Да бот же это, забаньте его скорей :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог