Снова вопрос про формы. Еще не все понятно...

Kostyab

Новичок
Снова вопрос про формы. Еще не все понятно...

Привет всем!
Продолжая "долбать" формы, снова сталкиваюсь с непонимаем каких-то вещей... Очень жаль, что статьи на эту тему (и на сайтах, и в книгах) содержат отрывочные сведения и заставляют думать самому :) Это, конечно, хорошо, но ничего не получается...
А проблема такая: Опять-таки есть форма, в другом файле поля проверяются и в случае успеха отправлям данные на мыло.
С текстовыми полями понятно.
К примеру, в первом файле
<input type="text" name="name" value="<? print $name ?>">
Во втором:
<input type=text name=name value=\"$name\">

С textarea все понятно. С чекбоксами намучался, но разобрался. Совершенно не понятно с select. В первом файле:

<select name="select">
<option>Выберите из меню:</option>
<option value="value1">label1</option>
<option value="value2">label2</option>
</select>

Как правильно написать во втором файле? И как правильно отослать на мыло? У меня организовано так:
$message .= "Заказ: $select\n";

Спасибо всем. Предлагаю (как только разберусь со всем этим) написать статью "Организация отправки данных из форм", где осветить ВСЕ возможные варианты организации форм, валидацию, отправку на e-mail и т.д. Написать могу сам, однако нужно будет разбирающимся людям посмотреть и отредактировать. Или эта проблема интересует меня одного...?
 

Макс

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

А твой вопрос из-за незнания HTML
<select name="select">
<option value="value1" <?=($select == "value1")?"selected":"");?>>label2</option>


$message .= "Заказ: $select\n";
все правильно. А если у тебя select multiple то
<select name="select[]" multiple>
<option value="value1" <?=(in_array("value1", $select)?"selected":"");?>>label2</option>


Примерно так
 

Макс

Старожил PHPClub
$message .= "Заказ: $select\n";
если select multiple
то эту строку надо формировать либо с помощью implode() либо в цикле.
Код писать не буду, надо заставлять вас самих думать своей головой
 

RomikChef

Guest
Костя, еще один совет.
Гораздо удобнее все делать в одном файле.
вначале проверка и отсылка, а потом форма.
 

Kostyab

Новичок
Насчет textarea - не работает. Видимо, где-то ошибка. Не понятно, почему закрываются две круглые скобки:
<option value="value1" <?=($select == "value1")?"selected":"");?>>label2</option>

И почему value1, а label2?
У меня простой select, не multiply
Спасибо!
 

Larson

Новичок
Может так:
PHP:
<option value="value1" <? echo ( "value1" ? "selected" : "";?>label2</option>
 

Unregistered

Guest
Ой!!!!
Конечно же

<select NAME="YYYY">
...
<option value="2002" <?php if($YYYY=='2002') echo 'selected'?>>2002
<option value="2001" <?php if($YYYY=='2001') echo 'selected'?>>2001
...

</select>

Забыла везде поменять. :)
Работает, как швейцарские часы...
 

Kostyab

Новичок
Вот спасибо! Действительно, как швейцарские часы...!
А вот такой вопрос:
А можно ли построение такой конструкции организовать с помошью функции? Например, описываем функцию, потом в нужный момент ее вызываем. Вопрос в том, что тогда делать с тэгами <?php...?> ведь текст у нас уже внутри функции?
Огромное человеческое спасибо за оперативный и толковый ответ!
 

RomikChef

Guest
Внутри функции можно использовать теги <?php...?>
А зачем тебе такая функция?
 

Kostyab

Новичок
Внутри функции почему-то не выходит.
А функция нужна для такого случая:
если все поля формы заполнены верно -> отправляем данные мылом
если не верно -> сообщаем об этом -> выводим форму еще раз со всеми данными, которые пользователь ввел раньше.
У меня это делается через конструкцию
echo (".......вся форма с данными.....") - и внутри приходится использовать <?php...?> и ничего не работает.
Удобнее было бы вызывать функцию.
Вот, постарался объяснить как мог.
 

RomikChef

Guest
Функция для этого совсем не нужна. Достаточно простого if
но если у тебя не работает, то у тебя прото опечатка.
ты вообще умеешь определять функции?
 

Kostyab

Новичок
Учусь на основе статьи про виртуальный магазин - там очень много понятных комментариев. Еще по книге В.Гилмора, но там сложновато. Буду искать ошибку.
Спасибо!
 

RomikChef

Guest
за что спасибо то?
вот это у тебя работает?
function test() {
?>
траляля
<?
}
test();
 

Kostyab

Новичок
Да. Такая штука работает.

Как строить формы одним файлом, я пока не разобрался, делаю двумя. Однако:
1. Если строить форму не используя функции, не работают тэги <?php...?>, так как у меня форма вызывается после выполнения цикла if.... echo ("<form>...тело формы...</form>")
Эти тэги мне как раз и нужны чтобы отобразить select, который пользователь выбрал (см. сообщения выше).
2. Если организовать функцию, все рисуется, но с пустыми полями формы, то есть данные не принимаются вообще, хотя я ничего не меняю в теле формы. Соответственно select не работает также.
3. Если просто передавать данные, не используя условия if... то, действительно, все данные и select принимаются и отображаются верно, то есть здесь я разобрался. За что спасибо, так как самому не сделать было.

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

RomikChef

Guest
if - это не цикл, а условие.
с тегами <?php...?> ты что-то мудришь. Не мог бы ты пояснить -как и именно они не работают? Что значит - не работают? А как они должны работать?

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

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

RomikChef

Guest
2. данные не передаются потому, что внутри функции не видны переменные.
их надо либо передать в параметрах функции, или объявить глобальными.
напиши в начале своей функции такие стрчки
global $HTTP_POST_VARS;
extract($HTTP_POST_VARS);
 

RomikChef

Guest
и, если ты делаешь двумя файлами, то как тебе помогает функция?
тиы ее объявляешь в каждом файле? для того, чтобы использовать 1 раз?
 

Unregistered

Guest
Я вообще-то сама параллельно лишь учусь, но насколько я понимаю, внутри echo (".......вся форма с данными.....") -<?php...?> тэг и не должен работать. Ты уже в PHP, зачем тебе второй раз это указывать? Мне эту задачу тоже пришлось всего пару дней назад решать. И самый простой выход я нашла в том, что бы когда ты код формы делаешь, то из PHP выходишь в HTML. Т.е. приблизительно это должно выглядеть так (если я не права, мэтры поправят):
<?PHP ....code...?>
<HTML> bla-bla-bla...
<form bla-bla-bla...>
<select NAME="YYYY">
...
<option value="2002" <?php if($YYYY=='2002') echo 'selected'?>>2002
<option value="2001" <?php if($YYYY=='2001') echo 'selected'?>>2001
...

</select>
...
</form>
</html>
<?PHP ....code...?>
_----------
Если же твоя форма находится внутри какой-то функции, то ее надо на предмет PHP тоже разорвать, т.е.:
<?php
function()
{
?>
HTML
<?
}
?>
Тоже все будет работь, как швейцарские часы, уже выстрадано, вот еще бы с аттачментами разобраться(мечтательно)...
 

Unregistered

Guest
А вообще, мне бы, честно сказать, тоже интересно было бы узнать, как прописываются эти if-statements, если форма целиком находится в рамках кода PHP. Я долго эксперементировала, но у меня ничего не получилось.
Кто-нибудь может взяться этот же селект прописать, с учетом того, что форма не в HTML, a в PHP находится?
 
Сверху