[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: опять борьба с отправкой формы
roobpass
Форма обратной связи
записывает в файл txt и отправляет письмо на почту
В файл запись идет!, а вот на почту ничего не отправляется, в конце вылезает алерт с надписью ошибка

HTML
<FORM method=\"post\" action=\"zakaz.php?trofimov=zakaz\">

<P>Ваше Имя:<br>
<INPUT type=\"text\" name=\"Name\" size=30>
</p>

<P>Ваш e-mail:<br>
<INPUT type=\"text\" name=\"Email\" size=30>
</p>
<P>доп e-mail<br>
<INPUT type=\"text\" name=\"mail2\" size=30>
</p>
<P>При желании здесь вы можете указать номер своего сотового телефона, :<br>
<INPUT type=\"text\" name=\"Tel\" size=30>
</p>
<P><br>
<textarea name=\"Message\" cols=30 rows=5></textarea>
</p>

<INPUT type=\"submit\" value=\"Отправить\"> <P>

</FORM>";


PHP
$Name =  $_POST['Name'];
$Email =  $_POST['Email'];
$Vzlom =  $_POST['mail2'];
$Tel =   $_POST['Tel'] ;
$Message =  $_POST['Message'];


$trofimov =  $_GET['trofimov']  ;

switch(
$trofimov) :
default :
print 
"<table width= cellpadding=0 cellspacing=0 border=0 align=center>";
break;

case(
"zakaz") :

if (
$Email == "") {print "<script language=JavaScript>window.alert('Введите e-mail!');</script>"; exit;}
if (
$Message == "") {print "<script language=JavaScript>window.alert('Введите текст!');</script>"; exit;}
if (!
eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$"$Email) and $Email != "") {print "<script language=JavaScript>window.alert('Не правельный E-mail');</script>"; exit;}
$er 1;

  
$ip $_SERVER['REMOTE_ADDR'];
  
$date date("H:i  d.m.Y");
  
$Name =  $_POST['Name'];
$Email =  $_POST['Email'];
$Vzlom =  $_POST['mail2'];
$Tel =   $_POST['Tel'] ;
$Message =  $_POST['Message'];

$fp=fopen('file.txt','a');

fputs$fp,
$date $Name#$Email
#$Vzlom#$Tel#$Message $ip  \r\n"
);
fclose($fp);

  
$info "Имя:\t$Name\n";
  
$info .= "E-Mail:\t$Email\n";
  
$info .= "доп.почта:\t$mail2\n";
  
$info .= "Телефон:\t$Tel\n";
  
$info .= "Сообщение:\t$Message\n";
  
$info .=  "IP \t$ip \n\n";
  
  
$send_to "roobpass.ru@gmail.com";             
  
$subject " \t$mail2\  $date ";          
  
  
$headers "From: $Email \n";
  
$headers .= "Content-Type: text/html; charset=windows-1251";

  
  
$send mail($send_to$subject$info$headers);
  if(
$send == 1)
  {
  
  print (
"<script language=JavaScript>window.alert('Отправлено $date');</script>");

  }
  else
  
  print (
"<script language=JavaScript>window.alert('Ошибка');</script>");

break;
endswitch;



притом на странице ещё и ошибки вылезают
Notice: Undefined index: Name in /var/www/roobpass/data/www//zakaz.php on line 93

Notice: Undefined index: Email in /var/www/roobpass/data/www//zakaz.php on line 94

Notice: Undefined index: Vzlom in /var/www/roobpass/data/www//zakaz.php on line 95

Notice: Undefined index: Tel in /var/www/roobpass/data/www//zakaz.php on line 96

Notice: Undefined index: Message in /var/www/roobpass/data/www//zakaz.php on line 97

Notice: Undefined index: trofimov in /var/www/roobpass/data/www//zakaz.php on line 100

собственно говоря подскажите как можно выйти из этой ситуации?



Спустя 29 минут, 4 секунды (4.02.2009 - 02:13) kirik написал(а):
Не отправляется наверное из-за неверно составленных заголовков - лучше использовать не \n а \r\n в качестве разделителей.
А нотисы вылазят потому что на момент вывода/использования элемента массива он еще небыл определен. Решается предварительной проверкой на существование его примерно так (возможны вариации) -
PHP
if(isset($_POST['Name']))
    
$Name $_POST['Name'];

Спустя 6 минут, 43 секунды (4.02.2009 - 02:20) roobpass написал(а):
суть в том что это форма на предыдущем хостинге работала...

Спустя 8 минут, 30 секунд (4.02.2009 - 02:29) kirik написал(а):
Цитата (roobpass @ 3.02.2009 - 18:20)
суть в том что это форма на предыдущем хостинге работала...

Тогда может проблема в том, что ф-я mail() тупо не работает у этого хостера? smile.gif

Спустя 14 часов, 42 минуты, 27 секунд (4.02.2009 - 17:11) roobpass написал(а):
да...проблема была именно в mail()
чтобы избавиться от нотисов переделал везде предварительную проверку массива
PHP
if(isset($_POST['Name']))
    
$Name $_POST['Name'];

получилось так
PHP
if(isset($_POST['Name']))
$Name =  $_POST['Name'];
if(isset(
$_POST['Email']))
$Email =  $_POST['Email'];
if(isset(
$_POST['Vzlom']))
$Vzlom =  $_POST['Vzlom'];
if(isset(
$_POST['Tel']))
$Tel =   $_POST['Tel'] ;
if(isset(
$_POST['Message']))
$Message =  $_POST['Message'];

if(isset(
$_GET['trofimov']))
$trofimov =  $_GET['trofimov']  ;


switch(
$trofimov) :
default :
print 
"<table width= cellpadding=0 cellspacing=0 border=0 align=center>";
break;

case(
"zakaz") :

теперь он ругается на строчку case("zakaz") :

Notice: Undefined variable: trofimov in /var/www/roobpass/data/www/roobpass.ru/zakaz.php on line 107

чего не недорублю...как исправить?

Спустя 51 минута, 26 секунд (4.02.2009 - 18:03) sergeiss написал(а):
Проблема в том, что у тебя нарушение в логике. Грабли, которые ты сам себе положил под ноги, и их не заметил smile.gif

Вот смотри. Есть у тебя код

PHP
if(isset($_GET['trofimov'])) 
$trofimov 
=  $_GET['trofimov']  ;


Но что будет, если через GET не было передано такой переменной? Правильный ответ - переменная $trofimov не будет создана (о чем тебе и говорит полученное сообщение об ошибке) .
Лучше будет сделать что-то типа
PHP
$trofimov =isset($_GET['trofimov']) ? $_GET['trofimov'] : false ;


Плюс к этому, мне непонятна суть использования switch в этом случае.
Во-первых, логичнее будет расположить default после последнего case. Странно, что он вообще работает в таком варианте...
Во-вторых, case - это не функция, я не понял, зачем "zakaz" написан в скобках.
В-третьих, я бы выкинул к чёрту tongue.gif всю эту фигню, связанную со switch и проверкой существования переменной, и написал бы по-другому:
PHP
if( isset ($_GET['trofimov'])) :
// тут сначала проверка на корректность содержания этой переменной, и затем код отправки почты - вообще без switch!!!
else:
// а тут действия, если не определена переменая
endif;


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.