当前位置: 首页 > news >正文

PHP - AJAX 与 MySQL

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


AJAX 数据库实例

下面的实例将演示网页如何通过 AJAX 从数据库读取信息:

本教程使用到的 Websites 表 SQL 文件:websites.sql。

实例

 选择一个网站: Google /淘宝 /微博/ Facebook 

选择对应选项,用户信息会显示在这……

实例解释 - MySQL 数据库

在上面的实例中,我们使用的数据库表如下所示:

mysql> select * from websites;
+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝       | https://www.taobao.com/   | 13    | CN      |
| 3  | 微博       | http://weibo.com/         | 20    | CN      |
| 4  | Facebook     | https://www.facebook.com/ | 3     | USA     |
+----+--------------+---------------------------+-------+---------+
5 rows in set (0.01 sec)

实例解释 - HTML 页面

当用户在上面的下拉列表中选择某位用户时,会执行名为 "showSite()" 的函数。该函数由 "onchange" 事件触发:

test.html 文件代码:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<script>
function showSite(str)
{
    if (str=="")
    {
        document.getElementById("txtHint").innerHTML="";
        return;
    } 
    if (window.XMLHttpRequest)
    {
        // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        // IE6, IE5 浏览器执行代码
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","getsite_mysql.php?q="+str,true);
    xmlhttp.send();
}
</script>
</head>
<body>
 
<form>
<select name="users" onchange="showSite(this.value)">
<option value="">选择一个网站:</option>
<option value="1">Google</option>
<option value="2">淘宝</option>
<option value="3">微博</option>
<option value="4">Facebook</option>
</select>
</form>
<br>
<div id="txtHint"><b>网站信息显示在这里……</b></div>
 
</body>
</html>

showSite() 函数会执行以下步骤:

  • 检查是否有网站被选择
  • 创建 XMLHttpRequest 对象
  • 创建在服务器响应就绪时执行的函数
  • 向服务器上的文件发送请求
  • 请注意添加到 URL 末端的参数(q)(包含下拉列表的内容)

PHP 文件

上面这段通过 JavaScript 调用的服务器页面是名为 "getsite_mysql.php" 的 PHP 文件。

"getsite_mysql.php" 中的源代码会运行一次针对 MySQL 数据库的查询,然后在 HTML 表格中返回结果:

getsite_mysql.php 文件代码:

<?php
$q = isset($_GET["q"]) ? intval($_GET["q"]) : '';
 
if(empty($q)) {
    echo '请选择一个网站';
    exit;
}
 
$con = mysqli_connect('localhost','root','123456');
if (!$con)
{
    die('Could not connect: ' . mysqli_error($con));
}
// 选择数据库
mysqli_select_db($con,"test");
// 设置编码,防止中文乱码
mysqli_set_charset($con, "utf8");
 
$sql="SELECT * FROM Websites WHERE id = '".$q."'";
 
$result = mysqli_query($con,$sql);
 
echo "<table border='1'>
<tr>
<th>ID</th>
<th>网站名</th>
<th>网站 URL</th>
<th>Alexa 排名</th>
<th>国家</th>
</tr>";
 
while($row = mysqli_fetch_array($result))
{
    echo "<tr>";
    echo "<td>" . $row['id'] . "</td>";
    echo "<td>" . $row['name'] . "</td>";
    echo "<td>" . $row['url'] . "</td>";
    echo "<td>" . $row['alexa'] . "</td>";
    echo "<td>" . $row['country'] . "</td>";
    echo "</tr>";
}
echo "</table>";
 
mysqli_close($con);
?>

解释:当查询从 JavaScript 发送到 PHP 文件时,将发生:

  1. PHP 打开一个到 MySQL 数据库的连接
  2. 找到选中的用户
  3. 创建 HTML 表格,填充数据,并发送回 "txtHint" 占位符

相关文章:

  • 电线延长寿命小妙招
  • 人工神经网络文献综述,人工神经网络论文文献
  • java 带密码连接redis 单节点/集群 No reachable node in cluster报错解决
  • 如何通过UTON WALLET数字钱包创建和使用你的元宇宙身份
  • uniapp 微信小程序中授权用户手机号码
  • spring实现md5加密
  • 微信公众平台快速开发框架源码
  • DoozyUI⭐️三、DoozyUI支持的 VR SDK列表
  • InfluxDB安装以及使用
  • 嵌入式C语言编程技巧
  • 技术分享 | App常见bug解析
  • flink scala版本报错JavaConversions$.deprecated$u0020propertiesAsScalaMap
  • 基于python的学生成绩管理系统毕业设计源码071143
  • 06_sentinel—分布式系统遇到的问题
  • 食品接触材料塑料中的异氰聚酯测试
  • [译]如何构建服务器端web组件,为何要构建?
  • Druid 在有赞的实践
  • ECMAScript入门(七)--Module语法
  • Javascript基础之Array数组API
  • oschina
  • PHP 7 修改了什么呢 -- 2
  • Python_OOP
  • React as a UI Runtime(五、列表)
  • Redis在Web项目中的应用与实践
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • Zepto.js源码学习之二
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 一天一个设计模式之JS实现——适配器模式
  • 走向全栈之MongoDB的使用
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ionic异常记录
  • NLPIR智能语义技术让大数据挖掘更简单
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • #AngularJS#$sce.trustAsResourceUrl
  • #pragma pack(1)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (1)(1.13) SiK无线电高级配置(六)
  • (LeetCode C++)盛最多水的容器
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (超详细)语音信号处理之特征提取
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (算法)前K大的和
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)linux 命令大全
  • (转)为C# Windows服务添加安装程序
  • **python多态
  • .NET Core引入性能分析引导优化
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性