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

一、主页面

<!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. 快速开发平台 WebBuilder 8 发布

    快速开发平台  WebBuilder 8 发布 了解:http://www.putdb.com,官网:http://www.geejing.com 什么是WebBuilder? WebBuilder是 ...

  2. poi 操作Excel 以及大数据量导出

    maven 依赖 (版本必须一致,否则使用SXSSFworkbook 时程序会报错) <dependency> <groupId>org.apache.poi</grou ...

  3. Paragon NTFS for Mac 15.5.53 中文破解版(激活码)下载

    Paragon NTFS for Mac中文破解版是一款超级受欢迎的简单.高效.安全的格式读写软件,提供给大家,再也不用到处找Paragon NTFS序列号和Paragon NTFS激活码啦,帮您轻松 ...

  4. QSqlRelationalTableModel的Select语句会改变列的名字

    不解释QSqlRelationalTableModel是什么东西.看以下代码: //3.1 创建model model = new QSqlRelationalTableModel(); model- ...

  5. C++模板的理解与使用

    最近发现原来学的东西根本都不理解,所以本人正在恶补C++,把自己对C++中概念的最简单粗暴的理解写下来. 有问题的地方还请指出~随时更正 模板:顾名思义,就是为了方便以后使用而出现的东西,生活中的模板 ...

  6. Java系统架构师学习体系图

  7. C语言实现Linux网络嗅探器

    C语言实现Linux网络嗅探器 0x01 实验简介 网络嗅探器是拦截通过网络接口流入和流出的数据的程序.所以,如果你正在浏览的互联网,嗅探器以数据包的形式抓到它并且显示.在本实验中,我们用 C 语言实 ...

  8. vue路由传参query和params的区别(详解!)

    1.query使用path和name传参都可以,而params只能使用name传参. query传参: 页面: this.$router.push({ path:'/city',name:'City' ...

  9. iOS开发(4):录音AVAudioRecorder

    录音,声音的采集,一般有两种实现办法,一是使用AVAudioRecorder,一是使用AudioUnit.如果只是简单的录音,使用AVAudioRecorder就可以了,如果想更灵活地处理刚录到的声音 ...

  10. [Vue 牛刀小试]:第十四章 - 编程式导航与实现组件与 Vue Router 之间的解耦

    一.前言 在上一章的学习中,通过举例说明,我们了解了 Vue Router 中命名路由.命名视图的使用方法,以及如何通过 query 查询参数传参,或者是采用 param 传参的方式实现路由间的参数传 ...