PHP访问MySql数据库 高级篇 AJAX技术

使用jQuery的PHP和MySQL的AJAX实例 为什么我们需要使用AJAX?AJAX可以帮助我们从用户界面向服务器通信,而不需要重新加载我们的页面,并有助于减少服务器的带宽成本,而且可以提高用户体验。在本教程中,我们将使用JQuery库实现PHP和MySQL的AJAX实例,用简单的雇员保存和获取记录来测试AJAX的POST和GET方法。所以,我们现在将开始我们的代码。让我们在下面建立我们的index.html。 阅读详情

阅读本文之前,推荐先参阅《PHP访问MySql数据库 初级篇》和《PHP访问MySql数据库 中级篇 Smarty技术》。

在前面的文章,我们已经开发了一个能够读取数据库并显示数据的程序,且程序达到了良好的界面与逻辑分离。但是这个程序并不能支持我们对数据库进行增加、删除和修改操作。因此在这里增加这些功能。每次增加删除或修改数据时,通过AJAX方式向后台发送请求,再根据后台的返回结果调整页面显示。这种方法可以减轻服务器的负担。

 

下面先简单的介绍下AJAX,然后给出完整的示例:

AJAX 是一种独立于 Web 服务器软件的浏览器技术。它不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。通过 AJAX方式,可使用 JavaScript 的XMLHttpRequest 对象来直接与服务器进行通信。这样便可以在不重载页面的情况与 Web 服务器交换数据。同时AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。AJAX手册可以访问http://api.jquery.com/category/ajax/

 

下面是本系列中功能最为全面的程序——从test数据库的t_student表中读取数据然后显示,同时支持对t_student表进行AJAX方式的增加、删除和修改操作。在界面功能上也有表格的奇偶行变色及鼠标经过变色,使得程序更加的美观。

程序共分为8个文件,分别为smarty2.php、smarty2.html、smarty2_head.php、smarty2.js和smarty2.css及新增加的insert.php、delete.php及updata.php。

1.smarty2_head.php文件

定义数据库相关的常量,变量数组。数据库名,用户名与密码,表名等在此定义。

<?php
// by MoreWindows( http://blog.youkuaiyun.com/MoreWindows )
define(DB_HOST, 'localhost');
define(DB_USER, 'root');
define(DB_PASS, '111111');
define(DB_DATABASENAME, 'test');
define(DB_TABLENAME, 't_student');

$dbcolarray = array('id', 'name', 'age');
?>

2.smarty2.php文件

<?php
// by MoreWindows( http://blog.youkuaiyun.com/MoreWindows )
header("Content-Type: text/html; charset=utf-8");
require('../../smart_libs/Smarty.class.php');
require_once('smarty2_head.php');
date_default_timezone_set("PRC");

//mysql_connect
$conn = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("connect failed" . mysql_error());
mysql_select_db(DB_DATABASENAME, $conn);

//个数
$sql = sprintf("select count(*) from %s", DB_TABLENAME);
$result = mysql_query($sql, $conn);
if ($result)
{
	$dbcount = mysql_fetch_row($result);
	$tpl_db_count = $dbcount[0];
}
else
{
	die("query failed");
}
$tpl_db_tablename = DB_TABLENAME;
$tpl_db_coltitle = $dbcolarray;
//表中内容
$tpl_db_rows = array();
$sql = sprintf("select %s from %s", implode(",",$dbcolarray), DB_TABLENAME);
$result = mysql_query($sql, $conn);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))//等价$row=mysql_fetch_assoc($result)
	$tpl_db_rows[] = $row;

mysql_free_result($result);
mysql_close($conn);

$tpl = new Smarty;
$tpl->assign('db_tablename', $tpl_db_tablename);
$tpl->assign('db_count', $tpl_db_count);
$tpl->assign('db_coltitle', $tpl_db_coltitle);
$tpl->assign('db_rows', $tpl_db_rows);

$tpl->display('smarty2.html');
?>

3.smarty2.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>
<link href="smarty2.css" rel="stylesheet" type="text/css" media="all" />
<script type="text/javascript" src="../jquery-1.7.min.js"></script>
<script type="text/javascript" src="smarty2.js"></script>
<title>{$smarty.const.DB_TABLENAME}</title>
</head>
<body>
<h1>表名:{$db_tablename}</h1>
<table id="Table" border="1" align="center" cellpadding="10" cellspacing="2" bordercolor="#ffaaoo">
<caption style="font-size:15px">当前记录数:<label id="tableRowCount">{$db_count}</label>      <input type="button" value="Add" onclick="addFun()" /> </caption>
{foreach $db_coltitle as $col}
    <th>{$col}</th>
{/foreach}
<th>操作</th>
{foreach $db_rows as $dbrow}
    <tr>
    {foreach $dbrow as $k=>$val}
        <td>{$val}</td>
    {/foreach}
	<td>
		<input type="button" value="Edit" onclick="editFun('{$dbrow['id']}', '{$dbrow['name']}', '{$dbrow['age']}');" />
		<input type="button" value="Delete" onclick="deleteFun('{$dbrow['id']}')" />
	</td> 
    </tr>
{/foreach}
</table>

<div id="editdiv" style="display:none;color:red;" align="center">
 <form>
 id:<input type=text id="editdiv_id" readonly="true" />
 name:<input type=text id="editdiv_name" />
 age:<input type=text id="editdiv_age" />
 <input type=button name="Updata" value="Updata" onclick="updataFun()" />
</form>
</div>
<div id="adddiv" style="display:none;color:green;" align="center">
 <form>
 name:<input type=text id="adddiv_name" />
 age:<input type=text id="adddiv_age" />
 <input type=button name="Insert" value="Insert" onclick="insertFun()" / >
</form>
</div>
</body>
</html>

4.smarty2.js文件

新增加了表格的鼠标经过行变色效果

//在表格的第一列中查找等于指定ID的行
function SearchIdInTable(tablerow, findid)
{
    var i;
    var tablerownum = tablerow.length;
	for (i = 1; i < tablerownum; i++)
		if ($("#Table tr:eq(" + i + ") td:eq(0)").html() == findid)
			return i;
	return -1;
}
//用CSS控制奇偶行的颜色
function SetTableRowColor()
{
	$("#Table tr:odd").css("background-color", "#e6e6fa");
$("#Table tr:even").css("background-color", "#fff0fa");
$("#Table tr:odd").hover(
	function(){$(this).css("background-color", "orange");},
	function(){$(this).css("background-color", "#e6e6fa");}		
);
$("#Table tr:even").hover(
	function(){$(this).css("background-color", "orange");},
	function(){$(this).css("background-color", "#fff0fa");}		
);
}
//响应edit按钮
function editFun(id, name, age)
{
    $("#editdiv").show();
    $("#adddiv").hide();

    $("#editdiv_id").val(id);
    $("#editdiv_name").val(name);
    $("#editdiv_age").val(age);
}
//响应add按钮
function addFun()
{
    $("#editdiv").hide();
    $("#adddiv").show();    
}
//记录条数增加
function IncTableRowCount()
{
	var tc = $("#tableRowCount");
	tc.html(parseInt(tc.html()) + 1);
}
//记录条数减少
function DecTableRowCount()
{
	var tc = $("#tableRowCount");
	tc.html(parseInt(tc.html()) - 1);
}
//增加一行
function addRowInTable(id, name, age)
{
    //新增加一行
    var appendstr = "<tr>";
    appendstr += "<td>" + id + "</td>";
    appendstr += "<td>" + name + "</td>";
    appendstr += "<td>" + age + "</td>";
    appendstr += "<td><input type=\"button\" value=\"Edit\" onclick=\"editFun(id, name, age);\" />";
    appendstr += "<input type=\"button\" value=\"Delete\" onclick=\"deleteFun(id)\" /></td>";
    appendstr += "</tr>";       	
    $("#Table").append(appendstr);
    IncTableRowCount();
}
//修改某一行
function updataRowInTable(id, newname, newage)
{
    var i = SearchIdInTable($("#Table tr"), id);
    if (i != -1)
    {
	    $("#Table tr:eq(" + i + ") td:eq(1)").html(name != "" ? name : " ");
        $("#Table tr:eq(" + i + ") td:eq(2)").html(age != "" ? age : " ");
        $("#editdiv").hide();
    }
}
//删除某一行
function deleteRowInTable(id)
{
	var i = SearchIdInTable($("#Table tr"), id);
	if (i != -1)
	{	
		//删除表格中该行
		$("#Table tr:eq(" + i + ")").remove();
		SetTableRowColor();
		DecTableRowCount();
	}
}
//增加删除修改数据库函数 通过AJAX与服务器通信
function insertFun()
{
    var name = $("#adddiv_name").val();
    var age = $("#adddiv_age").val();

    if (name == "" || age == "")
    {
	    alert("请输入名字和年龄!");
	    return ;
    }

    //submit to server 返回插入数据的id
    $.post("insert.php", {name:name, age:age}, function(data){
        if (data == "f")
        {
            alert("Insert date failed");
        }
        else
        {
        	addRowInTable(data, name, age);
    	    SetTableRowColor();
    	    $("#adddiv").hide();
        }
    });
}
function deleteFun(id)
{
	if (confirm("确认删除?"))
	{
		//submit to server
		$.post("delete.php", {id:id}, function(data){
			if (data == "f")
			{
			  alert("delete date failed");
			}
			else
			{
                deleteRowInTable(id);
			}
	    });
	}
}
function updataFun()
{
    var id = $("#editdiv_id").val();
    var name = $("#editdiv_name").val();
    var age = $("#editdiv_age").val(); 

    //submit to server
    $.post("updata.php", {id:id, name:name, age:age}, function(data){
        if (data == "f")
        {
            alert("Updata date failed");
        }
        else
        {
            updataRowInTable(id, name, age);
	    }
    });
}
  
$(document).ready(function()
{
	SetTableRowColor();
	UpdataTableRowCount();
});  

5.smarty2.css文件

@charset "utf-8";
h1
{
	color:Red;
	text-align:center;
}
table th
{  
	background-color:#7cfc00;  
} 

6.新增加的insert.php

将数据插入数据库中,成功返回新插入数据的id号,失败返回"f"。

<?php
require_once 'smarty2_head.php';
//mysql_connect
$conn = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("connect failed" . mysql_error());
mysql_select_db(DB_DATABASENAME, $conn);
//params
$name = $_POST['name'];
$age = $_POST['age'];
//insert db
$sql = sprintf("INSERT INTO %s(name, age) VALUES('%s', %d)", DB_TABLENAME, $name, $age);
$result=mysql_query($sql, $conn);
if ($result)
  echo mysql_insert_id($conn);
else
  echo "f";
mysql_close($conn);
?>

7.新增加的delete.php

根据id删除数据库中一行记录,成功返回"f",失败返回"t"。

<?php
require_once 'smarty2_head.php';
//mysql_connect
$conn = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("connect failed" . mysql_error());
mysql_select_db(DB_DATABASENAME, $conn); 
//params
$id       = $_POST['id'];
//delete row in db
$sql = sprintf("delete from %s where id=%d", DB_TABLENAME, $id);
$result = mysql_query($sql, $conn);
mysql_close($conn);
if ($result)
  echo "t";
else
  echo "f";
?>

8.新增加的updata.php

根据id修改数据库中一行记录,成功返回"f",失败返回"t"。

<?php
require_once 'smarty2_head.php';
//mysql_connect
$conn = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("connect failed" . mysql_error());
mysql_select_db(DB_DATABASENAME, $conn);  
//params
$id       = $_POST['id'];
$name = $_POST['name'];
$age = $_POST['age'];
//updata db
$sql = sprintf("update %s set name='%s',age=%d where id=%d", DB_TABLENAME, $name, $age, $id);
$result=mysql_query($sql, $conn);
mysql_close($conn);
if ($result)
  echo "t";
else
  echo "f";
?>

程序运行结果如下(Win7 +IE9.0):

 

本人CSS学的太菜。所以表格的布局将就点了。

 

转载请标明出处,原文地址:http://blog.youkuaiyun.com/morewindows/article/details/7102362

 

PHP+MySQL+Ajax实现前端页面展示数据库的数据 昨天发现一款数据库管理软件:Navicat for MySQL,一款强大的 MySQL 数据库管理和开发工具,这款软件使用了极好的图形用户界面(GUI),可以用一种安全和更为容易的方式快速和容易地新建数据库、新建表等。前端学习过程中一直对后台如何从数据库读取数据,以及后台提供给前端接口等问题比较感兴趣,借此机会,尝试了一下新建数据库和表,用PHP从建好的数据库中读取数据,并在前端用Ajax将... 阅读详情

相关推荐

前端 后台php MySQL数据库之间通过Ajax技术的完整连接与交互 Ajax的应用

PHP - AJAX 与 MySQLAJAX 可用来与数据库进行交互式通信。AJAX 数据库实例下面的实例将演示网页如何通过 AJAX 从数据库读取信息:本教程使用到的 Websites 表 SQL 文件:websites.sql。实例 选择一个网站: Google 淘宝 菜鸟教程 微博 Facebook 选择对应选项,用户信息会显示在这……实例解释 - MySQL 数据库在上面的实例中,我们使用...

夜歌 3910

php mysql ajax

目录 一、php与mysql 二、Ajax 一、php与mysql (一)操作语句 1.数据库连接如$conn=mysql_connect('localhost','root','123456'); 2.mysql_query() 函数该函数用于向 SQL 连接发送查询和命令 3.mysql_select_db() 函数选取数据库如mysql_select_db("cloud",$conn); 4.插入语句$result=mysql_query("INSERTINTOd...

qq_43496887的博客 2305

使用Ajax、PHP和MySQL读取数据库的简单示例

在上面的PHP脚本中,我们首先建立与MySQL数据库的连接,然后执行SELECT查询以从"users"表中检索数据。我们将展示一个简单的示例,通过Ajax请求从数据库中检索数据,并使用PHP作为服务器端脚本来处理请求并返回结果。当用户单击"Load Data"按钮时,将触发一个Ajax请求,并将返回的结果显示在。创建一个名为"load_data.php"的PHP文件,该文件将处理Ajax请求并从数据库中检索数据。在MySQL数据库中创建一个名为"users"的表,该表将包含我们要检索的用户数据。

. 482

AJAX+PHP+MySQL搜索(亲测可用附源码)

改自:https://blog.youkuaiyun.com/weixin_39927850/article/details/81022812 但是它的代码有点问题,所以我这边改了改,最终成功运行 源码 index.html <!DOCTYPE html> <html> <head> <meta charset="utf-...

天才中年英俊的博客 1269

告别卡顿!手把手教你用北鲲云超算平台图形化提交COMSOL仿真任务(附RDP连接技巧)

本文详细介绍了如何利用北鲲云超算平台图形化提交COMSOL仿真任务,解决本地计算资源不足导致的卡顿问题。通过云端高性能计算,用户可轻松配置多核CPU和大内存资源,实现高效仿真计算,并附有RDP连接优化技巧,提升远程操作体验。

weixin_42519781的博客 379

校招总结—FPGA从入门到放弃

校招总结—FPGA从入门到放弃 感谢咸鱼FPGA的授权转发,原文地址为https://www.cnblogs.com/xianyufpga/ 其实 offer 早就定下来了,最近忙着入党考试,现在才腾出时间来写个总结。我校招开始于 7 月底,算是比较晚了,后面加了各大校招交流群,发现很多同学都是过完年后就开始打磨项目、复习基础、寻找实习。对比之下我这准备确实仓促,不过结果还算满意。 ...

qq_31515205的博客 8605

PHP+Ajax+MySQL实现无限分类

1.实现思路 1)、MySQL表设计:在表中添加parent_id字段,用来记录记录的父类别 2)、PHP文件:a、编写一个接口文件用来返回parent_id相同的类别 b、编写模板文件,用来对类别进行输出 c、编写index.php文件,文件中获取parent_id为0即没有父类别的分类 3)、js文件:a、编写基础文件,包括接口基础地址和在其他文件中都有可能使用的函数 b、编写获取...

weixin_41932507的博客 558

PHP - AJAX 与 MySQL

AJAX 可用来与数据库进行交互式通信。

m0_72763148的博客 1086

python模拟银行交易流水

模拟自动生成银行交易流水,其中包括:入账账号、出账账号、交易金额、交易余额、交易时间、出入表示关键字段

qq_31823889的博客 2910

使用 FastAPI 和 LangGraph 构建生产级智能体 AI 系统

这是一本关于使用 FastAPI 和 LangGraph 构建生产级智能体 AI 系统的详细书籍,全文约 10 万字。《Production-Grade Agentic AI System Design and Implementation: Building Agentic AI Systems Using FastAPI and LangGraph》随着人工智能(AI)技术的迅猛发展,智能体(Agent)作为能够自主感知、推理、决策和行动的实体,正逐渐成为构建复杂智能系统的核心。从个性化推荐、客户服务到

AI天才研究院 346

ajax+php+mysql 读取数据库的简单示例

1.创建数据库create database ajaxdemo default charset utf8;    切换到当前数据库use ajaxdemo;        创建表并插入数据CREATE TABLE `ajaxtest` ( `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(...

Iris_Shaw的博客 7429

华为OD机试双机位C卷 - 高矮个子排队 (C++/Py/Java/Js/Go/C)

华为OD机试双机位C卷 高矮个子排队,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 高矮个子排队。

qq_45776114的博客 2160

php ajax mysql_PHP 和 AJAX MySQL 数据库实例

PHP 和 AJAX MySQL 数据库实例AJAX 可用来与数据库进行交互式通信。AJAX 数据库实例在下面的 AJAX 实例中,我们将演示网页如何使用 AJAX 技术从 MySQL 数据库中读取信息。在下拉列表中选择一个名字 (测试说明:该实例功能未实现)Select a User:Peter GriffinLois GriffinJoseph SwansonGlenn Quagmire在此列...

weixin_39714113的博客 178

OpenClaw 股票自动化交易实践指南:从原理到实战的完整技术路径

量化交易策略的开发是一个系统工程,需要综合运用金融知识、编程技能和数据分析能力。OpenClaw通过引入提示词工程技术,大大降低了策略开发的技术门槛,使得更多投资者能够参与到量化交易中来。但技术只是工具,真正决定策略成败的是对市场的深刻理解和严格的风险管理。本章系统介绍了OpenClaw环境下的策略开发方法,从提示词驱动到传统代码实现,从参数优化到回测验证,涵盖了策略开发的完整流程。提示词驱动方式适合快速验证交易想法,传统代码方式适合实现复杂的定制逻辑,两种方式可以协同使用,发挥各自的优势。

lovely_yoshino的博客 5990

“EXB文件的格式和编程“

首先,打开文件并读取文件头,然后解析文件头中的元数据信息。接下来,循环读取数据块,每次读取块头部分,解析块的大小和类型,并读取相应大小的块数据。文件头(Header):EXB文件通常包含一个文件头,用于存储关于文件的元数据信息。读取EXB文件时,首先需要解析文件头,以了解文件的属性和数据结构。总结起来,EXB文件是一种常见的二进制数据文件格式,在编程中处理EXB文件需要了解其基本结构和元数据信息。通过以上代码,您可以根据自己的需求扩展处理其他类型的数据块,或者根据EXB文件的具体规范进行解析和处理。

HackCyberX的博客 1532

js ajax php mysql数据库_PHP 和 AJAX MySQL 数据库实例

PHP 和 AJAX MySQL 数据库实例AJAX 可用来与数据库进行交互式通信。AJAX 数据库实例在下面的 AJAX 实例中,我们将演示网页如何使用 AJAX 技术从 MySQL 数据库中读取信息。在此列出用户信息。此列由四个元素组成:MySQL 数据库简单的 HTML 表单JavaScriptPHP 页面数据库将在本例中使用的数据库看起来类似这样:idFirstNameLastNameAg...

weixin_42394088的博客 194

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

前台提交数据到php mysql_Ajax提交数据至PHP,并写入到MySQL

有时候,对于html上的元素,我们不能表单直接提交给PHP,或者由于动态新增不能简单的通过Form来获取新增的表单信息。因此,就需要:1、通过js来实现对html上元素信息的抓取。2、然后通过{}和[]组成json形式的对象,通过jQuery中的Ajax提交给PHP页面。3、PHP页面通过$_POST方法获取提交的json形式对象,并进行解析,进一步处理。4、再通过mysqli对象,将PHP里处理...

weixin_34665627的博客 751

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

PHP 和 AJAX MySQL 数据库实例

AJAX 可用来与数据库进行交互式通信。 AJAX 数据库实例 在下面的 AJAX 实例中,我们将演示网页如何使用 AJAX 技术从 MySQL 数据库中读取信息。 在下拉列表中选择一个名字 (测试说明:该实例功能未实现) Select a User: Peter GriffinLois GriffinJoseph Swanson Glenn Quagmire 在此列

ogog123的博客 495

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: PHP访问MySql数据库 中级篇 Smarty技术
下一篇: STL系列之七 快速计算x的n次幂 power()的实现
MoreWindows
MoreWindows 《白话经典算法》、《秒杀多线程》作者 《白话经典算法》、《秒杀多线程》作者 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄15年 2万+粉丝 157原创
评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值