【问题标题】:single submit button to do three functions单个提交按钮做三个功能
【发布时间】:2015-08-22 15:24:59
【问题描述】:

自从我上次发布以来已经有一段时间了,提前感谢您过去的所有帮助..我有一个带有提交按钮的电子邮件框。

我想要做的是检查这个电子邮件地址以确保它不为空,如果它是显示一条消息,然后要求用户输入我想要验证的有效电子邮件地址,以便它只是 hotmail 和gmail 帐户,例如xyz@hotmail.com 和 xyz@gmail.com 仅此而已..

我下面的代码可以正常检查是否为空,并在屏幕上显示警报消息,但我不知道如何操作电子邮件地址检查,如果一切正常,如何使用同一个提交按钮提交有效的电子邮件谢谢你提交后弹出消息..提前谢谢...singhy

ps:对于我犯的任何初学者错误提前道歉......对不起

<?php
if(isset($_POST['email'])) {
	
$to      = 'xyz@hotmail.com';
$subject = '';
$email = $_POST['email_from'];
//$message = "LIST \r\n".
$message = "signoff list name \r\n";

   }

 $email_from = $_POST['email']; 

// create email headers
$message = wordwrap($message, 100, "\r\n");
$headers = 'From: '.$email."\r\n".
'Reply-To: '.$email."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($to, $subject, $message, $headers);
?>


<p>If you would like to receive our weekly newsletter email address below.</p>

<script type="text/javascript">
 function IsEmpty(){
  if(document.forms['isgtest'].email_from.value == "")
  {
    alert("Email field is empty, please enter email format");
    return false;
  }
  //return submit "email_from.value";
  (document.forms['test'].email_from.value == "subscribe")
  //return .email_from.value == "";
  //alert("thank u for joining the list !");
  //return true;
}
    </script>

<!--<script type="text/javascript"></script>-->
<form name="isgtest" class="rform" method="post" action="g.php"> 
<fieldset><legend>testing...</legend> 

<label for="email_from"><span style="color: #ff0000;"><strong>*</strong>
</span>Email address:<input id="email_from" type="text" name="email_from" size="25" />  <input id="insert" id="btn" onclick="return IsEmpty();" style="float: right;" type="button" name="submit" value="Subscribe" /></fieldset>
</form>

【问题讨论】:

    标签: javascript php email


    【解决方案1】:

    如果您要进行前端验证(仅应用于改善用户体验,切勿信任用户输入并始终在服务器端进行验证!),为什么不使用正是为此目的而存在的 HTML5 功能。像这样的:

    <form>
        <label>Email:
            <input type='email' pattern=".+(@gmail.com|@hotmail.com)" required />
        </label>
        <button type="submit">subscribe</button>
    </form>
    
    • type=email 确保只接受电子邮件地址
    • required 确保在提交之前提供了一个值
    • pattern 接受输入需要遵守的正则表达式,然后才能提交。

    就我个人而言,我不太喜欢浏览器生成的默认错误消息,但我更不喜欢您使用的警报,所以...


    如果你坚持使用 javascript 方式,我会建议这样的事情(伪代码,未经测试):

    function isEmpty(input) { ... }
    function isEmail(input) { ... }
    function isGmailOrHotmail(input) { ... }
    function isValid(node) {
        var value = node.value;
        return ! isEmpty(value) && isEmail(value) && isGmailOrHotmail(value);
    }
    

    然后您可以将isValid 函数绑定到您的提交按钮(最好从您的脚本文件或块中绑定,但内联onclick 方式也应该可以工作)

    【讨论】:

    • 嗨 pevara,感谢您提供宝贵的信息,尽我所能将其编入我的代码中...如果我偏离轨道,将与您联系,谢谢
    【解决方案2】:
    <?php
    
    $email_from = $_POST['email'];
    $errors=array(); //track the errors as the script runs
    function isValidEmail($addr) // Check for a valid email
    {
    return filter_var($addr, FILTER_VALIDATE_EMAIL) ? TRUE : FALSE;
    }
    
    if(!isValidEmail($email_from))$errors[]='Please enter a valid email address';
    
    //Next, test for the email provider you wanted to filter by
    $atPos=strpos($email_from,'@');//find the @ symbol
    $afterAt=substr($email_from,$atPos,strlen($email_from)-$atPos); //get everything after
    $dotPos=strpos($afterAt,'.');
    $domain=strtolower(substr($afterAt,0,$dotPos)); //get the typed domain, lowercase
    if($domain!='hotmail'||$domain!='gmail')$errors[]='Email must be hotmail or gmail';
    
    if(isset($_POST['email'])) {
    
    if(count($errors)<0)
    {
    $to      = 'xyz@hotmail.com';
    $subject = '';
    $email = $_POST['email_from'];
    //$message = "LIST \r\n".
    $message = "signoff list name \r\n";
    
    // create email headers
    $message = wordwrap($message, 100, "\r\n");
    $headers = 'From: '.$email."\r\n".
    'Reply-To: '.$email."\r\n" .
    'X-Mailer: PHP/' . phpversion();
    @mail($to, $subject, $message, $headers);
    }
    }// note that I changed the nesting to only trigger the mail on post
    ?>
    <p>If you would like to receive our weekly newsletter email address below.</p>
    
    <script type="text/javascript">
    function IsEmpty(){
    if(document.forms['isgtest'].email_from.value == "")
    {
    alert("Email field is empty, please enter email format");
    return false;
    }
    //return submit "email_from.value";
    (document.forms['test'].email_from.value == "subscribe")
    //return .email_from.value == "";
    //alert("thank u for joining the list !");
    //return true;
    }
    </script>
    
    <!--<script type="text/javascript"></script>-->
    
    <?php
    if(count($errors)>0)
    {
    foreach $errors as $e //Now tell the user what went wrong
    {
    echo "$e<br>"; // you can also use '' to enclose js tags and use alert
    }
    }
    ?>
    
    <form name="isgtest" class="rform" method="post" action="g.php"> 
    <fieldset><legend>testing...</legend> 
    
    <label for="email_from"><span style="color: #ff0000;"><strong>*</strong>
    </span>Email address:<input id="email_from" type="text" name="email_from" size="25" /><input id="insert" id="btn" onclick="return IsEmpty();" style="float: right;" type="button" name="submit" value="Subscribe" />  </fieldset>
    </form>
    

    【讨论】:

    • 正如@Pevara 所说,永远不要相信用户输入!除非只是为了方便用户,否则始终检查服务器端的错误。
    • 嗨,andrew 感谢我的代码的柚木,仍在努力让它工作,遇到一些错误将与我们联系,再次感谢 singhy
    • 抱歉回复晚了,设法按照 Andrew Berger 的概述解决了问题,再次感谢 singhy :+)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多