我有一个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;一直以来。
答案 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个文本字段然后点击提交。 其他字段的数据不会丢失。 :)