【问题标题】:Execute php when a button is clicked [closed]单击按钮时执行 php [关闭]
【发布时间】:2015-06-24 22:38:19
【问题描述】:

我有一个链接到contact.php 的联系表。我在表单中添加了一个小的验证码小部件。我知道垃圾邮件机器人仍然可以得到这个,但这只是为了学习目的。

无论如何,我创建了 2 个随机数,用户必须在它附近的文本区域中输入相应的答案。问题是单击提交以检查验证码是否正确时,我无法运行 PHP。

对不起,如果代码有点混乱,但它只是一个简单的表单,包含姓名、电子邮件和消息 + 一个按钮。

P.S:$total 仅用于阻止 chrome 在尝试刷新时显示确认表单重新提交消息。

更新: 首先感谢所有的更正,我是新来的。 其次,它只解决了一半。这是因为只有当我从 <form action="contact.php" method="post" name="contact_form"> 中删除 contact.php 时才会显示验证码验证警报消息。除此之外,由于我对 Web 编程还很陌生,是否有任何其他编程语言(最好在这种情况下使用)我可以使用,以便我可以创建验证码,检查它并在上面写上Your captcha is incorrect 之类的注释文本框顶部(如果验证码不正确)并阻止用户提交表单,直到值正确?

<?php
// init session to store captcha numbers
session_start() 
?>

<form action="contact.php" method="post" name="contact_form">
<div class="contact" id="contact">
    <div class="container">
        <h2>Contact Us For a Quote</h2>
        <div class="contact-info">
            <ul>
                <li class="first">
                    <div class="position">
                        <a class=" icon user"></a><input name="name"     type="text" class="text" value="Name" onfocus="this.value = '';" onblur="if     (this.value == '') {this.value = 'Name';}">
                        <div class="clear"></div>
                        <div class="dot">
                            <span> </span>
                        </div>
                    </div>
                </li>
                <li class="first">
                    <div class="position">
                        <a class=" icon email"></a><input name="email" type="text" class="text" value="Email" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Email';}">
                        <div class="clear"></div>
                        <div class="dot">
                            <span> </span>
                        </div>
                    </div>
                </li>
                <div class="clearfix"> </div>
                <li class="second">
                    <div class="position">
                        <a class=" icon msg"></a><textarea name="message" value="Your Message/request" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Your Message/request';}">Your Message/request</textarea>
                        <div class="clear"></div>
                        <div class="dot1">
                            <span> </span>
                        </div>
                    </div>
                </li>
            </ul>
        </div>
        <div class= "verification">
            <center>
                <?php
                $min = 1;
                $max = 7;
                $num1 = rand ($min, $max);
                do{
                    $num2 = rand ($min, $max);
                }while($num1 == $num2);
                // store captcha numbers to check them on submit
                $_SESSION['num1'] = $num1;
                $_SESSION['num2'] = $num2;
                echo $num1 . " + " . $num2 . " =";
                $total = $num1 + $num2;
                ?>
                <input name="ver" type="text" value="" onfocus="this.value = '';" size="2" maxlength="2">
            </center>
        </div>

        <center><input type="submit" name="submit" onclick="myFunction()" value="Submit Request"></center>
        <?php
        // your form pass data through post, not get
        if(isset($_POST['submit'])){
            //submit clicked
            $verification = $_POST['ver'];
            // check numbers on submit
            if($_SESSION['num1'] + $_SESSION['num2'] != $verification)
            {
                echo'<script type="text/javascript">alert("Incorrect verification code");</script>';
            }
        }
        ?>
    </div>
</div>

打印屏幕:http://i.stack.imgur.com/u0Ca9.png

contact.php 内容

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$to = "name@example.com";
$subject = "New Form Submission";
$finmsg = "A visitor has submitted a new request.\n\nName: $name\nEmail: $email\nMessage: $message";
mail ($to, $subject, $finmsg);
?>

【问题讨论】:

  • 您正在处理contact.php 上的表单,该代码sn-p 是否包含在contact.php 文件中?
  • 显示来自contact.php的代码。
  • 当您的表单显示$_POST 时,我看到您使用的是$_GET,如果您在同一页面上处理表单,请将php 处理放在页面顶部

标签: php html forms


【解决方案1】:

问题是 $num1 和 $num2 变量没有定义然后你的检查验​​证码,因为变量状态没有保存在不同的请求之间。

您应该使用 smth like 会话来保留变量值。参见下面 sn-p 中的 cmets:

<?php
  // init session to store captcha numbers
  session_start() 
?>

<form action="contact.php" method="post" name="contact_form">
    <div class="contact" id="contact">
        <div class="container">
            <h2>Contact Us For a Quote</h2>
            <div class="contact-info">
                <ul>
                    <li class="first">
                        <div class="position">
                            <a class=" icon user"></a><input name="name" type="text" class="text" value="Name" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Name';}">
                            <div class="clear"></div>
                            <div class="dot">
                                <span> </span>
                            </div>
                        </div>
                    </li>
                    <li class="first">
                        <div class="position">
                            <a class=" icon email"></a><input name="email" type="text" class="text" value="Email" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Email';}">
                            <div class="clear"></div>
                            <div class="dot">
                                <span> </span>
                            </div>
                        </div>
                    </li>
                    <div class="clearfix"> </div>
                    <li class="second">
                        <div class="position">
                            <a class=" icon msg"></a><textarea name="message" value="Your Message/request" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Your Message/request';}">Your Message/request</textarea>
                            <div class="clear"></div>
                            <div class="dot1">
                                <span> </span>
                            </div>
                        </div>
                    </li>
                </ul>
            </div>
            <div class= "verification">
                <center>
                    <?php
                    $min = 1;
                    $max = 7;
                    $num1 = rand ($min, $max);
                    do{
                        $num2 = rand ($min, $max);
                    }while($num1 == $num2);
                    // store captcha numbers to check them on submit
                    $_SESSION['num1'] = $num1;
                    $_SESSION['num2'] = $num2;
                    echo $num1 . " + " . $num2 . " =";
                    $total = $num1 + $num2;
                    ?>
                    <input name="ver" type="text" value="" onfocus="this.value = '';" size="2" maxlength="2">
                </center>
            </div>

            <center><input type="submit" name="submit" onclick="myFunction()" value="Submit Request"></center>
            <?php
            // your form pass data through post, not get
            if(isset($_POST['submit'])){
                //submit clicked
                $verification = $_POST['ver'];
                // check numbers on submit
                if($_SESSION['num1'] + $_SESSION['num2'] != $verification)
                {
                    echo'<script type="text/javascript">alert("Incorrect verification code");</script>';
                }
            }
            ?>
        </div>
    </div>

【讨论】:

    【解决方案2】:

    试试这个

    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    

    【讨论】:

    • 请添加一些你为什么要这样做的定义?
    猜你喜欢
    • 2013-05-15
    • 2022-01-22
    • 2021-03-13
    • 2022-12-03
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多