练习通过数据库查询一个表,操作这个表的增、删、改、查的功能!

一、主页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<table width:100% border="1" cellpadding="0" cellspacing="0">
<tr style="background-color:#CF0">
<td>代号</td>
<td>姓名</td>
<td>性别</td>
<td>民族</td>
<td>生日</td>
<td>操作</td>
</tr>
<?php
//造链接对象
$db = new mysqli("localhost","root","517","mydb");
//判断是否链接成功
!mysqli_connect_error() or die("链接失败");
//写sql语句
$sql = "select * from Info ";
//执行sql语句
$result = $db->query($sql); //返回的$result是一个结果集
//处理查询结果
$attr = $result->fetch_all(); /*$result 到这步就是一个对象,可以利用对象里的方法
可以用1.fetch_row(),一行一行的取,取出来的是一个索引数组
2.fecth_all() 取出所有的数据,返回的是一个二维数组
3.fetch_assoc() 一行一行的取 取出的是一个关联数组*/
for($i=0;$i<count($attr);$i++)
{
echo"<tr>";
$attr[$i]; //取出的数据是一个行的数组
//因为$attr[$i]就是一个数组,所以需要在遍历这个数组查出数据
for($j=0;$j<count($attr[$i]);$j++)
{
echo"<td>{$attr[$i][$j]}</td>"; //适用于列数比较多的数据循环数据
}
/*造操作表里的删除和修改,要在for循坏外面写<td>,因为下面的<tr>是在外层的for循环里的,所以每一行数据都会循环出来删除和修改的a标签.
为了清楚的知道到底操作的是哪条数据,所以可以用?手写get提交方式(这种方式叫做写一个querystring),传一个主键值来唯一标识这条数据*/
echo"<td><a href='Delete.php?code={$attr[$i][0]}'>删除</a>&nbsp;<a href='Delete.php?code={$attr[$i][0]}'>删除</a></td>";
echo"</tr>";
} ?>
</table>
<!--点击按钮添加数据-->
<br />
<!--添加数据跳转页面也可以用JavaScript,找到这个元素,利用window.open做, 这里用<a>标签做-->
<a href="tianjia.php"><input type="button" value="添加数据"/></a> </body>
</html>

二、添加数据页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<form action="Add.php" method="post">
<div>
代号:<input type="text" name="code"/> <!--只要提交表单,input里必须有name,因为到处理页面要接收name值-->
</div>
<div>
姓名:<input type="text" name="name"/>
</div>
<div>
<!--添加value值,提交的时候选中哪个,就提交哪个value的值; 注意name要设置成一样的,才会互斥-->
性别:<input type="radio" name="sex" value="ture" checked="checked"/>男 &nbsp;
<input type="radio" name="sex" value="false"/>女 </div>
<div>
<!--<select>也是表单元素,所以也要设置name值-->
民族:
<select name="nation">
<?php
//造链接对象
$db = new MySQLi("localhost","root","517","mydb");
//判断是否出错
!mysqli_connect_error() or die("链接失败");
//写sql语句
$sql = "select * from Nation"; //执行sql语句
$result = $db->query($sql);
//处理结果
$attr = $result->fetch_all();
for($i=0;$i<count($attr);$i++)
{
echo"<option value='{$attr[$i][0]}'>{$attr[$i][1]}</option>"; //点击提交的时候,传过去的是value值
}
?> </select>
</div>
<div>
生日:<input type="text" name="birthday"/>
</div>
<div>
<input type="submit" value="确定"/>
<a href="/LianXi/Untitled-4.php"><input type="button" value="返回"/></a>
</div>
</body>
</html>

三、添加处理页面

<?php
//接收上个页面传过来的name值 送到数据库
$code = $_POST["code"]; //post引号里的值 是从上个页面传过来的name值,用一个变量接收一下后在这个处理页面调用
$name = $_POST["name"];
$sex = $_POST["sex"];
$nation = $_POST["nation"];
$birthday = $_POST["birthday"];
//造链接对象
$db = new MySQLi("localhost","root","517","mydb");
//判断是否出错
!mysqli_connect_error() or die("链接失败");
//写sql语句
$sql = "insert into Info values('{$code}','{$name}',{$sex},'{$nation}','{$birthday}')"; //value值中如果是字符串则需要加单引号,其他的不用加(布尔型,整型,浮点型);$sex是布尔类型的,所以在value值里不用加单引号. //执行sql语句
$result = $db->query($aql); //因为$result 接收的不是查询语句,所以返回的是ture或者false if($result)
{
header("location:tianjia.php");
}
else
{
echo"添加失败";
}

四、删除页面

<?php
//删除处理页面
$code = $_GET["code"]; //造链接对象
$db = new mysqli("localhost","root","517","mydb");
//判断是否链接成功
!mysqli_connect_error() or die("链接失败");
//写sql语句
$sql = "delete from Info where code='{$code}'";
//执行sql语句
$result = $db->query($sql); //返回的$result是一个结果集 if($result)
{
header("location:Untitled-4.php");
}
else
{
echo"链接失败!";
}

五、修改页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<?php
$code = $_GET["code"]; //用get方式接收到传过来的主键值,用主键值查出数据 //造链接对象
$db = new MySQLi("localhost","root","517","mydb");
//判断是否出错
!mysqli_connect_error() or die("链接失败");
//写sql语句
$sqlxq = "select * from Info where Code='{$code}'";
//执行sql语句
$resultxq = $db->query($sqlxq); $attrxq = $resultxq->fetch_row(); //因为通过主键值只查出来一条数据,所以用fetch_row()比较方便 ?>
<form action="Update.php" method="post">
<div>
代号:<input type="text" name="code" readonly="readonly" value="<?php echo $attrxq[0]?>"/> <!--只要提交表单,input里必须有name,因为到处理页面要接收name值;-->
</div>
<div>
姓名:<input type="text" name="name" value="<?php echo $attrxq[1]?>"/>
</div>
<div>
<!--添加value值,提交的时候选中哪个,就提交哪个value的值; 注意name要设置成一样的,才会互斥-->
性别:<input type="radio" name="sex" value="ture" <?php echo $attrxq[2]?"checked='checked'":"" ;?>/>男 &nbsp;
<input type="radio" name="sex" value="false" <?php echo $attrxq[2]?"":"checked='checked'" ;?>/>女 </div>
<div>
<!--<select>也是表单元素,所以也要设置name值-->
民族:
<select name="nation">
<?php //写sql语句
$sql = "select * from Nation"; //执行sql语句
$result = $db->query($sql);
//处理结果
$attr = $result->fetch_all();
for($i=0;$i<count($attr);$i++)
{
if($attrxq[3]==$attr[$i][0])
{
echo"<option selected='selected' value='{$attr[$i][0]}'>{$attr[$i][1]}</option>"; //点击提交的时候,传过去的是value值
}
else
{
echo"<option value='{$attr[$i][0]}'>{$attr[$i][1]}</option>";
}
}
?> </select>
</div>
<div>
生日:<input type="text" name="birthday" value="<?php echo $attrxq[4]?>" />
</div>
<div>
<input type="submit" value="修改"/>
<a href="/LianXi/Untitled-4.php"><input type="button" value="返回"/></a>
</div>
</body>
</html>

六、修改处理页面

<?php

$code = $_POST["code"];
$name = $_POST["name"];
$sex = $_POST["sex"];
$nation = $_POST["nation"];
$birthday = $_POST["birthday"]; //造链接对象
$db = new MySQLi("localhost","root","517","mydb");
//判断是否出错
!mysqli_connect_error() or die("链接失败");
//写sql语句
$sql = "update Info set Name='{$name}',Sex={$sex},Nation='{$nation}',Birthday='{$birthday}' where Code='{$code}'"; //执行sql语句
$result = $db->query($aql); if($result)
{
header("location:Untitled-4.php");
}
else
{
echo"修改失败";
}

注意事项!!

1.如果运行程序的时候出现错误,显示的是fetch_all()或fetch_row()有错误,表示是sql语句写错了

2.一般做程序的时候,修改页面中的主键值一般是不允许修改的,可以显示,但是最好不要设置成可以修改的,会出现问题;设置成修改的可能导致主键值重复(修改页面中的提示)

3.手写get提交方式的这种做法叫做写一个querystring,问号后面直接跟name;如果写多个,用@符号隔开

4.给文件命名的时候,一般按照驼峰命名法!就是单词首字母大写,例如:XiuGaiChuLi.php

5.做项目的时候,要考虑到界面的友好性,怎么样才能让用户用着更舒服更顺手,尽力去完善

6.完善页面:<a href="delete.php" onclick="return confirm('确定删除吗?')">删除</a>

PHP--数据库访问(增、删、改、查)的更多相关文章

  1. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  2. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  3. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  4. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  5. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  6. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  7. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  8. 简单的php数据库操作类代码(增,删,改,查)

    这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...

  9. Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)

    一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...

  10. 怎样从C#中打开数据库并进行 增 删 改 查 操作

    首先 在C#中引用数据库的操作! (因为我们用的是SQLserver数据库,所以是SqlClient) using System.Data.SqlClient; 1:要实现对数据库的操作,我们必须先登 ...

随机推荐

  1. QThread多线程编程经典案例分析(三种方法,解释了为什么使用moveToThread的根本原因,即为了避免调用QThread::exec() )

    传统的图形界面应用程序都只有一个线程执行,并且一次执行一个操作.如果用户调用一个比较耗时的操作,就会冻结界面响应. 一个解决方法是按照事件处理的思路: 调用 Void QApplication::pr ...

  2. Qt信号量QSemaphore(在线程里使用,结合生产者消费者的问题)

    Qt中的信号量是由QSemaphore类提供的,信号量可以理解为对互斥量功能的扩展,互斥量只能锁定一次而信号量可以获取多次,它可以用来保护一定数量的同种资源.acquire()函数用于获取n个资源,当 ...

  3. 条款16:成对使用new和delete时要使用相同的形式

    请牢记: 如果在new表达式中使用[],必须在相应的delete表达式中也使用[]. new[]  对应  delete[] 如歌在new表达式中不适用[],一定不要在相应的delete表达式中使用[ ...

  4. sql一关联多查询时否定筛选出现的问题的解决

    问题:一方关联多方查询时执行否定筛选,结果包含未通过筛选的项. 我们规定一方为父,多方为子,我们希望子未通过筛选时,结果也不出现对应的父. 查询部门及部门下的所有员工. SELECT * FROM d ...

  5. 简单了解HashCode()

    在java的内部类中,计算HashCode通常使用 code = 元素* 31 + 下一个元素 以String为例 public int hashCode() { int h = hash; if ( ...

  6. Python笔记【5】_字符串&列表&元组&字典之间转换学习

    #!/usr/bin/env/python #-*-coding:utf-8-*- #Author:LingChongShi #查看源码Ctrl+左键 #数据类型之间的转换 Str='www.baid ...

  7. php设计模式-责任链模式

    责任链模式更像是一种简化多种场景下调用处理的一种设计模式,特别适合if-else分支判断很多的场景.比如是根据不同会员等级给予不同的优惠力度. 它的定义:对象的调用是由下家的应用连接起来的处理链.一直 ...

  8. Sublime Text 3 安装 BracketHighlighter

    1 概述 由于最近在Sublime Text 3安装 BracketHighlighter遇到不少问题,其中踩了不少坑,因此总结下来,形成博客,希望能帮助更多的人 2 电脑环境 windows 10 ...

  9. archery 平台升级部署实践

    v1.3.8 → v1.5.0 1.安装.升级python3 venv 环境 1.1.安装 python36 全新安装需要执行,升级安装可忽略 https://www.cnblogs.com/Davi ...

  10. Android 装逼技术之暗码启动应用

    什么是暗码? 在拨号盘中输入*#*#<code>#*#*后,APP 可以监控到这些输入,然后做相应的动作,比如启动应用,是不是有点骚. 下面看下这个骚操作是如何实现的. 效果预览 源码 D ...