新手在这里学习PHP / MySQL。

当我用数据填写表单字段时,它可以正常工作并将数据插入数据库。

当我将表单保留为空白,然后单击“ ADD RECORD”按钮时,我希望$ temp的值为空,但不会为(echos as =1),并且"$_POST['firstname'])"回显为空白-我认为这应该导致$temp评估为null并跳过"if..."数据库插入。但是,将创建一个空记录(text fields blank, userlevel=1)。为什么$temp不等于“ null”?

另外,每次我使用浏览器的刷新按钮重新加载脚本时,该程序似乎都会记住表单中的最后一个条目,并创建相同的另一条记录。我本以为"$_POST = array();"会清除所有这些数据,返回空值,而不创建任何新条目。如果我在这里有一些澄清会有所帮助。提前致谢。

代码如下:

<?php
//member table query - dbmemberquery.php
require_once 'dbconnect.php';

//form for data entry
echo <<<_END
<form action="dbmemberquery.php" method="post"><pre>
    Firstname   <input type="text" name="firstname" />
    Lastname    <input type="text" name="lastname" />
    Email       <input type="text" name="email" />
    Password    <input type="text" name="password" />
    Userlevel   <input type="text" name="userlevel" />
                <input type="submit" value="ADD RECORD" />
</pre></form>
_END;

//inserting records into member table
function get_post($var)
    {
        return mysql_real_escape_string($_POST[$var]);
    }

//check if all fields are filled in on the form
$temp = (isset($_POST['firstname']) &&
    isset($_POST['lastname']) &&
    isset($_POST['email']) &&
    isset($_POST['password']) &&
    isset($_POST['userlevel']));

//debug only - check values
echo "_post value for firstname = ".$_POST['firstname']."<br />";
echo "isset _post value =" .(isset($_POST['firstname']))."<br />";
echo "temp variable =".$temp."<br />";

if ($temp)
    {

        $firstname  = get_post('firstname');
        $lastname   = get_post('lastname');
        $email      = get_post('email');
        $password   = get_post('password');
        $userlevel  = get_post('userlevel');


        $query2 = "INSERT INTO sc2.members(firstname, lastname, email,password,userlevel)".
        "VALUES ('$firstname','$lastname','$email','$password','$userlevel')";

        if (!mysql_query($query2, $db_server))
            echo "INSERT failed: $query2<br />" .
            mysql_error() . "<br /><br />";

        $_POST = array();

    }

$_POST = array();


$query = "SELECT * FROM sc2.members";
$result = mysql_query($query);
if (!$result) die ("Database access failed: ". mysql_error());
$rows = mysql_num_rows($result);
//shows number of rows in member table
echo "rows: ".$rows . '<br />'.'<br />';

//lists all of the members
for ($j = 0; $j < $rows ; ++$j)
{
    $row = mysql_fetch_row($result);
    echo 'ID: '         . $row[0] . '<br />';
    echo 'firstname: '  . $row[1] . '<br />';
    echo 'lastname: '   . $row[2] . '<br />';
    echo 'email: '      . $row[3] . '<br />';
    echo 'password: '   . $row[4] . '<br />';
    echo 'userlevel: '  . $row[5] . '<br />';
    echo '<br />';
}

mysql_close($db_server);

最佳答案

当我将表单保留为空白,然后点击“添加记录”按钮时,我希望$ temp的值为空,


不,这些字段采用表格形式,因此已被设置,它们只是设置为空字符串。

使用empty(并且可以将其与更具体的内容(例如正则表达式)结合使用)代替is_set


  我本以为“ $ _POST = array();”将会清除所有这些数据,返回null,并且不会创建任何新条目。


不。这将清除PHP变量中的数据。

刷新浏览器时,浏览器会记住表单的内容并重新提交,PHP程序从头开始运行,PHP用新的数据副本填充$_POST

使用post-redirect-get pattern避免重新提交数据。

10-07 12:43
查看更多