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>
|