为什么要删除两个php文件之间的数据?

时间:2014-04-01 07:26:44

标签: php html forms validation

我有一个php表单。用户尝试填写表单。当其中一个字段遗漏时,我希望将数据保存在其他字段中,并要求它们仅填写缺少的字段。我从两个领域开始。 我有3个文件。一个是global.php,它正在保存数据:

<?php

    $name;
    $name = "";

    global $email;
    $email = "";
?>

第二个是我带名字的部分:

<?php include_once('global.php');?>
    <label>

        <span>Username:</span>

        <input id="name" type="text" name="username" value ="<strong><?php  echo $name;?></strong>" placeholder="Enter your user name" maxlength="20" />
    </label>

3rd是处理数据并检查验证的php文件:

include_once('global.php'); 
if (empty($_POST["username"]) || strlen($_POST["username"]) > 30)
    {
        $GLOBALS['nameErr'] = "Name is required";
        header('Location: registration.php');
    }
else
    {
        $GLOBALS['name'] = test_input($_POST["username"]);
        // check if name only contains letters and whitespace
        if (!preg_match("/^[a-zA-Z ]*$/",$name))
        {
            $GLOBALS['nameErr'] = "Only letters and white space allowed";
            header('Location: registration.php');            
        }
    }

当用户填写表单并错过电子邮件地址并按下注册按钮时,它将删除已在名称字段中输入的数据。但名称是全球名称,并已更改。我想知道这个什么时候改变了?我的第二个问题是当我包含一个文件时,我会再次在包含文件中初始化变量,或者它们仍然存在?

在Barif的想法之后我将其改为:

<label>
    <span>Username:</span>
    <input id="name" type="text" name="username" value ="<?php echo "$_SESSION['name']  ;?>" placeholder="Enter your user name" maxlength="20" />
</label>

但它说&#34;未定义索引:名称&#34;

最后我发现了问题。当我定义$ _SESSION [&#39; name&#39;]时,我将其分配给&#34;&#34;所以它是&#34;&#34;一直以来。

3 个答案:

答案 0 :(得分:3)

$ GLOBALS不在HTTP查询之间存储数据,您应该使用session在请求之间存储数据

include_once('global.php'); 
    if (empty($_POST["username"]) || strlen($_POST["username"]) > 30) {
        $_SESSION['nameErr'] = "Name is required";
        header('Location: registration.php');
    } else {
        $_SESSION['name'] = test_input($_POST["username"]);
        // check if name only contains letters and whitespace
        if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
            $_SESSION['nameErr'] = "Only letters and white space allowed";
            header('Location: registration.php');            
        }
    }

此外,您应该在registration.php中启动会话session_start()

如果定义了变量,则需要检查表单:

<label>
    <span>Username:</span>
    <input id="name" type="text" name="username" value ="<?php echo isset($_SESSION['name']) : $_SESSION['name'] ? '';?>" placeholder="Enter your user name" maxlength="20" />
</label>

答案 1 :(得分:3)

当您查看表单(第二个php文件)时,您再次包含globals.php,这会将$name值覆盖为空字符串。

关于你的第二个问题,当你包含一个文件时,你会得到所有变量,你不需要再次初始化它们。

答案 2 :(得分:2)

试试这个。

而不是使用全局等...

假设您将表单提交到表单所在的同一文件中。

为什么不使用$ _POST变量本身。

<input id="name" type="text" name="username" value ="<?php if(isset($_POST['username'])) echo $_POST['username']; ?>" placeholder="Enter your user name" maxlength="20" />

我会找一些例子

addusername.php

<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
         //DO QUERY HERE
         echo "You submitted something!<br/>"; 
}

?>
<form name='myForm' action='<?php echo $_SERVER['PHP_SELF']; ?>' method='post'>
     Username: <input type='text' name='username' value='<?php if(isset($_POST['username'])) echo $_POST['username']; ?>' /><br/>
     Email: <input type='text' name='email' value='<?php if(isset($_POST['email'])) echo $_POST['email']; ?>' /> <br/>
     <input type='submit' value='Submit' />

</form>

试试吧。将其保存在php文件中然后尝试填写1个文本字段然后点击提交。 其他字段的数据不会丢失。 :)