php - 多合一网络表单

标签 php html mysql database forms

我正在学习 PHP,现在正在创建一个一体化 Web 表单,该表单将新的订阅者记录添加到新闻通讯数据库中的订阅者表中。这是我第一次访问这个网站,所以请原谅我的任何不便。

注释解释了确定是否处理表单的代码部分。我不确定它是否需要进入验证提交的表单数据的 if..else 语句内部,或者是否在其自己的 if..else 中进行验证。

当我将其放入验证中时,会显示 html 表单,但是当我点击提交时,所有信息都会刷新,但什么也没有发生。

当我在验证后放置它时,html表单不显示,我收到一条错误消息,指出 undefined variable :Fo​​rmErrorCount。然后它告诉我应该获得的 ID 号,但我没有输入姓名或电子邮件(由于 html 表单未显示)并且留空。

有一个包含文件,但这很好。

我确信一旦弄清楚这一点,我会有一种想扇自己一巴掌的感觉,但我已经盯着屏幕太久了。谢谢

<?php

    $ShowForm = FALSE;
    $SubscriberName = "";
    $SubscriberEmail = "";

    if (isset($_POST['submit'])) {
        $FormErrorCount = 0;
        if (isset($_POST['SubName'])) {
            $SubscriberName = stripslashes($_POST['SubName']);
            $SubscriberName = trim($SubscriberName);
            if (strlen($SubscriberName) == 0) {
                echo "<p>You must include your name</p>\n";
                ++$FormErrorCount;
            }
        }else{
            echo "<p>Form submittal error (No 'SubName' field)!</p>\n";
            ++$FormErrorCount;
        }
        if (isset($_POST['SubEmail'])) {
            $SubscriberEmail = stripslashes($_POST['SubEmail']);
            $SubscriberEmail = trim($SubscriberEmail);
            if (strlen($SubscriberEmail == 0)) {
                echo "<p>You must include your email address!</p>\n";
                ++$FormErrorCount;
            }
        }else{
            echo "<p>Form submittal error (No 'SubEmail' field)!</p>\n";
            ++$FormErrorCount;
        }
        //CODE BELOW IS THE SAME AS THE COMMENTED OUT CODE TOWARDS THE END. NOT SURE WHERE IT GOES.

        if ($FormErrorCount == 0) {
            $ShowForm = FALSE;
            include("inc_db_newsletter.php");
            if ($DBConnect !== FALSE) {
                $TableName = "subscribers";
                $SubscriberDate = date("Y-m-d");
                $SQLstring = "INSERT INTO $TableName " .
                             " (name, email, subscribe_date) " .
                             " VALUES('$SubscriberName', '$SubscriberEmail', '$SubscriberDate')";
                $QueryResult = @mysql_query($SQLstring, $DBConnect);
                if ($QueryResult === FALSE) {
                    echo "<p>Unable to insert the values into the subscriber table.</p>" .
                        "<p>Error code " . mysql_errno($DBConnect) . ": " .
                        mysql_error($DBConnect) . "</p>";
                }else{
                $SubscriberID = mysql_insert_id($DBConnect);
                echo "<p>" . htmlentities($SubscriberName) . ", you are now subscribed to our
                     newsletter.<br />";
                echo "Your subscriber ID is $SubscriberID.<br />";
                echo "Your email address is " . htmlentities($SubscriberEmail) . ".</p>";
                }
                mysql_close($DBConnect);              
            }
        }else{
            $ShowForm = TRUE;
        }

        //CODE ABOVE IS THE SAME AS THE COMMENTED OUT CODE TOWARDS THE END. NOT SURE WHERE IT GOES.
    }else{
        $ShowForm = TRUE;
    }

    /* CODE BELOW IS SAME AS THE CODE BETWEEN THE COMMENTS ABOVE, BUT NOT SURE WHERE IT BELONGS

    if ($FormErrorCount == 0) {
        $ShowForm = FALSE;
        include("inc_db_newsletter.php");
        if ($DBConnect !== FALSE) {
            $TableName = "subscribers";
            $SubscriberDate = date("Y-m-d");
            $SQLstring = "INSERT INTO $TableName (name, email, subscribe_date) " .
                         "VALUES ('$SubscriberName', '$SubscriberEmail', '$SubscriberDate')";
            $QueryResult = @mysql_query($SQLstring, $DBConnect);
            if ($QueryResult === FALSE) {
                echo "<p>Unable to insert the values into the subscriber table.</p>" .
                     "<p>Error code " . mysql_errno($DBConnect) . ": " .
                     mysql_error($DBConnect) . "</p>";
            }else{
                $SubscriberID = mysql_insert_id($DBConnect);
                echo "<p>" . htmlentities($SubscriberName) . ", you are now subscribed to our
                     newsletter.<br />";
                echo "Your subscriber ID is $SubscriberID.<br />";
                echo "Your email address is " . htmlentities($SubscriberEmail) . ".</p>";
            }
            mysql_close($DBConnect);              
        }
    }else{
        $ShowForm = TRUE;
    }

    */CODE ABOVE IS SAME AS THE CODE BETWEEN THE COMMENTS ABOVE SECTION, BUT NOT SURE WHERE IT BELONGS

//HTML PORTION  
    if ($ShowForm) {
        ?>
        <form action = "NewsletterSubscribe.php" method = "POST">
            <p><strong>Your Name: </strong>
                <input type = "text" name = "SubName" value = "<?php echo $SubscriberName; ?>" /></p>
            <p><strong>Your Email Address: </strong>
                <input type = "text" name = "SubEmail" value = "<?php echo $SubscriberEmail; ?>" /></p>
            <p><input type = "Submit" name = "Submit" value = "Submit" /></p>
        </form>
        <?php
    }

?>

最佳答案

您的代码(暂时忽略最后的 ShowForm 部分)的结构如下:

if this is a submit {
    validate the form data
    if there are no errors {
        save the form data
    }
}

这看起来很合理。也许您的表单没有作为 POST 提交?检查您的<form action>并使用 Firebug 确保表单数据正在提交。

如果您要移动错误检查,您将:

if this is a submit {
    validate the form data
}
if there are no errors {
    save the form data
}

这是错误的,因为如果没有提交表单,那么就不会出现错误(因此会出现“ undefined variable ”错误),然后它会尝试保存不存在的表单数据。

关于php - 多合一网络表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566929/

相关文章:

mysql - SQL 查询的最新日期

php - yii\base\ErrorException - 找不到类 'app\controllers\EntryForm'

php - 在azure网站上存储文件但不打开php

php - 错误处理程序包

PhP curl simple_dom_document 请求从 snowbird.com 获取雪数据

javascript - JS 中的自定义链接处理(无后续)

html - 获取元素以使用可用的最大宽度,具体取决于元素的实例数量

mysql - 无法使用 INSERT 和检索 SQL 条目?

php - 为什么 ORDER BY 子句中的绑定(bind)参数不对结果进行排序?

mysql - 如何加快或改进此查询?