Php 回音不离开页面

Php 回音不离开页面,php,email,subscription,Php,Email,Subscription,我在我的网站上有一个简单的订阅时事通讯的表格。我想让你帮我让它更友好。 我的表格不能做的事情: -它不能呼应“成功”“不成功”不离开页面(它在新页面中显示状态,这令人沮丧) -它不能验证正确和不正确的电子邮件(如果你把一些垃圾,我会收到它无论如何) 这些是我的表格中的主要问题。你能告诉我一些有用的图坦卡门吗,或者只是纠正我的代码。任何帮助都将不胜感激 HTML: PHP: 它可能正在回响,但它发生得太快了,你可能在重定向之前看不到它。尝试退出在mail()函数之后和header()函数

我在我的网站上有一个简单的订阅时事通讯的表格。我想让你帮我让它更友好。 我的表格不能做的事情: -它不能呼应“成功”“不成功”不离开页面(它在新页面中显示状态,这令人沮丧) -它不能验证正确和不正确的电子邮件(如果你把一些垃圾,我会收到它无论如何)

这些是我的表格中的主要问题。你能告诉我一些有用的图坦卡门吗,或者只是纠正我的代码。任何帮助都将不胜感激

HTML:


PHP:


它可能正在回响,但它发生得太快了,你可能在重定向之前看不到它。尝试退出
在mail()函数之后和header()函数之前,我想您会看到它

您需要做的是在回音和重定向之间暂停。使用PHP或javascript有很多方法可以做到这一点

[EDIT]更新如何保持页面加载echo

       if (($name) and ($email))
{
   echo "thanks for subscription!";
}


mail( $recipient, $subject, $body, "From: $sender" ) or die ("Mail could not be sent.");
// comment out the redirection and you should send the email, 
// reload the page and have the "thanks" echoed.
// header( "Location: $location" );

但仍有很大的改进空间。如果我们为您这样做,您将不会学到太多,但这应该会让您开始

有一些改进代码的建议。。 1.使用将以电子邮件而不是文本形式接收电子邮件的输入字段类型。。 2.必须有AND语句,而不是OR,因为只有在用户提供姓名和电子邮件的情况下,您才想执行表单提交代码。

这应该可以:

subscribe.php

<?php
if(isset($_POST))
{
$recipient = "order@dastiche.kz";
$subject = "Subscriber";
$name = $_POST['Name'];
$email = $_POST['Email'];
$location = "index.html";
$sender = $recipient;
$body .= "Name: ".$_RE``QUEST['Name']." \n";
$body .= "Email: ".$_REQUEST['Email']." \n";


if (($name != "") or ($email != ""))
// Если существуют проверяем... 
{
if ((strlen($name) >= 2) and (strlen($name) <= 25))
{
$name = stripslashes($name);
$name = html_entity_decode($name);
$name = strip_tags($name);
}
else
{
echo " something is wrong with name field ";
echo "<center><input name='back' type='button' value='get back'
onclick= 'javascript:history.back()'></center>";
}

if (eregi("^[._a-zA-Z0-9-]+@[.a-zA-Z0-9-]+.[a-z]{2,6}$", $email))
{
$email = stripslashes($email);
$email = htmlspecialchars($email);
$email = strip_tags($email);
}
else
{
echo "There are some mistakes in the \"E-mail\" field";
echo "<center><input name='back' type='button' value='try again'
onclick= 'javascript:history.back()'></center>";
}

}
// Если не существуют выводим сообщение... 
else
{
echo "Please, fill in blanks";
echo "<center><input name='back' type='button' value='try again'
onclick= 'javascript:history.back()'></center>";
}

if (($name) and ($email))
{
echo "thanks for subscription!";
}


mail( $recipient, $subject, $body, "From: $sender" ) or die ("Mail could not be sent.");
header( "Location: $location" );
}
?>

 <div class="subscribe">
      <form method="POST" action="">
 <p><input type="text" name="Name" size="24" maxlength="40" style="font-family:'Times New Roman', Times, serif" value="Ваше имя"  onfocus="if (this.value == 'Ваше имя') {this.value = '';}" onblur="if (this.value == '') {this.value ='Ваше имя';}"></p>
 <p><input type="text" name="Email" size="24" maxlength="40" style="font-family:'Times New Roman', Times, serif" value="Ваш email"  onfocus="if (this.value == 'Ваш email') {this.value = '';}" onblur="if (this.value == '') {this.value ='Ваш email';}"></p>
 <p><input type="image" value="submit" name="Submit" src="images/subscribe.png"> </p>
 </form>

    </div>

好,这是验证代码,您可以自己添加电子邮件功能。我也没有测试这个,但希望它能起作用

<?php
$errors = array();
if(isset($_POST['submit'])){
    $uname = $_POST['uname'];
    $email = $_POST['email'];
    if($uname == ''){
        $errors['uname'] = "Username is required.";
    }
    if($email == ''){
        $errors['email'] = "Email is required!";
    }
    if(empty($errors)){
        echo "Subscription Successfull";
    }else{
        echo "Subscription failed";
    }
}
  ?>
  <div id="error">
<ul>
<?php
    foreach($errors as $error){
        echo "<li>".$error."</li>";
    }
?>
  </ul>
  </div>
  <form name="subscribe" action="" method="post">
  <input type="text" name="uname" value="<?php echo isset($_POST['uname'])? $_POST['uname']:'';?>"/>
<input type="email" name="email" value="<?php echo isset($_POST['email'])?$_POST['email']:'';?>"/>
  <input type="submit" name="submit" value="Subscribe"/>
  </form>


谢谢你,史蒂夫,但我会稍微改变一下我的提问。我不希望用户被重定向。只需在“提交”按钮成功/失败下进行回应即可。你能帮我吗?或者你知道任何一步一步的图坦卡门,这样我就可以自己去做了。然后删除重定向代码,把你的php和表单放在同一个页面上,这将为你节省很多麻烦。/Moax,我可能要求太多了,但你能在代码中给我看一下吗?我不是那么好的程序员,我是平面设计师:-)谢谢,莫克斯,我已经添加了你的建议。但主要问题仍然存在。感谢Moax的努力,但代码似乎不起作用。它在第58行的/home/dastiche/public_html/subscribe.php:53中重复了两个空框和提交按钮)警告:无法修改标题信息-标题已经由/home/dastiche/public_html/subscribe.php中的(输出开始于/home/dastiche/public_html/subscribe.php:53)发送-这意味着什么?它用图像重复了我的subscribe div,仅此而已。
<?php
if(isset($_POST))
{
$recipient = "order@dastiche.kz";
$subject = "Subscriber";
$name = $_POST['Name'];
$email = $_POST['Email'];
$location = "index.html";
$sender = $recipient;
$body .= "Name: ".$_RE``QUEST['Name']." \n";
$body .= "Email: ".$_REQUEST['Email']." \n";


if (($name != "") or ($email != ""))
// Если существуют проверяем... 
{
if ((strlen($name) >= 2) and (strlen($name) <= 25))
{
$name = stripslashes($name);
$name = html_entity_decode($name);
$name = strip_tags($name);
}
else
{
echo " something is wrong with name field ";
echo "<center><input name='back' type='button' value='get back'
onclick= 'javascript:history.back()'></center>";
}

if (eregi("^[._a-zA-Z0-9-]+@[.a-zA-Z0-9-]+.[a-z]{2,6}$", $email))
{
$email = stripslashes($email);
$email = htmlspecialchars($email);
$email = strip_tags($email);
}
else
{
echo "There are some mistakes in the \"E-mail\" field";
echo "<center><input name='back' type='button' value='try again'
onclick= 'javascript:history.back()'></center>";
}

}
// Если не существуют выводим сообщение... 
else
{
echo "Please, fill in blanks";
echo "<center><input name='back' type='button' value='try again'
onclick= 'javascript:history.back()'></center>";
}

if (($name) and ($email))
{
echo "thanks for subscription!";
}


mail( $recipient, $subject, $body, "From: $sender" ) or die ("Mail could not be sent.");
header( "Location: $location" );
}
?>

 <div class="subscribe">
      <form method="POST" action="">
 <p><input type="text" name="Name" size="24" maxlength="40" style="font-family:'Times New Roman', Times, serif" value="Ваше имя"  onfocus="if (this.value == 'Ваше имя') {this.value = '';}" onblur="if (this.value == '') {this.value ='Ваше имя';}"></p>
 <p><input type="text" name="Email" size="24" maxlength="40" style="font-family:'Times New Roman', Times, serif" value="Ваш email"  onfocus="if (this.value == 'Ваш email') {this.value = '';}" onblur="if (this.value == '') {this.value ='Ваш email';}"></p>
 <p><input type="image" value="submit" name="Submit" src="images/subscribe.png"> </p>
 </form>

    </div>
<?php
$errors = array();
if(isset($_POST['submit'])){
    $uname = $_POST['uname'];
    $email = $_POST['email'];
    if($uname == ''){
        $errors['uname'] = "Username is required.";
    }
    if($email == ''){
        $errors['email'] = "Email is required!";
    }
    if(empty($errors)){
        echo "Subscription Successfull";
    }else{
        echo "Subscription failed";
    }
}
  ?>
  <div id="error">
<ul>
<?php
    foreach($errors as $error){
        echo "<li>".$error."</li>";
    }
?>
  </ul>
  </div>
  <form name="subscribe" action="" method="post">
  <input type="text" name="uname" value="<?php echo isset($_POST['uname'])? $_POST['uname']:'';?>"/>
<input type="email" name="email" value="<?php echo isset($_POST['email'])?$_POST['email']:'';?>"/>
  <input type="submit" name="submit" value="Subscribe"/>
  </form>