PHP 完整表单实例 功能 用法运用 详解

news/2025/3/15 16:22:00/文章来源:https://www.cnblogs.com/baisemoshui/p/18773833

当然!下面是一个完整的 PHP 表单实例,包括 HTML 表单、表单验证以及处理表单数据的基本流程。这个实例展示了如何创建一个简单的用户注册表单,并验证用户输入的数据,然后将数据存储到 MySQL 数据库中。

1. 创建 HTML 表单

首先,创建一个包含基本用户信息的 HTML 表单。这个表单包括用户名、电子邮件和密码字段。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>用户注册表单</title>
</head>
<body><h2>用户注册</h2><form action="register.php" method="POST"><label for="username">用户名:</label><input type="text" id="username" name="username" required><br><br><label for="email">电子邮件:</label><input type="email" id="email" name="email" required><br><br><label for="password">密码:</label><input type="password" id="password" name="password" required><br><br><input type="submit" value="注册"></form>
</body>
</html>

2. 创建 PHP 处理文件 (register.php)

register.php 文件用于处理表单提交的数据,包括验证和存储数据到 MySQL 数据库中。

数据库配置

首先,配置数据库连接。请确保你已经创建了一个名为 testdb 的数据库,并且其中有一个名为 users 的表。

CREATE DATABASE testdb;USE testdb;CREATE TABLE users (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(30) NOT NULL UNIQUE,email VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL
);

register.php 代码

<?php
// 数据库配置
$servername = "localhost";
$username = "root"; // 请根据你的数据库配置进行修改
$password = ""; // 请根据你的数据库配置进行修改
$dbname = "testdb";// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);// 检查连接
if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);
}// 获取表单数据
$user = $_POST['username'];
$email = $_POST['email'];
$pwd = password_hash($_POST['password'], PASSWORD_BCRYPT); // 使用密码哈希存储密码// 表单验证
if (empty($user) || empty($email) || empty($pwd)) {echo "所有字段都是必填的。";
} else {// 检查用户名和电子邮件是否已存在$sql = "SELECT id FROM users WHERE username='$user' OR email='$email'";$result = $conn->query($sql);if ($result->num_rows > 0) {echo "用户名或电子邮件已存在。";} else {// 插入数据到数据库$sql = "INSERT INTO users (username, email, password) VALUES ('$user', '$email', '$pwd')";if ($conn->query($sql) === TRUE) {echo "注册成功!";} else {echo "注册失败: " . $conn->error;}}
}// 关闭连接
$conn->close();
?>

3. 功能和用法详解

  • HTML 表单: 创建一个简单的表单,包括用户名、电子邮件和密码字段,并使用 POST 方法提交到 register.php
  • 数据库连接: 使用 mysqli 扩展连接到 MySQL 数据库。
  • 表单验证:
    • 检查表单字段是否为空。
    • 使用 SQL 查询检查用户名和电子邮件是否已存在。
  • 密码哈希: 使用 password_hash 函数存储密码的哈希值,提高安全性。
  • 数据插入: 如果验证通过,将用户数据插入到数据库中。
  • 错误处理: 捕获并显示数据库连接和 SQL 查询中的错误。

4. 安全注意事项

  • SQL 注入防护: 本例中使用参数化查询(虽然在这个简单示例中通过拼接字符串实现,但在生产环境中建议使用预处理语句)。
  • 密码哈希: 使用 password_hashPASSWORD_BCRYPT 算法存储密码,确保密码安全。
  • 输入验证: 对用户输入进行适当的验证,防止跨站脚本(XSS)攻击。

这个示例是一个基础的实现,你可以根据实际需求进行扩展和优化,比如添加更多的字段、改进验证逻辑、使用预处理语句等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899247.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AP csa FRQ Q1 Past Paper 五年真题汇总 2023-2019

Author(wechat): bigshuang2020 ap csa tutor, AP计算机科学a老师 国际教育编程老师, 擅长答疑讲解,带学生实践学习。热爱创作,作品:ap csa原创教案,真题梳理汇总,FRQ专题冲刺。2023 FRQ Question 1 This question involves the appointmentBook class, which provides me…

自带弹窗-》删除功能提示

@Entry@Componentstruct AlertDialogPage { build() { Column() { Button(删除) .backgroundColor(Color.Red) .onClick(() => { AlertDialog.show( { title: 删除该记录?, //弹窗标题 message: 删除…

ASE90N25-ASEMI工业电机专用ASE90N25

ASE90N25-ASEMI工业电机专用ASE90N25编辑:ll ASE90N25-ASEMI工业电机专用ASE90N25 型号:ASE90N25 品牌:ASEMI 封装:TO-247 批号:最新 最大漏源电流:90A 漏源击穿电压:250V RDS(ON)Max:26mΩ 引脚数量:3 沟道类型:N沟道MOS管、中低压MOS管 漏电流:ua 特性:N沟道MO…

温度转化和蟒蛇绘制

蟒蛇绘制 import turtle turtle.setup(650,360,600,200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("pink") turtle.seth(-40) for i in range(4): turtle.circle(40,80) turtle.circle(-40,80) turtle.circle(40,80/2) …

Java面向对象编程(OOP)

面向过程&面向对象 面向过程思想:步骤清晰简单,第一步该做什么,第二步该做什么... 适合处理一些较为简单的问题 线性思维面向对象四思想:物以类聚,分类的思维模式,思考问题首要解决问题需要哪些分类,然后对这些分类进行单独思考,最后才对某个分类下的细节进行面向过…

第二章作业

由于一至三题只存了源代码,自己写的没有保存,所以仅以截图展示。四至八题则采取代码和截图一起的方式展示。 2.4 import turtle turtle.setup(650,360,800,200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.seth(-40) colors = ["blue&…

book_第2章例题

1.温度转化(符号在后) 2.温度转化(符号在前) 3.蟒蛇例题

SvelteKit 最新中文文档教程(3)—— 数据加载

前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

web57笔记(严格过滤-$和()来构造数字)

<?php/* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-08 01:02:56 # @email: h1xa@ctfer.com # @link: https://ctfer.com */// 还能炫的动吗? //flag in 36.php if(isset($_GE…

Contest3898 - 计科23级算法设计与分析平时作业-01

题目链接 A.DNA Sorting 题面思路 题目意思就是说,如果一个字符串中前面的字符比后面的字符大,那么它的无序度就+1,根据这个给一组字符串从最有序到最无序依次输出。那么明白题目意思之后直接模拟即可。 示例代码 #include<bits/stdc++.h>using namespace std;#define…

web56笔记(甚⾄把数字都给过滤掉了,还有部分的特殊字符)

<?php/* # -*- coding: utf-8 -*- # @Author: Lazzaro # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-07 22:02:47 # @email: h1xa@ctfer.com # @link: https://ctfer.com*/// 你们在炫技吗? if(isset($_GET[c])){$c=$_GET…

Odoo17中套件追溯

基于序列号的套件产品追溯 我们知道odoo原生的套件BOM类型并不会产生真正的库存,从而导致了某些情况下我们想要对套件进行追溯的困难性。基于这样的一个背景,我们在欧姆生产解决方案中新增了对套件产品的追溯拓展,下面我们就来看看如何使用吧。 产品设置 假设我们这里一台组…