Abstract: 新闻界面新增用户登录和注册功能,以及在编写过程中遇到的问题与解决

一、用户登录

1.用户登录界面 signin.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
<head>
<title>
登录
</title>
</head>
<body>
<br><br><br>
<h1 align="center">登录</h1>
<div align="center">
<br>
<form action="login.php" method="post">
<input type="tel" name="phonenumber" placeholder="手机号">
<br>
<input type="password" name="password">
<br>
<a href="signup.php">注册账号</a>
<br>
<input type="submit" name="submit" value="提交">
<br>
</form>
</div>
</body>
</html>

用户登录界面

2.账号和密码处理 login.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<html>
<head>
<title>
处理账号和密码
</title>
</head>
<body>
<?php
//打开存储用户信息的文件
$fhandle = fopen('./data/users.db', 'r');
//逐行读取数据
while(!feof($fhandle)) {
$InMes = fgets($fhandle);
$mesArray = explode('||', $InMes);
if(count($mesArray)!=2){
continue;
}
if(trim($mesArray[0])==$_POST['phonenumber'] && trim($mesArray[1])==$_POST['password']){
echo "正在进入后台";
echo <<<EOF
<script>location.href="./data/add_news.php"</script>
EOF;
break;
}
$flag = 1;
// else{
// echo "<script>alert('账号或密码错误!重新输入。')</script>";
// echo "<script>history.back()</script>";
// }
}
//修改逻辑问题
if($flag==1){
echo "<script>alert('账号或密码错误!重新输入。')</script>";
echo "<script>history.back()</script>";
}
?>

</div>
</body>
</html>

逻辑问题:注释掉的是第一次写完的,但判断逻辑是有问题的,逐行读取用户信息后,相同则跳回增加新闻界面,否则提示错误信息,重新输入账号或密码,这样会导致用户信息没有匹配成功前会一直报错。

解决方法:在用户读完文件前不做出错判断,读完再判断,在判断匹配成功语句后添加一个标志位flag若值为1说明用户没有匹配成功,直接报错。,返回用户登录界面重新输入密码。

格式问题:用户账号和密码匹配时一直匹配不对。

解决方法:用var_dump把数据输出发现是相同的,但还是匹配不成功,想想有可能需要用trim函数处理下数据。

二、用户注册

1.用户注册界面 signup.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<html>
<head>
<title>
注册账号
</title>
</head>
<body>
<div align="center">
<br><br><br>
<h2 align="center">注册用户</h2>
<form action="./checkSignUp.php" method="post">
手机:<input type="tel" name="phonenumber"placeholder="手机号">
<br>
密码:<input type="password" name="password">
<br>
确认:<input type="password" name="checkpasswd">
<br>
<input type="submit" name="submit" value="提交">
</form>
</div>
</body>
</html>

用户注册

2.用户注册数据处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$fhandle = fopen('./data/users.db', 'a+');
$userMes = array();
@$userMes[0] = $_POST['phonenumber'];
@$userMes[1]=$_POST['password'];
$inMes = implode('||', $userMes);
// var_dump($inMes);
if(count($userMes)==2) {
fputs($fhandle, $inMes . "\n");
fclose($fhandle);
echo "<script>alert('用户注册成功')</script>";
echo "<script>location.href='signin.php'</script>";
}
?>

注册成功自动跳转到用户登录界面

三、添加新闻界面 add_news.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<html>
<head>
<meta charset="UTF-8">
<title>增加新闻</title>
</head>

<body>
<form action="add_news.php" method="post">
标号:<input type="number" name="id"><br>
标题:<input type="text" name="title"><br>
<!-- 标题:<input type="text" namne="title"><br>-->
内容:<input type="text" name="content"><br>
日期:<input type="date" name="date"><br>
作者:<input type="author" name="author"><br>
热度:<input type="number" name="hot"><br>
图片:<input type="url" name="imgUrl"><br>
<input type="submit" name="submit" value="提交">
</form>

<?php
$fhandle = fopen('news.db ', 'a');
$arrMes = array();
@$arrMes[0] = $_POST['id'];
@$arrMes[1] = base64_encode($_POST['title']);
@$arrMes[2] = base64_encode($_POST['content']);
@$arrMes[3] = $_POST['date'];
@$arrMes[4] = base64_encode($_POST['author']);
@$arrMes[5] = $_POST['hot'];
@$arrMes[6]= $_POST['imgUrl'];
if($arrMes[0]!=NULL) {
$writeMes = implode('||', $arrMes);
//echo $writeMes;
$fline = fputs($fhandle, "\n".$writeMes);
if($fline!=flase){
echo "<script>alert(\"新闻添加成功!\")</script>";
echo "<a href='../index.php'>点击查看</a>";
}
}
fclose($fhandle);
?>
<script>
function alertInfo(){
alert("新闻添加成功!")
}

</script>
</body>
</html>

四、展示新闻界面 index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<html>
<head>
<meta charset="UTF-8">
<title>news</title>
</head>

<body>
<br>

<h1 align="center">ICQ新闻中心</h1>
<hr>
<table align="center">
<tr>
<th>热度</th>
<th>标题</th>
<th>作者</th>
<th>时间</th>
<th>素质三联</th>
</tr>
<?php
//用只读方式打开news.db文件
$fhandle = fopen("./data/news.db", "r");
//设置一个计数器,小于3时,每个文章标题下面增加图片和简介
$top3Cnt=1;
while(!feof($fhandle)) {
$fline = fgets($fhandle);
$data = explode('||', $fline);
@$title = base64_decode($data[1]);
@$content = base64_decode($data[2]);
@$date = $data[3];
@$author = base64_decode($data[4]);
@$hot = $data[5];
@$imgUrl = $data[6];
echo <<<EOF
<tr align="center">
<td>$hot</td>
<td><a href="myl.php">$title</a></td>
<td>$author</td>
<td>$date</td>
<td><button>👍</button>/<button>👎</button></td>
</tr>
EOF;
if($top3Cnt<=3){
$tmpContent = mb_substr(base64_decode($data[2]), 0,50);
echo <<<EOF
<tr>
<td><img src="$imgUrl" height="80" width="80"></td>
<td colspan='4'><b>内容简介:</b>$tmpContent</td>
</tr>
EOF;
}
$top3Cnt++;
}
?>
</table>
</body>
</html>