[从0开始]PHP+phpstudy留言板项目搭建教程及报错详析

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: PHP是在服务器端执行的脚本语言,适用于Web开发并可嵌入HTML中。学习网站:PHP教程 | 菜鸟教程

基础知识及工具准备

基础知识:四种语言

PHP

PHP是在服务器端执行的脚本语言,适用于Web开发并可嵌入HTML中。

学习网站:PHP教程 | 菜鸟教程


SQL

SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

该留言板项目后端逻辑主要由PHP及SQL实现,读者掌握SQL增删改查语句即可。

学习网站:SQL教程 | 菜鸟教程


HTML

HTML是一种标记语言,它通过一系列标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。

CSS语言常嵌入HTML中,为HTML文档添加样式。为突出本文的目的性,此项目不再添加CSS语言。读者可自行探索学习。

HTML学习网站:HTML教程 | 菜鸟教程

CSS学习网站:CSS教程 | 菜鸟教程


JavaScript

留言板是一个Web项目。HTML 定义了网页的内容,CSS 描述了网页的布局,而JavaScript 控制了网页的行为。此项目运用Javascript实现弹出对话框以回显注册、登录、留言进程。

JavaScript学习网站:JavaScript教程 | 菜鸟教程


工具准备:Vscode

常用的PHP开发工具有PhpStorm、SublimeText、Zend Studio、Vscode等,本文使用Vscode进行实例分析。

官网安装地址:Visual Studio Code

官方文档地址:Vscode Docs

Vscode教程:Vscode教程 | 菜鸟教程


工具准备:PhpStudy

PhpStudy是一个PHP调试环境的程序集成包,集成最新的Apache、PHP、MySQL、phpMyAdmin、ZendOptimizer,安装后无须配置即可使用。

官网安装地址:PhpStudy Download


配置PHP环境

打开PhpStudy,启动WAMP


2da6aa5939f74651a7f073753d991382.png2.点击左侧栏中的软件管理,安装一个较高版本的PHP

0451d02bea6649119accf5cbc897635e.png3.安装完成后进入右侧的设置,进入扩展组件页面,打开XDebug调试组件,并记下端口17d946a132a64db189a01c6eda23e258.png

4.点击左侧的网站,点击右侧管理,再打开根目录,接着返回上一级文件夹打开Extensions文件夹,进入php文件夹,再进入安装的php所对应的文件夹,找到php.exe,记住该php.exe的路径


d5872f527c1f413b81fd49f4eb95dcb0.png

03193d26c76b4206a9cf0c1eb7cb3f8d.png5.点击设置搜索PHP,点击在settings.json中编辑

044c6854aa3c485595da91682ee3af5a.png在{}中添加如下代码并保存 注意:路径的\应替换为/

  "php.validate.executablePath":  "php.exe的路径",
    "php.executablePath": "php.exe的路径",   
   例如
   "php.validate.executablePath":  "D:/Software/PhpStudy/Extensions/php/php7.3.4nts/php.exe",
   "php.executablePath": "D:/Software/PhpStud/Extensions/php/php7.3.4nts/php.exe",
————————————————
版权声明:本文为CSDN博主「秋说」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2301_77485708/article/details/130024566

6.点击此电脑,右键打开属性,依次点击高级系统设置环境变量,双击打开系统变量中的Path,点击新建,输入php.exe所在文件夹的路径,点击确定

cd5c208a257545c691fc9b699b9a14b9.png路径举例:D:\Software\PHPStudy\phpstudy_pro\Extensions\php\php7.4.3nts

a11c8f03a3c84db7a9bd9eaab7b49a28.png

  1. 7.创建一个PHP文件,检验环境是否配置成功。
    代码如下:
  2. echo"秋说";?>
  3. 依次点击命令中心运行启动调试
  4. 20fd6fcabff340a0923675b69dfa0159.png若下方的调试控制台回显秋说,则说明PHP环境搭建成功。

环境搭建过程中若存在问题,可自行使用Google、百度寻找解决方案或在评论区留言。


项目搭建

留言板功能模块

注册功能:实现用户注册及注册验证

登录功能:实现用户登录及登录验证

留言功能:实现用户名、留言内容、留言时间在页面的输出

登出功能:实现用户的登出 服务器端清除登录信息

管理功能:实现数据的增删改查


注册功能前端

大体框架:用户名栏 密码栏 注册按钮 登录页面超链接

本文采用形式简单的前端页面以简化代码、降低阅读难度,读者可自行优化前端页面或采用前端框架。

打开phpstudy/WWW文件夹,新建registerfront.php,代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
</head>
<body>
<div>
<h1>用户注册</h1> 
<form  action="registerend.php" method="post" onsubmit="return check()">   <!--当用户离开输入字段时执行JavaScript-->
        用户名:<input type="text" name="name">  
        <br><br>
        密码:<input type="password" name="pass">
        <br><br>
        <input type="submit" value="提交">
        <br><br>
        <a href="loginfront.php">登录页面</a>
        </form>
    <script>
    function check()//用户验证
    {
        let name = document.getElementsByName('name')[0].value.trim();
        let pass = document.getElementsByName('pass')[0].value.trim();
        let nameReg = /^[a-zA-Z0-9\u2E80-\uF999]{1,20}$/;
        if(!nameReg.test(name))//检测name是否匹配nameReg
        {
            alert('用户名不能出现特殊字符!');
            return false;
        }
        let passreg = /^[a-zA-Z0-9]{6,20}$/;
        if(!passreg.test(pass))
        {
            alert('密码不能出现特殊字符,且不得少于六位数!'); 
            return false;}
        return true;   }
</script>
    </div>
        </body>
            </html>
————————————————
版权声明:本文为CSDN博主「秋说」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2301_77485708/article/details/130024566

实现页面打开功能: Open PHP/HTML/JS In Browser

  1. 在Vscode中搜索、安装扩展Open PHP/HTML/JS In Browser

image.png

在phpstudy/WWW文件夹中新建settings.json输入如下代码

image.png


{

   "open-php-html-js-in-browser.customHost": "127.0.0.1",  //本地域名

   "open-php-html-js-in-browser.customUrlToOpen": "http://host/{host}/{relativeDirnameDocumentRoot}/${fileBasename}",

   "open-php-html-js-in-browser.documentRootFolder": "D:/Software/PHPStudy/phpstudy_pro/WWW/"  //站点的绝对路径

}


文件保存后,点击设置,搜索@ext:PrimaFuture.open-php-html-js-in-browser,选择图示复选框中的custom即可。

image.png

回到registerfront.php页面,单击鼠标右键,点击Open PHP/HTML/JS In Browser

image.png

image.png

注册功能后端

大体框架: 设置数据库参数 连接数据库 获取表单数据 注册验证 插入数据 跳转登录前端

image.png

PhpStudy设置数据库参数

下述步骤以数据库名称:qiushuo,用户名:qiushuo, 密码:qiushuo 为例


PhpStudy数据库工具新建表及字段

在软件管理中安装phpMyAdmin

image.png

依次点击首页、数据库工具、phpMyAdmin

image.png

输入数据库用户名、密码后进入数据库操作页面,新建两张数据表。

具体方法参考管理功能模块或自行使用Google、百度学习探索。


一张为user,包含id,name,pass字段,与用户注册登录有关;

一张为content,包含id、name,text、createtime字段,与留言实现有关。

user表:

image.png

content表:

image.png

功能实现

第一次提交数据时,id默认为1;此后每插入一次数据,id自增。

步骤:


在右侧的更多复选框中点击主键

image.png

执行SQL语句

输入ALTER TABLE user(表名) MODIFY COLUMN id INT AUTO_INCREMENT; 点击执行

若页面回显如下图所示,则说明功能实现执行成功:

image.png

image.png

功能实现步骤在content表中与user表一致,不再赘述。

注意SQL语句不要写错对应的表名

连接数据库

在phpstudy/WWW文件夹中新建conn.php,代码如下:


$servername="localhost";

$username="qiushuo";//替换为具体的数据库用户名

$password="qiushuo";//替换为具体的数据库密码

$dbname="qiushuo";//替换为具体的数据库名称

conn=mysqliconnect(conn=mysqli_connect(servername,username,username,password,$dbname);//连接数据库

mysqli_query($conn, "SET NAMES UTF-8");//设置字符集

?>


在phpstudy/WWW文件夹中新建registerend.php,代码如下:



name=name=_POST['name'];  
pass=pass=_POST['pass'];   //获取表单数据
    include_once "conn.php";   //运行conn文件,即连接数据库
   sql="SELECTFROMuserWHEREname=′sql="SELECT FROM user WHERE name='name'";
   result=mysqliquery(result=mysqli_query(conn,注册时sql);//注册时sql);//注册时result若能在数据库中匹配到结果,则回显用户名存在
   num=mysqlinumrows(num=mysqli_num_rows(result);
    if($num)
    {
    echo "alert('输入的用户名已经存在,请重新输入。'); history.back();";//history.back用于返回到上一个页面
    exit;
    }
    else{
   sql="INSERTINTOuser(name,pass)values(′sql="INSERT INTO user(name,pass) values('name','$pass')";
   result=mysqliquery(result=mysqli_query(conn,$sql);
    }
    if($result)
{
    echo "alert('注册成功,请登陆');location.href='loginfront.php';";
    //若注册成功,则跳转到loginfront.php页面。
}
else{
    printf("Error: %s\n", mysqli_error($conn));
}


查看是否成功连接数据库

在conn.php中添加如下代码即可在提交后通过页面回显查看是否成功连接数据库

if($conn)

{

   echo"alert('连接数据库成功');";

}

else{

   echo"alert('连接数据库失败');";

}


image.png

image.png

由下图前端回显可知,数据库连接成功:至此,注册功能告一段落。

image.png

登录功能前端

大体框架:用户名栏 密码栏 登录按钮 注册页面超链接

本文采用形式简单的前端页面以简化代码、降低阅读难度,读者可自行优化前端页面或采用前端框架。

在phpstudy/WWW文件夹中新建loginfront.php,代码如下:

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
</head>
<body>
    <div>
        <h1>用户登录</h1>
    <form action="loginend.php" method="post" >  //提交表单至loginend.php
    用户名:<input type="text" name="name" >
    密码:<input type="password" name="pass">
    <input type="submit" value="登录"> 
    <br><br>
    <a href=registerfront.php><h2>返回注册页面</h2></a>
</form>               
    </div>
        </body>
            </html>


         

登录功能前端

大体框架:用户名栏密码栏登录按钮注册页面超链接

本文采用形式简单的前端页面以简化代码、降低阅读难度,读者可自行优化前端页面或采用前端框架。

在phpstudy/WWW文件夹中新建loginfront.php,代码如下:

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
</head>
<body>
    <div>
        <h1>用户登录</h1>
    <form action="loginend.php" method="post" >  //提交表单至loginend.php
    用户名:<input type="text" name="name" >
    密码:<input type="password" name="pass">
    <input type="submit" value="登录"> 
    <br><br>
    <a href=registerfront.php><h2>返回注册页面</h2></a>
</form>               
    </div>
        </body>
            </html>

image.png


登录功能后端

大体框架:连接数据库 获取表单数据 登录验证 跳转留言页面前端

在phpstudy/WWW文件夹中新建loginend.php,代码如下:


<?php
    include_once "conn.php";
if($_SERVER["REQUEST_METHOD"] == "POST") { //规定传参方式
  $name=$_POST["name"];
  $pass=$_POST["pass"];
  $sql="SELECT * FROM user WHERE name='$name' AND pass='$pass'"; 
  //使用SQL语句将参数与数据库进行匹配
  $result=mysqli_query($conn, $sql);
  if (mysqli_num_rows($result) == 1) { 
  //如果匹配成功,mysqli_num_rows被赋值为1 
    echo"<script>alert('登录成功');location.href='messagefront.php';</script>";  
    //若登录成功,则跳转到留言前端页面
  } else {
    //验证失败
    echo"<script>alert('登录失败,用户名或密码错误!');history.back();</script>";
  }
}
?>


image.png


留言功能前端

大体框架:输入框 提交按钮

本文采用形式简单的前端页面以简化代码、降低阅读难度,读者可自行优化前端页面或采用前端框架。

在phpstudy/WWW文件夹中新建messagefront.php,代码如下:

<?php
session_start();  //开启会话
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>留言</title>
</head>
<body>
    <div>
    <form action="messageend.php" method="post" >        
    <textarea name="text" cols="30" rows="10"></textarea>
    <input type="submit" value="提交" >
        </form>
    </div>
</body>
    </html>


  留言


  image.png

         

 

 

     

 

 





留言功能后端

大体框架:session检测 获取表单数据 插入数据 遍历数据 留言输出

在phpstudy/WWW文件夹中新建messageend.php,代码如下:


include 'conn.php'; 
session_start();// 检查用户是否已登录
if (!isset($_SESSION['name'])) {
    echo "alert('请先登录');";
    exit();
}
   name=name=_SESSION['name'];  //获取已登录的用户名
  text=text=_POST['text'];     //获取已提交的留言内容
  $createtime=date('Y-m-d H:i:s');   //设置留言时间
    if(!strlen($text))
{
    echo "alert('留言不可为空');";
    exit;
}
sql="INSERTINTOcontent(name,text,createtime)VALUES(′sql="INSERT INTO content(name,text,createtime) VALUES ('name','text′,′text', 'createtime')";  
//插入用户名、留言内容、留言时间到数据库
result=mysqliquery(result=mysqli_query(conn,$sql);
if($result){
$query = "SELECT * FROM content ORDER BY id DESC";
result=mysqliquery(result = mysqli_query(conn, $query);  
// 如果插入数据成功,则遍历留言列表并在前端输出
while (row=mysqlifetcharray(row = mysqli_fetch_array(result)) { 
    echo "
";   //PHP与HTML包含
    echo "
" . $row['text'] . "
";
    echo "
" . 发表于row[′name′]."发表于".row['name'] . " 发表于 " . row['createtime'] . "
";
    //在"发表于"左右添加空格 使回显的页面内容清晰
    echo "
";//起留言页面的分割作用
    echo "
";
       }
    }
else {
echo "alert('留言失败');history.back();";
    }
?>


要使时间后的000000消失,可以将createtime字段中的DATETIME长度/值更改为0

image.png

image.png

登出功能前端

大体框架:前端登出按钮及登出弹窗

在messagefront.php中输入如下代码:

image.png

退出登录


</div><div>  function logout() {   //用axio.post()方法向登出后端文件发送一个POST请求</div><div>    axios.post('/logout.php')</div><div>  }</div><div>



登出功能后端

在phpstudy/WWW目录新建logout.php,代码如下:


session_start();

   // 在服务器端清除掉用户的登录信息

   unset($_SESSION['name']);

   echo "alert('登出成功');location.href='loginfront.php';";

   exit;



image.png


管理功能

该项目基于Phpstudy的数据库工具phpMyAdmin,可使用该工具以Web 图形模式直接管理 MySQL 数据库。


新建数据表

image.png

定义数据表中字段

image.png

更改数据表结构

image.png

插入数据

image.png

执行SQL语句

image.png

以上功能服务于该项目的搭建,其它功能读者可自行探索。


至此,PHP+phpstudy留言板项目搭建教学完成,希望读者躬行实践。


报错详析

为了更好地定位问题,可以在执行SQL语句之前加入mysqli_ error()函数来查看错误信息,例如:


$result = mysqli_query($conn, $sql);

if (!$result) {

   printf("Error: %s\n", mysqli_error($conn));

   exit();

}


报错实例:


Error: Field 'ID' doesn't have a default value

报错原因:将ID设置为主键,但未设置为自增,导致增加数据后不能获取生成新的主键。

解决方法:参考本文功能实现模块


Error: Duplicate entry '1' for key 'PRIMARY'

报错原因:id已设置为主键,在注册模块中试图将第一个数据的id赋值为1,从而实现从1开始的自增,但该SQL插入语句存在逻辑错误。

如图:

image.png

第16行的语句使得程序在每次注册插入新的数据后,都会让该用户的id变为1,导致出现重复键。

解决方法:删除该语句中的id及1,程序默认从id=1开始自增。


注册不同的用户,但在phpMyAdmin中增加的都是同一个管理员账号数据

报错原因:后端文件包含了conn.php,conn.php代码如下:

image.png


若前端文件中定义的用户名也为username:


include_once "conn.php";

$sql="INSERT INTO user(username,password) values('$username','$password')";


在包含运行conn.php文件后,通过POST提交的username会被conn.php中的username覆盖,password同理。若注册后端逻辑不严谨,会造成管理员账号密码被多次提交至数据库。

总结

以上为PHP+phpstudy留言板项目搭建教程及报错详析实例。读者可以通过此留言板项目教程更好地认识前端与后端的区别与联系。


我是秋说,我们下次见。



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
Java 程序员 PHP
01 入门PHP就来我这-安装phpstudy
路老师的PHP入门教程,带你从零开始学习PHP。首先下载并安装phpStudy,接着配置域名和端口,最后创建并运行第一个PHP文件。内容详实,适合初学者。
47 3
01 入门PHP就来我这-安装phpstudy
|
1月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
2月前
|
tengine 应用服务中间件 Linux
Tengine、Nginx安装PHP命令教程
要在阿里云Linux上安装PHP,请先更新YUM源并启用PHP 8.0仓库,然后安装PHP及相关扩展。通过`php -v`命令验证安装成功后,需修改Nginx配置文件以支持PHP,并重启服务。最后,创建`phpinfo.php`文件测试安装是否成功。对于CentOS系统,还需安装EPEL源和Remi仓库,其余步骤类似。完成上述操作后,可通过浏览器访问`http://IP地址/phpinfo.php`测试安装结果。
|
2月前
|
应用服务中间件 Shell PHP
pbootcms模板报错提示PHP Warning: Unknown: open_basedir restriction
pbootcms模板报错提示PHP Warning: Unknown: open_basedir restriction
|
3月前
|
PHP Windows
thinkPhP6.0安装教程图解--PHP框架安装
本文是一篇关于ThinkPHP 6.0安装教程的图解,包括环境检查、安装Composer、修改Composer镜像地址、安装ThinkPHP框架以及启动运行ThinkPHP的步骤。文章详细描述了每个步骤的操作方法,并提供了相应的命令和截图,帮助用户理解并顺利完成ThinkPHP 6.0的安装和运行。
thinkPhP6.0安装教程图解--PHP框架安装
|
4月前
|
Linux PHP
Linux CentOS 宝塔 Suhosin禁用php5.6版本eval函数详细图文教程
【8月更文挑战第27天】本文介绍两种禁用PHP执行的方法:使用`PHP_diseval_extension`禁用和通过`suhosin`禁用。由于`suhosin`不支持PHP8,仅适用于PHP7及以下版本,若服务器安装了PHP5.6,则需对应安装`suhosin-0.9.38`版本。文章提供了详细的安装步骤,并强调了宝塔环境下与普通环境下的PHP路径差异。安装完成后,在`php.ini`中添加`suhosin.so`扩展并设置`executor.disable_eval = on`以禁用执行功能。最后通过测试代码验证是否成功禁用,并重启`php-fpm`服务生效。
62 2
|
4月前
|
PHP
PHP——oneinstack重新安装PHP的时候报错
PHP——oneinstack重新安装PHP的时候报错
76 4
|
4月前
|
存储 关系型数据库 MySQL
PHP中实现简易留言板
【8月更文挑战第31天】本篇文章旨在通过一个简易的留言板项目,带领读者了解PHP在Web开发中的应用。文章将介绍如何搭建一个基础的MySQL数据库,并使用PHP进行数据的增删查改操作。通过实例演示,读者能够掌握PHP与数据库交互的基本方法,以及如何处理表单提交的数据。
|
4月前
|
SQL 关系型数据库 MySQL
PHP与MySQL交互之基础教程
【8月更文挑战第31天】 在数字世界中,数据是推动一切的核心力量。本文将引导你探索PHP与MySQL的协同工作,通过实际代码示例,展示如何建立连接、执行查询以及处理结果集。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你提供宝贵的实践知识。
|
4月前
|
网络协议 API PHP
PhalApi:在宝塔一键安装部署PHP开源接口框架的教程
要在宝塔面板上一键安装部署PhalApi开源接口框架,首先进入宝塔软件商店,切换到“一键部署”选项,搜索“phalapi”并点击“一键部署”。安装时需填写接口域名、数据库名及密码,提交后等待安装完成。安装成功后可在宝塔面板中查看新站点和源代码目录,并通过DNS解析设置访问接口域名,如`http://myapi.phalapi.net/`。默认开启的调试模式便于测试,可通过修改`config/sys.php`中的`debug`值为`false`关闭。最后,在源代码中开发自己的PHP接口,PhalApi会自动生成在线接口文档,方便后续调用与维护。更多详细教程可参考官方文档。