Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
nicos Гость
|
Добавлено: Вт Май 25 2004 17:39 Заголовок сообщения: скрипт для отправки формы |
|
|
у меня такая проблема: в html я пишу такую форму:
______________________________________________
<html>
<head>
<title>форма</title>
<head>
</body>
<FORM METHOD="POST" ACTION="mail.php">
<I>Ваше имя</I><BR>
<INPUT TYPE="TEXT" SIZE="40" NAME="msg"><BR>
<INPUT TYPE="Submit" NAME="Ok" VALUE="Послать">
</FORM>
</body>
</html>
___________________________________________________
получается это http://realbaner.fatal.ru
ну так вот а как отсылающий скрипт "mail.php"написать понятия
не имею.я вообще в php чайник. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вт Май 25 2004 20:43 Заголовок сообщения: |
|
|
не может быть такого чтоб никто не знал!!!
ОТВЕТЬТЕ!!!!! |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Вт Май 25 2004 21:13 Заголовок сообщения: |
|
|
Почта отсылается функцией mail. Вот только параметры запамятовал. Вроде, сначала адрес, потом тема, а затем сообщение. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вт Май 25 2004 21:25 Заголовок сообщения: |
|
|
так я пробовал:
mail(mail@mail.ru, типа тема, привет)
и получиться такая фигня мне на mail будет отправляться только слово привет а данные из формы нет!!!!! |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Вт Май 25 2004 21:35 Заголовок сообщения: |
|
|
А как ты выцепляешь данные из формы? |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Вт Май 25 2004 21:40 Заголовок сообщения: |
|
|
Можно написать так:
mail("mymail@email.mail","Это письмо сгенерил скрипт",$HTTP_POST_VARS["msg"]); |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Ср Май 26 2004 12:59 Заголовок сообщения: |
|
|
вот такой скрипт???
__________________________________
<?
mail("mymail@email.mail","Это письмо сгенерил скрипт",$HTTP_POST_VARS["msg"]);
?>
_______________________________________
такой мне вообще ничего на меил не отправляет. |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Май 26 2004 14:39 Заголовок сообщения: |
|
|
Так ты напиши там свой мейл
mail@mail.ru |
|
Вернуться к началу |
|
|
nicos Гость
|
Добавлено: Ср Май 26 2004 20:53 Заголовок сообщения: |
|
|
ну я конечно написал но всё равно ничего!
а нельзя как нить зделать чтоб эти данные сохранялись в каком нибудь файле??? |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Май 26 2004 21:03 Заголовок сообщения: |
|
|
Можно сохранить в файле на серваке.
Ты не должен забывать о коллизиях совместного доступа к файлу. (Если бы ты испльзовал БД, такого бы не было). Можешь хеш-функцией (хотя бы md5:) для каждого юзера определить уникально имя файла, куда будет писаться только его инфа. |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Май 26 2004 21:08 Заголовок сообщения: |
|
|
В скрипте пишешь:
$fp=fopen("filename.txt","w");
fwrite($fp,$HTTP_POST_VARS["msg"]);
fclose($fp); |
|
Вернуться к началу |
|
|
nicos Гость
|
Добавлено: Ср Май 26 2004 21:49 Заголовок сообщения: |
|
|
а с этим скриптом вот такие ошибки:
--------------------------------------------------------------------------------
Warning: fopen(filename.txt): failed to open stream: Permission denied in /www/r/re/realbaner.fatal.ru/site/mail.php on line 2
Warning: fwrite(): supplied argument is not a valid stream resource in /www/r/re/realbaner.fatal.ru/site/mail.php on line 3
Warning: fclose(): supplied argument is not a valid stream resource in /www/r/re/realbaner.fatal.ru/site/mail.php on line 4
------------------------------------------------------------------------------
на сервере |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Чт Май 27 2004 15:01 Заголовок сообщения: |
|
|
Например, вместо $HTTP_POST_VARS
может быть $POST, $_POST
Обратись к доке провайдера. И узнай еще, какие права предоставляет хост. Кстати, следи, чтобы filename.txt был нетолькодлячтения. И права должны быть выставлены на него такие, чтобы скрипт мог в него чегонить записать. |
|
Вернуться к началу |
|
|
Astaroth
Зарегистрирован: 17.05.2004 Сообщения: 453 Откуда: Питер
|
Добавлено: Чт Май 27 2004 15:07 Заголовок сообщения: |
|
|
2 GREA: все верно, только при открытии-записи-закрытии файла надо бы добавить блокировки, что б избежать как раз той самой проблемы совместного доступа. В РНР4 они точно реализованы, но синтаксис, увы, на вскидку не вспомню. Как говориться RTFM _________________ Не очеловечивайте компы - они этого не любят! |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Чт Май 27 2004 15:25 Заголовок сообщения: |
|
|
Чтобы избежать коллизий, можно в цикле открывать файл, пока он не откроется. (то есть, его указатель перестанет быть нулевым) |
|
Вернуться к началу |
|
|
Astaroth
Зарегистрирован: 17.05.2004 Сообщения: 453 Откуда: Питер
|
Добавлено: Чт Май 27 2004 15:34 Заголовок сообщения: |
|
|
Извини, что-то не понял что ты имеешь ввиду... Проблема возникает когда два пользака одновременно топчут submit и два процесса-писателя пробуют писать в один и тот же файл данные, например, из формы. При чем тут цикл? Поясни, плз. _________________ Не очеловечивайте компы - они этого не любят! |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Чт Май 27 2004 15:48 Заголовок сообщения: |
|
|
Если мы не смогли открыть файл, значит в него уже записывают. Поэтому мы должны выждать немного, и попробовать открыть его снова. И так пока файл не окажется свободным. (Получается нечто вроде очереди на запись. Один записывает, остальные ждут. А потом тот, кто успел, начинает писать туда уже свою инфу) |
|
Вернуться к началу |
|
|
Astaroth
Зарегистрирован: 17.05.2004 Сообщения: 453 Откуда: Питер
|
Добавлено: Чт Май 27 2004 16:10 Заголовок сообщения: |
|
|
Хм... Не уверен что это сработает если нет блокировок. Будет попытка одновременной записи, и - как следствие - все рухнет. а блокировки для того и сделаны, что б когда в файло пишут никто ни-ни! Тока читать. _________________ Не очеловечивайте компы - они этого не любят! |
|
Вернуться к началу |
|
|
swz Гость
|
Добавлено: Ср Июн 09 2004 12:59 Заголовок сообщения: |
|
|
Попробуй так помоему все должно работать.
index.htm
<form action="send.php"method=post>
<input type="hidden" name="hidden" value=true><br>
введите Адрес:<input type=text name="EMail"><br>
тема:<input type=text name="subject"><br>
текст для отправки:<input type name="Body" ><br>
<input type=submit name="Submit" value="Отправить!">
</form>
send.php
<?php
if($hidden){
mail($EMail,$subject,$Body);
$file='mail.txt';
$open=fopen($file,"a");
fwrite($open,"$EMail\t$Body\n");
fclose($open);
print'Письмо отправлено';
}
?> |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Июн 09 2004 20:21 Заголовок сообщения: |
|
|
А значения переменных из глобального массива Пушкин будет выцеплять? |
|
Вернуться к началу |
|
|
swz Гость
|
Добавлено: Ср Июн 09 2004 20:44 Заголовок сообщения: |
|
|
А причем тут глобальные переменные, или я чтото не понял про что речь идет.
Тогда плиз извените.
Что косается распределения времени при обращении к файлу я подумал так, для каждой отправки создавать свой файл в отведенной директории затем читать с помощью opendir и readdir записывая данные в один файл удаляя временные.
Нагрузит конечно сервер чють но зато просто и работает.
может я и не прав. |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Июн 09 2004 20:54 Заголовок сообщения: |
|
|
ИМХО в начале скрипта надо писать
$EMail=$POST[Email]
или
$EMail=$_POST[Email]
или
$EMail=$HTTP_POST_VARS[Email]
В зависимости от настроек сервака. |
|
Вернуться к началу |
|
|
swz Гость
|
Добавлено: Ср Июн 09 2004 21:18 Заголовок сообщения: |
|
|
А зачем вообще присваивать переменной содержащей маил адрес значение?
для отправки текста сообщения есть переменная $Body она может содержать все что угодно. |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Июн 09 2004 21:24 Заголовок сообщения: |
|
|
Ты же должен выгрести данные из формы. |
|
Вернуться к началу |
|
|
swz Гость
|
Добавлено: Ср Июн 09 2004 22:20 Заголовок сообщения: |
|
|
А как данные из формы передаются переменным
Если в форме есть <input type=text name="EMail">
то переменная будет $EMail
Кажется так было. |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Июн 09 2004 22:28 Заголовок сообщения: |
|
|
Нет, все переданные из формы значения находятся в глобальных ассоциативных массивах $GET или $POST.
На крайняк, в массиве $SESSION (из другого скрипта).
Это необходимо в целях безопасности. |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Июн 09 2004 22:31 Заголовок сообщения: |
|
|
Может, у тебя ПХП по особенному сконфигурирован, чтобы копировал содержимое этих массивов в переменные автоматически. Кажется, была такая опция в ini файле. Но в общем случае так делать нельзя. |
|
Вернуться к началу |
|
|
GreenS
Зарегистрирован: 09.06.2004 Сообщения: 9 Откуда: Урал
|
Добавлено: Ср Июн 09 2004 22:42 Заголовок сообщения: |
|
|
Для безопасной передачи переменной была такая функция
SecureVar()
PHP у меня сконфигурирован нормально все работает.
SWZ уже в прошлом я зарегистрировался |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Июн 09 2004 22:54 Заголовок сообщения: |
|
|
И тем не менее, переменные передаются через массив. |
|
Вернуться к началу |
|
|
Astaroth
Зарегистрирован: 17.05.2004 Сообщения: 453 Откуда: Питер
|
Добавлено: Чт Июн 10 2004 06:34 Заголовок сообщения: |
|
|
Может вы о разных версиях РНР говорите?
2GREA - в РНР4 работать через массив совсем не обязательно. Подозреваю, что у тебя третья версия, хотя вроде и там можно было.
Кстати, а кто мешает и скрипт, и форму пихнуть в один файл? В форме target="$REDIRECT_URL", кнопочка submit поименована. Сам файл выглядит примерно так
<?
if(проверяем кнопку submit)
{обработка}
else
{?><form...></form><?}?>
То есть в if проверяем была ли нажата сабмит, а при первом заходе в файл это не верно, тогда отрабатывает else и генерит нам форму. По нажатию submit форма отправляется на $REDIRECT_URL, то есть в тот же файл, где снова проверяется нажатие на submit (она же у нас именованная, не забыли?), а так как она была нажата отрабатывает тот скрипт, что сразу после if - проверяет данные из формы. Очень удобно, и не плодиться море файлов. _________________ Не очеловечивайте компы - они этого не любят! |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Чт Июн 10 2004 13:29 Заголовок сообщения: |
|
|
Ничего не мешает. Так и делаю. |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Чт Июн 10 2004 13:37 Заголовок сообщения: |
|
|
Я вроде действительно ошибался. Звиняюсь. А ведь на 101% был уверен
Листинг 10.5. Пересылка пользовательских данных функцией mail( )
<html>
<head>
<title>Listing 10-5</title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#cbda74" vlink="#808040" alink="#808040">
// Все кавычки внутри $form должны экранироваться.
// в противном случае произойдет ошибка.
$form = "
<form action=\"listing10-5.php\" method=\"post\">
<input type=\"hidden\" name=\"seenform\" value=\"y\">
<b>Send us your comments!</b><br>
Your Name:<br>
<input type=\"text\" name=\"name\" size=\"20\" maxlength=\"20\" value=\"\"><br>
Your Email:<br>
<input type=\"text\" name-\"email\" size=\"20\" maxlength=\"40\" value=\"\"><br>
Your Comments:<br>
<textarea name=\"comments\" rows=\"3\" cols=\"30\"></textarea><br>
<input type=\"submit\" value=\"submit!\">
</form>
// Если форма ранее не отображалась, отобразить ее.
// Для проверки используется значение скрытой переменной $seenform.
if ($seenform != "у") :
print "$form"; else :
// Переменная $recipient определяет получателя данных формы
$recipient = "yourname@youremail.com";
// Тема сообщения
$subject = "User Comments ($name)";
// Дополнительные заголовки $headers = "From: $email";
// Отправить сообщение или выдать сообщение об ошибке
mail($recipient, $subject, $comments, $headers) or die("Could not send email!");
// Вывести сообщение для пользователя
print "Thank you $name for taking a moment to send us your comments!";
endif;
?>
</body>
</html> |
|
Вернуться к началу |
|
|
Astaroth
Зарегистрирован: 17.05.2004 Сообщения: 453 Откуда: Питер
|
Добавлено: Чт Июн 10 2004 14:02 Заголовок сообщения: |
|
|
Хе! Ну, примерно так Только мог бы пример покороче сделать, а то если автор поста сюда заглянет, то ему еще и разбираться придется. _________________ Не очеловечивайте компы - они этого не любят! |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Чт Июн 10 2004 14:17 Заголовок сообщения: |
|
|
Так не я ж писал. |
|
Вернуться к началу |
|
|
Astaroth
Зарегистрирован: 17.05.2004 Сообщения: 453 Откуда: Питер
|
Добавлено: Чт Июн 10 2004 14:25 Заголовок сообщения: |
|
|
А что за книга? _________________ Не очеловечивайте компы - они этого не любят! |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Чт Июн 10 2004 14:34 Заголовок сообщения: |
|
|
Хрен знает. Откуда-то из инета. |
|
Вернуться к началу |
|
|
Хома
Зарегистрирован: 26.08.2003 Сообщения: 109 Откуда: Москва
|
Добавлено: Чт Июн 10 2004 16:01 Заголовок сообщения: |
|
|
Мужики, на сколько я понял - автор поста в РНР не шарит. И он этот скрипт просто скопирует и ... пойдут баги. Там нет открывающего РНР-шного тега и закрывающей кавычки в $form. Да и вообще он помоему немного замороченый.
Может так будет получше? Как считаете?
Листинг 10.5. Пересылка пользовательских данных функцией mail( )
<html>
<head>
<title>Listing 10-5</title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#cbda74" vlink="#808040" alink="#808040">
<?
// Все кавычки внутри $form должны экранироваться.
// в противном случае произойдет ошибка.
$form = "
<form action=\"$SCRIPT_NAME\" method=\"post\">
<b>Send us your comments!</b><br>
Your Name:<br>
<input type=\"text\" name=\"name\" size=\"20\" maxlength=\"20\" value=\"\"><br>
Your Email:<br>
<input type=\"text\" name-\"email\" size=\"20\" maxlength=\"40\" value=\"\"><br>
Your Comments:<br>
<textarea name=\"comments\" rows=\"3\" cols=\"30\"></textarea><br>
<input type=\"submit\" value=\"submit!\" name=\"seenform\">
</form>";
//показываем форму
echo "$form";
// Если нажали Submit
if (is_set($seenform))
{
// Переменная $recipient определяет получателя данных формы
$recipient = "yourname@youremail.com";
// Тема сообщения
$subject = "User Comments ($name)";
// Дополнительные заголовки
$headers = "From: $email";
// Отправить сообщение или выдать сообщение об ошибке
mail($recipient, $subject, $comments, $headers) or die("Could not send email!");
// Вывести сообщение для пользователя
print "Thank you $name for taking a moment to send us your comments!";
}?>
</body>
</html> _________________ Тише едешь, не успеешь |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Пт Июн 11 2004 07:58 Заголовок сообщения: |
|
|
Ага |
|
Вернуться к началу |
|
|
|