Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Общие вопросы по коду

Ответить
Настройки темы

Deadooshka


Сообщения: 2497
Благодарности: 681

Профиль | Отправить PM | Цитировать


см include
индекс массива нужно в кавычки (если не константа)...

Отправлено: 17:02, 20-08-2009 | #171


Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


плохо разбираюсь в php.
надо сделать форму обратной связи с сайта.
скачал скрипт, помогите пожалуйста разобраться.
суть такова:

в отдельном файле форма:
PHP код: Выделить весь код

<p>Contact the Webmaster.</p>

<
form action="sendmail.php" method=POST>
<
input type="text" name="form_name">
<
input type="text" name="form_mail">
<
textarea cols=40 rows=5 name="form_message"></textarea>
<
input type=submit value="Send Mail">
</
form

отдельно сама отправка (sendmail.php):
PHP код: Выделить весь код

<?

$email 
"admin@mymail.ru";
$subject "subject";
if (
$field_name <> "" and $field_mail <> "" and $field_message <> "") {
mail("$email""$subject""From: $form_name\nMail: $form_mail\nMessage:\n\n$form_message");
$msg "Your message has been sent, thank you.";
} else {
$msg "All fields are required, push the back button to fill out the rest.";
}
?>
<p><? echo $msg?></p>

отправляю письмо, он пишет что All fields are required, push the back button to fill out the rest, хотя всё заполнено
=(
буд-то он их не видит\не цепляет из первого файла

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

PHP код: Выделить весь код

if ($field_name "" or $field_mail "" or $field_message "") {

$msg "All fields are required, push the back button to fill out the rest.";
} else {
mail("$email""$subject""From: $f_name\nMail: $f_mail\nMessage:\n\n$f_message");
$msg "Your message has been sent, thank you.";


ничего непонимаю (

Последний раз редактировалось Ingolder, 21-08-2009 в 15:55.


Отправлено: 15:04, 21-08-2009 | #172



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


В форме используются имена form_name, form_mail, form_message, а в скрипте уже почему-то field:
Код: Выделить весь код
if ($field_name <> "" and $field_mail <> "" and $field_message <> "")
Исправьте переменные на $_POST['form_name'], $_POST['form_mail'], $_POST['form_message'] и заодно дальше в скрипте на эти же.

Отправлено: 16:19, 21-08-2009 | #173


Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


да, простите, с переменными ошибся. везде привёл к одинаковому виду но всёравно не работает:
form.php:
PHP код: Выделить весь код

<form action="sendmail.php" method=POST>

<
input type="text" name="form_name">
<
input type="text" name="form_mail">
<
textarea cols="40" rows="5" name="form_message"></textarea>
<
input type=submit value="Send Mail">
</
form

sendmail.php:
PHP код: Выделить весь код

<?

$email 
"admin@mail.com";
$subject "sublect";
if (
$form_name <> "" and $form_mail <> "" and $form_message <> "") {
mail("$email""$subject""From: $form_name\nMail: $form_mail\nMessage:\n\n$form_message");
$msg "Your message has been sent, thank you.";
} else {
$msg "All fields are required, push the back button to fill out the rest.";
}
?>
<p><? echo $msg?></p>

не работает, не понимаю почему. опять выдаёт что All fields are required, push the back button to fill out the rest, хотя всё заполнено


делаю по вашему, правильно ли я вас понял?:в sendmail надо было заменить переменные или как ?
sendmail:
PHP код: Выделить весь код

<?

$email 
"admin@mail.com";
$subject "sublect";
if (
$_POST['form_name'] <> "" and $_POST['form_mail'] <> "" and $_POST['form_message'] <> "") {
mail("$email""$subject""From: $_POST['form_name']\nMail: $_POST['form_mail']\nMessage:\n\n$$_POST['form_message']");
$msg "Your message has been sent, thank you.";
} else {
$msg "All fields are required, push the back button to fill out the rest.";
}
?>
<p><? echo $msg?></p>

при таком варианте он выдаёт при нажатии кнопки send:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/tvelcomp/public_html/admin2/sendmail.php on line 5


p.s. всё корректно заработало когда в строчке mail() оставил как было и не стал заменять на $_POST..
точнее, он проверяет корректно - если есть пустые ячейки то не посылает, а если всё нормально - то мне на мыло приходит письмо, но пустое:
From:
Mail:
Message:
без содержания..

ничего не понимаю, почему мы в этом случае пишем по разному, что это вообще значит?

Последний раз редактировалось Ingolder, 21-08-2009 в 18:26.


Отправлено: 18:15, 21-08-2009 | #174


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Цитата Ingolder:
ssage:\n\n$$_POST['form_message']") »
В этом куске кода есть ошибка - два доллара.
Но вообще я бы не стал так явно использовать эти переменные. Я бы написал примерно так:
PHP код: Выделить весь код

mail($email$subject"From: " $_POST['form_name'] . "\nMail: " $_POST['form_mail'] . "\nMessage:\n\n" $_POST['form_message']); 


Обратите внимание на кавычки.


Вы, видимо, учились php по старым книжкам. Раньше по умолчанию в php.ini была настройка register_globals = "on". И тогда все переменные из формы можно было использовать напрямую - как вы используете в функции mail(). Но потом выяснилось, что это огромная дыра в безопасности, и эту опцию стали отключать. Поэтому когда вы передаёте параметры методом post, все они попадают в массив $_POST. Для get - $_GET. Можете в начале скрипта написать print_r($_POST); чтобы увидеть его содержимое. Так вот, содержимое поля form_name будет получено скриптом под именем $_POST['form_name']. Разумеется, просто переменной $form_name не будет. Вот вам в теле письма ничего и не приходит.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:38, 21-08-2009 | #175


Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


при исправлении двух долларов на один всёравно выдаёт
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/tvelcomp/public_html/admin2/sendmail.php on line 5

ваш же вариант заработал отменно. в кавычках было дело, он не поспринимал как переменные а как текст чтоле?

Отправлено: 18:46, 21-08-2009 | #176


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Возможно. Точно не знаю. Но чтобы такие ситуации не возникали, переменные выношу за кавычки почти всегда (кроме самых примитивных случаев).
И вот тут ещё странная конструкция:
Цитата Ingolder:
if ($_POST['form_name'] <> "" and $_POST['form_mail'] <> "" and $_POST['form_message'] <> "") »
Обычно знак "не равно" обозначается так: !=
Но когда проверяют наличие значения переменной, используют функцию isset():
PHP код: Выделить весь код

if (isset($_POST['form_name']) && isset($_POST['form_mail']) && isset($_POST['form_message'])) ... 


Главное - поставить нужное количество скобочек

Отправлено: 18:55, 21-08-2009 | #177


Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


спасибо, приму к сведению.

какая бы ни была странная эта инструкция <> она работает

Отправлено: 20:02, 21-08-2009 | #178


Deadooshka


Сообщения: 2497
Благодарности: 681

Профиль | Отправить PM | Цитировать


если переменная существует, но пустая, isset будет true, поэтому в этом случае будет удобнее empty if (!empty($var)).
Цитата Coutty:
В этом куске кода есть ошибка - два доллара. »
вообще $$var это валидная конструкция и означает, что имя переменной - это ее значение (т.е. если $var = 'real' то $$var это $real)...
Цитата Ingolder:
в кавычках было дело, он не поспринимал как переменные а как текст чтоле? »
внутри двойных кавычек или heredoc переменные с индексами массива будут в виде: "... $var[index] ..." или "... {$var['index']} ..."
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:47, 21-08-2009 | #179


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем доброго времени суток! Подскажите пожалуйста новичку, возможно ли определить позицию тестовового курсора в элементе textarea при помощи JavaSript? если возможно то как?

Отправлено: 14:20, 25-08-2009 | #180



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Общие вопросы по коду

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интернет - ICQ .:[ все вопросы ]:. Evil Программное обеспечение Windows 712 06-09-2012 17:32
Прочее - Сервер общие вопросы амброзий Сетевые технологии 7 15-07-2008 11:33




 
Переход