Суть проблемы: Есть html-форма вида Код (Text): <form action=\"".$h."register.html\" method=\"post\"> E-mail"<input name=\"email\" type=\"text\"/><br /><br /> <input type=\"submit\" name=\"submit\" value=\"Отправить\"> </form> Эта форма записывается в переменную например $form. Далее я хочу получить, как обычно введенный E-mail в переменную Код (Text): $email = ($_POST['email']); так выводит ошибку Код (Text): Undefined index: email in... Но так работает Код (Text): $email = (@$_POST['email']); В чем проблема? Как решить ее?
Суть проблемы не понятна, возможно, у вас выполняется один и тот же код ($email = $_POST['email']) в разных случаях: 1. Отобразить форму, 2. Обработать форму. В результате, вы можете наблюдать ошибку обработки формы в тот момент, когда данных POST ещё нет (т.е. первый случай). Приведите эти участка кода полностью
Каким образом вы хотите получить микс из $_GET и $_POST ? =) Код (PHP): if ($_GET['act'] == 'register'){ //// тут не могут быть данные в $_POST (если конечно самому тупо их не засунуть) } Автор сообщение дропнул, но я успел заметить -)
Вот полный код Код (Text): if ($_GET['act'] == 'register'){ $form = "<div class=\"alcenter\" style=\"margin:50px;\"> <form action=\"".$h."register.html\" id=\"regForm\" method=\"post\"> ".$lang[150]."<input name=\"email\" type=\"text\"/><br /><br /> <input type=\"submit\" name=\"submit\" value=\"".$lang[199]."\"> </form> </div>"; $email = (@$_POST['email']); $submit = (@$_POST['submit']); //Проверяем корректность поля e-mail (CorrectEmail($email)) и что такого e-mail еще нет в БД (requestBD('email',$email)=='true') if (CorrectEmail($email)=='true' && requestBD('email',$email)=='true') { $email = trim($_POST['email']); $email = htmlspecialchars($_POST['email']); //genPassword() ф-ция генерации нового пароля, где salt-соль,pass-новый пароль без шифрования,genpass-защифрованный новый пароль list($salt,$pass,$genpass)=genPassword(); $query = mysql_query("INSERT `jb_user` SET `pass`='".$genpass."',`salt`='".$salt."', `email`='".$email."'"); //Выдаем сообщение об успешности регистрации и посылаем письмо на указанный e-mail с сгенерированным паролем $msg=$lang[559].".\n".$lang[875].": ".$pass."\n".$lang[876]." ".$h."login.html ".$lang[877]." ".$h.".\n\n".$lang[865]." ".$h; if (sendmailer($email,"<".$c['admin_mail'].">",$lang[881]." ".$h,$msg)) echo "<div class=\"alcenter\" style=\"margin:50px;\">".$lang[878].".<br /><br /><br /><br /><br /><a href=\"".$h."\">".$lang[84]."</a></div>"; else echo "<div class=\"alcenter\" style=\"margin:50px;\">".$lang[86]."<br /><br /><br /><a href=\"".$h."\">".$lang[84]."</a></div>"; } //Если e-mail введен не корректно выводим сообщение о типе ошибки и очищенную форму ввода elseif (isset($submit) && CorrectEmail($email) != 'true') echo "<div class=\"red alcenter\" style=\"margin:50px;\"><h1>".CorrectEmail($email)."</h1></div>".$form; //Если e-mail введен корректно, но такой e-mail уже зарегистрирован выводим сообщение об этом и очищенную форму ввода elseif (isset($submit) && CorrectEmail($email) == 'true') echo "<div class=\"red alcenter\" style=\"margin:50px;\"><h1>".$lang[1156]."</h1></div>".$form; else echo $form; Добавлено спустя 5 минут 56 секунд: т.е как я понимаю проблема в том, что в первой строке Код (Text): if ($_GET['act'] == 'register'){ используется метод GET, а для отправки формы POST? Код (Text): <form action=\"".$h."register.html\" id=\"regForm\" method=\"post\">
С точки зрения HTTP запрос от клиента может быть (в данном случае) либо GET либо POST. Нельзя послать одним запросом GET и POST вместе. Но сточки зрения PHP можно, так-как он параметры URL может переместить в $_GET Но в вашем случае форма-то идет POST-ом, в action нет параметров в url. И act=register нигде не светится
Спасибо уже стало понятнее...Просто мне казалось, что проблема в том, что html-код формы выводся через переменную $form, а не напрямую и как следствие скрипту "сложно" понять откуда взять $_POST['email'].
Дело не в том где выводится форма, а в том, что вы потеряли логику работы скрипта. Вы пытаетесь проверить, что пользователь пришел на получения формы регистрации, а вместо этого вы от него уже требуете данные которые он и не заполнял.