注:预定义数组   $_POST[ ];

<!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="1028afternoonchuli.php" method="post">
<!--form 的 method 属性在 1028form表单的method属性 -->
<div>用户名:<input type="text" name="uid" /></div><!--name是在提交的时候用-->
<div>密码:<input type="password" name="pwd" /></div>
<!--type="password"专门的密码框-->
<div><input type="submit" value="登录" /></div>
<!--type="submit"提交按钮--> </form> </body>
</html>

1028afternoontest.php

<?php
//防止出现乱码,添加如下的header声明,并在浏览器的 更多工具 —— 编码 —— 中改成 Unicode-(UTF8)
header("Content-type: text/html; charset=utf-8"); //取出登录页面提交的用户名和密码的值,从预定义数组$_POST[];来取。$_POST数组来取POST方式传递过来的数据
$uid = $_POST["uid"];
$pwd = $_POST["pwd"]; //验证密码和用户名是否匹配
//造连接对象
$db = new MySQLi("localhost","root","数据库密码","1016");
//写sql语句 注意单词的拼写和漏写
$sql = "select password from login where username='{$uid}' "; /*
这种sql语句不安全
$sql = "select count(*) from login where username='{$uid}' and password='{$pwd}' ";
会被下面语句破解 a' or '1'='1 即sql注入攻击
通过添加两个字符串把原来的语句变了,执行后把所有的用户数据全查到了,count(*)肯定大于0,
防范攻击:针对PHP来说
1、优化PHP语句2、处理用户输入的内容(是否出现特殊符号,有的话就用截取去掉或者用PDO分两次发送给服务器。第一次(prepare)发送给MySQL数据库写好的框架但是不发送框架,MySQL数据库接收到语句之后等待执行,第二次提(直接执行)交变量[就是要查的内容]。之后进行原样匹配) */ //执行sql语句
$result = $db->query($sql);
$n = $result->fetch_row();//fetch_row 取第一个 if( $uid!="" && $pwd!="")//!=""非空验证
{
if($n[0]>0)//$n[是数组,所以不能直接判断,要取里面的元素判断
{
header:("location:1028afternoonmain.php");//跳转页面方法
}
else
{
echo "用户名或密码错误!";
}
}
else
{
echo "用户名密码不能为空!";
} ?>

1028afternoonchuli.php

<!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>
<br />
<form action="1028afternoonmain.php" method="post">
<div>姓名:
<input type="text" name="xm" />
<input type="submit" value="查询" />
</div>
</form>
<br />
<form action="1101morningpiliangshanchu.php" method="post">
<table width="100%" border="1" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" onclick="quanxuan(this)" />代号</td>
<td>姓名</td>
<td>性别</td>
<td>民族</td>
<td>生日</td>
<td>操作</td> </tr> <?php
//查询规律:在用户不输入的情况下,查询的是全部数据
//先判断有没有提交值 /*简化前
$xm="";
if(!empty($_POST["xm"]))//empty();判断是否为空.加一个条件判断,防止报错
{
$xm = $_POST["xm"];
} //简化前
$tj = "";
if($xm == "")//如果没有值,查所有的,不加条件,或者给一个恒成立的条件。如果有值,按条件查找
{
$tj = " 1=1 ";//不要忘记两边加空格(方便拼接sql语句)
}
else
{
$tj = " name like '%{$xm}%' ";//不要忘记两边加空格,模糊查询用like
}
//简化后
$tj = " 1=1 ";//默认恒成立
if($xm != "")
{
$tj = " name like '%{$xm}%' ";
}
*/
//简化后 写法一:
$xxm = "";
$tj = " 1=1 ";
if(!empty($_POST["xm"]) && $_POST["xm"] !="")//判断xm是否为空
{
$xxm = $_POST["xm"];
$tj = " name like '%{$_POST['xm']}%' "; //变量里面可以加单引号
}
/*简化后 写法二:
$tj = " 1=1 ";
if(!empty($_POST["xm"]))//判断xm是否为空
{
if($_POST["xm"] !="")//判断xm是否为空字符串
{
$tj = " name like '%{$xm}%' ";
}
}*/ //造连接对象
$db = new MySQLi("localhost","root","数据库密码","1016");
//写sql语句
$sql = "select * from info where ".$tj;//(拼接sql语句,where后面的空格是为了防止拼接语句错误.单独拿出来是因为如果写成一句的话,用户如果什么都不输入,查询的值则为空,这与查询规律冲突即用户什么都不输入的情况下,查询全部数据)
//执行sql语句
$result = $db->query($sql);
//读数据,返回一个二维数组
$attr = $result->fetch_all();
//foreach遍历数组,
foreach($attr as $v)//$attr as $v取attr里面的每一个小数组
{
echo"<tr>"; $sex = $v[2]?"男":"女";//数组v $v 取索引二,用三元运算符判断,前面是一个布尔型数据,true显示男,false显示女 0 false,1 true //根据民族代号查询民族名称 也可以使用join查询,但是一般不推荐使用,因为查询的数据量太大了 /*$sname = "select name from nation where code = '{$v[3]}'";
$rname = $db->query($sname);
$aname = $rname->fetch_row();*/ $name = nationname($v[3]);
//使关键字高亮 <mark></mark>
/*简化后的在上面
$xxm = "";//先把xxm变量定义在外层
if(!empty($_POST["xm"]))//然后判断是否有提交值
{
$xxm = $_POST["xm"];//有传值的话就取xm
}
*/
//替换关键字
$newname = str_replace($xxm,"<mark>{$xxm}</mark>",$v[1]);//查找替换,第一个参数:关键字,根据什么去找;第二个关键字,替换后的内容;第三个参数:要替换哪个字符串,即要替换的区域
//复选的话用数组提交 sc[] ,到处理页面,遍历数组就可以了
echo"<td><input type='checkbox' value='{$v[0]}' name='sc[]' class='qx' />{$v[0]}</td><td>{$newname}</td><td>{$sex}</td><td>{$name}</td><td>{$v[4]}</td><td><a href='1028afternoonshanchu.php?c={$v[0]}'>删除</a> <a href='1030morningxiugai.php?c={$v[0]}'>修改</a></td>"; //跳转到另外一个页面并且带一个值过去的方式是get方式,因此我们要模拟一个get传值方式 ?c={$v[0]} //要想加入删除的功能要先让它可以点击,一种方法是按钮,另一种方法是<a>标签。样式可以随便做,比如在外面加上一个漂亮的DIV,在里面加上<a>标签。 /*输出的两种方法
foreach($v as $v1)
{
echo "<td>{$v1}</td>";
}*/ echo"</tr>";
} //给一个民族代号,返回民族名称
function NationName($code)
{
//造连接对象
$db = new MySQLi("localhost","root","数据库密码","1016");
//写SQL语句
$sql = "select name from nation where code='{$code}'";
//执行SQL语句
$result = $db->query($sql); $attr = $result->fetch_row(); return $attr[0];
} ?> </table>
<a href="1028afternoonadd.php"><input type="button" value="添加数据" /></a>
<input type="submit" value="批量删除" onclick="return confirm('确定删除吗?')" />
</form>
<!--批量删除思路:把复选框和批量删除按钮看作是一个表单--> <script> function quanxuan(a) {
//找到下面所有的复选框
var ck = document.getElementsByClassName("qx");
//不是document点出来的就没有提示,如果怕出错可以在这里随便定义一个变量然后点出来然后复制过来
//遍历所有复选框,设置选中状态
for(var i=0;i<ck.length;i++)
{
if(a.checked)
{
/*setAttribute("checked","checked")
设置属性(“名字”;“值”)*/
ck[i].setAttribute("checked","checked");
}
else
{
/*removeAttribute("checked","checked")
移除属性(“名字”;“值”)*/
ck[i].removeAttribute("checked","");
}
} } </script> </body>
</html>

1028afternoonmain.php

<!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="1028afternoonaddchuli.php" method="post">
<!--用post提交方式时name=""是提交的值
为了对用户友好,即用户输入方便,将性别和民族从文本框改成下拉菜单,方便选择-->
<div>代号:<input type="text" name="code" /></div>
<div>姓名:<input type="text" name="name" /></div>
<div>性别:
<input type="radio" name="sex" value="1" checked="checked" />男
&nbsp;
<input type="radio" name="sex" value="0" />女
</div>
<div>民族:
<select name="nation">
<?php
//造连接对象
$db = new MySQLi("localhost","root","数据库密码","1016");
$sql = "select * from nation";
$result = $db->query($sql);
$attr = $result->fetch_all(); foreach($attr as $v)
{
echo "<option value='{$v[0]}'>{$v[1]}</option>"; //<option>中间是显示用的,value值才是提交的数据
}
?> </select>
<!--下拉列表<select><option></option></select>-->
</div>
<div>生日:<input type="text" name="birthday" /></div>
<div><input type="submit" value="添加" /></div>
<!--提交按钮submit的value是显示的内容--> </form> </body>
</html>

1028afternoonadd.php

<?php
$code = $_POST["code"];
$name = $_POST["name"];
$sex = $_POST["sex"];
$nation = $_POST["nation"];
$birthday = $_POST["birthday"]; //造连接对象
$db = new MySQLi("localhost","root","数据库密码","1016"); $sql = "insert into info values('{$code}','{$name}',{$sex},'{$nation}','{$birthday}')"; /*布尔型数据非常特殊
'{$sex}' {sex}加了单引号之后变成了字符串,字符串往布尔型数据里扔永远是一个true,因此不能加单引号*/
$db->query($sql); header("location:1028afternoonmain.php"); ?>

1028afternoonaddchuli.php

<?php
//处理页面是不让用户看到的页面,全部使用PHP代码,把HTML代码删掉,因此可以不写结束标记
//取值
$code = $_GET["c"]; //造连接对象
$db = new MySQLi("localhost","root","数据库密码","1016"); $sql = "delete from info where code = '{$code}'"; $r = $db->query($sql); if($r)
{
header("location:1028afternoonmain.php");
}
else
{
echo "删除失败!";
} ?>

1028afternoonshanchu.php

<?php
//这种页面不能直接跳转,要通过上一个页面跳转
//把提交的5个值取出
$code = $_POST["code"];
$name = $_POST["name"];
$sex = $_POST["sex"];
$nation = $_POST["nation"];
$birthday = $_POST["birthday"];
//造连接对象
$db = new MySQLi("localhost","root","数据库密码","1016");
//写sql语句 set name='{$name}' 把数据库的name修改成用户输入的name
$sql = "update info set name='{$name}',sex={$sex},nation='{$nation}',birthday='{$birthday}' where code='{$code}'";
echo $sql;
$db->query($sql); header("location:1028afternoonmain.php"); ?>

1028afternoonxiugaichuli.php

PHP数据访问增删查(20161028)的更多相关文章

  1. php数据访问增删查

    1.先做一个登陆界面 <form action="chuli.php" method="post"> <div>用户名:<inpu ...

  2. 利用dbutils工具实现数据的增删查改操作(dbutis入门)

    一.前期准备 1.安装数据库(如:mysql5.5) 2.安装Eclipse(如:3.4) 3.下载数据库驱动包 4.下载dbutis工具包 5.在Eclipse创建名为 dbutils 的工程并在工 ...

  3. mysql数据库,数据表,数据的增删查改语句

    查询mysql支持的引擎 show engines; 查询mysql支持的字符集 show character set; 设置mysql默认存储引擎 set default_storage_engin ...

  4. 如何在Vue中使用Mockjs模拟数据的增删查改

    之前一直使用json-server在前端开发时,搭建本地数据接口测试,但有时又需要将做好的项目放于 github page上做项目演示.在本地时,json server很好使用,但一旦放在github ...

  5. SQLServer数据操作(建库、建表以及数据的增删查改)

              SQLSever数据操作   一.建立数据库:   create database DB ---数据库名称 (          name=data1 --文件名,         ...

  6. ASP.NET使用EasyUI-DataGrid + ashx + JQuery Ajax:实现数据的增删查改,查询和分页!

    转自:http://www.cnblogs.com/lt-style/p/3457399.html 数据表: 学生表:学生编号.姓名.性别.班级编号.年龄 班级表:班级编号.班级名称 开发过程: 1. ...

  7. SQLServer数据操作(建库、建表以及数据的增删查改)[转]

    SQLSever数据操作   一.建立数据库:   create database DB ---数据库名称 (          name=data1 --文件名,          filename ...

  8. MyBatis3-实现单表数据的增删查改

    继续前一篇文章http://www.cnblogs.com/EasonJim/p/7050710.html所示的例子,返回的是单个实体,而接下来将进行列表的返回等操作: 一.查询列表 查询出列表,也就 ...

  9. 学习记录——使用PHP实现数据增删查改等基本功能(前后端分离)

    萌新初次学习服务器端语言,分享学习经验 实现功能:1.显示数据表    2.对数据进行分页    3.对数据进行增删查改 由于本萌新采用前后端完全分离方案,所以数据传输用的ajax,为了提高代码的复用 ...

随机推荐

  1. HTML5画布(CANVAS)速查简表

    HTML5画布(CANVAS)速查简表 http://www.webhek.com/misc/html5-canvas-cheat-sheet/

  2. CodeForces 446B

    DZY Loves Modification time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  3. Linux编程之PING的实现

    PING(Packet InterNet Groper)中文名为因特网包探索器,是用来查看网络上另一个主机系统的网络连接是否正常的一个工具.ping命令的工作原理是:向网络上的另一个主机系统发送ICM ...

  4. B+树的插入、删除(附源代码)

    B+ Tree Index B+树的插入 B+树的删除 完整测试代码 Basic B+树和B树类似(有关B树:http://www.cnblogs.com/YuNanlong/p/6354029.ht ...

  5. 常用js类型相互转换

    数字转换为字符串 var a=200.21;document.write(a.toString(10));  结果为:200.21以十进制转换 document.write(a.toFixed(3)) ...

  6. 【java设计模式】之 抽象工厂(Abstract Factory)模式

    1. 女娲的失误 上一节学习了工厂模式,女娲运用了该模式成功创建了三个人种,可是问题来了,她发现没有性别--这失误也忒大了点吧--竟然没有性别,那岂不是--无奈,只好抹掉重来了,于是所有人都被消灭掉了 ...

  7. iOS 获取公历、农历日期的年月日

    iOS 获取公历.农历日期的年月日 介绍三种方法获取 Date (NSDate) 的年月日. 用 date 表示当前日期.测试日期为公历 2017 年 2 月 5 日,农历丁酉年,鸡年,正月初九. l ...

  8. Unsupported major.minor version 52.0错误解决 Ubuntu JDK8 安装配置

    Unsupported major.minor version 52.0错误一般是因为应用程序需要JDK8而ubuntu默认的是jdk7,所以需要切换到jdk8才能解决这个问题. 本文使用PPA方式安 ...

  9. 读书笔记 effective c++ Item3 在任何可能的时候使用 const

    Const可以修饰什么?   Const 关键字是万能的,在类外部,你可以用它修饰全局的或者命名空间范围内的常量,也可以用它来修饰文件,函数和块作用域的静态常量.在类内部,你可以使用它来声明静态或者非 ...

  10. 1.使用SignalR实现页面即时刷新(服务端主动推送)

    模块功能说明: 实现技术:sqlserver,MVC,WebAPI,ADO.NET,SignalR(服务器主动推送) 特殊车辆管理--->移动客户端采集数据存入数据库---->只要数据库数 ...