我已经制作了两个表格 - 一个用于登录,如果用户已经注册,另一个用于注册。用户日期我以这种方式保存到date.txt文件名:Peter,login:pet123,pass:12345 |名称:John,登录名:joh123,传递:54321等,我还没有使用DB。 这是它
<form action="#" method="post" id="user_new" class="user_new">`<br/>
<label for="name">Name:</label><input type="text" name="name" id="name" required/>
<label for="username">Username:</label><input type="text" name="username" id="username" required />
<label for="password">Password:</label><input type="password" name="password" id="password" required/>
<input type="image" src="img/singUp.png" name="signUp" />
</form>
登录的第二种形式
<form action="#" method="post" id="login" class="login">
<label for="username">Username:</label><input type="text" name="username" id="username" required="required" />
<label for="password">Password:</label><input type="password" name="password" id="password" required="required"/>
<input type="image" src="img/singIn.png" name="signIn" />
<a href="registration.php" class="custom_link">Registrate Now</a>
</form>
用于登录的php
if (isset($_POST['singIn'])):
$users = file('date.txt');
foreach ($users as $key => $value)
{
$user = explode('|', $value);
$use = explode(',', $user);
$us = explode(':', $use);
unset($us['name'], $us['username'], $us['password']);
}
if (!in_array(trim($_POST['username']), $us)) die('There is no user with this username');
endif;
但是这段代码不起作用?有什么问题? 第二个问题,为什么当我写
if(isset($_POST["signUp"])):
$name = $_POST["name"];
$uname = $_POST["username"];
$upass = $_POST["password"];
$users = fopen("date.txt", "a") or die("Couldn't open date.txt for add record");
$record ="name:".$name . ",username:" .$uname . ",password:" . $upass . "|";
fwrite($users,$record) or die ("Couldn't add record");
fclose($users);
endif;
代码不起作用,但它没有isset工作。在第二种情况下,我得到双重记录
答案 0 :(得分:2)
您没有使用explode
正确处理字符串和数组。 explode
拆分一个字符串并返回一个组件字符串数组,因此$user = explode('|', $value)
生成一个数组;在{em>数组字符串上使用explode
(例如explode(',' $user)
)将无效。
您需要做的是引入嵌套循环;像这样的东西:
foreach ($users as $line)
{
// Iterate over all the records in the file.
$records = explode('|', $line);
foreach ($records as $record)
{
// Iterate over all the fields in this record and extract the user's details.
$fields = explode(',', $record);
$user = array();
foreach ($fields as $field)
{
list($key, $value) = explode(':', $field);
$user[$key] = $value;
}
// Now check whether this user matches the details in $_POST.
// ...
}
}
我建议,不要在文件中按|
分隔记录,而是每行只有一条记录。这样可以使解析变得更加简单,因为file
会自动为您提供文件中所有记录的数组(每行一个)。
答案 1 :(得分:2)
你最大的问题是拼写。此代码中有多个实例使用'singIn'或'signIn'和'singUp'或'signUp'。只要你总是使用它就没关系。
<input type="image" src="img/singIn.png" name="signIn" />
是您的输入名称=“ signIn ”。
if (isset($_POST['singIn'])):
是您的帖子值' singIn ',他们必须匹配。