全栈知识点整合(php、mysql、ajax、数据格式(xml/json))

273 阅读9分钟

服务器

服务器端概念:
	简单来说就是一台PC机
	生活中使用的是 微型机
	商业/国家中使用 小型机(大概造价几十万,好的就上百万) 中型机 大型机 超级计算机(国家:天河一/二号、神威太湖之光)

	拥有服务器的方式:
		1、买 - 对小型公司遭不住
		2、买一台配置好一点的微机 - 对于小型公司推广有用,但是一天同时的访问不能太大
		3、租云服务器端 - 腾讯云/阿里云/新浪云/百度云... - 配置自选的,价格不定

  对于开发人员来说
	硬件服务器 - PC机
	软件服务器 - 中间件(软件可以将你的电脑变为一个台服务器,其他人可以访问)

软件架构:服务器重不重要

	C/S - Client客户端/Server服务器端
		举例:QQ
		      大型网络游戏
		优点:用户体验较好
		      运行稳定
		      对带宽的要求低
		缺点:占硬盘空间
		      更新过于复杂 - 服务器和客户端都要更新
	       
	B/S - Browser浏览器端/Server服务器端
		举例:网页版QQ
		      网页游戏
		优点:几乎不占硬盘
		      更新简单 - 只需要更新服务器端
		缺点:体验感相对较差(越来越好的)
		      对带宽的要求较高

XAMPP软件 - 中间件


  安装步骤:双击 -> 一路点下去
	Apache - 用于运行PHP环境的服务,点击start
		 出现错误:
			1、直接弹出一个警告框,你的电脑里缺少api-ms-win-crt-conio-l1-1-0.dll文件
			   解决:粘贴到c:/windows/sysWow64/里面
			2、错误日志:error:apache shutdown unexpectedly - 端口号被占用了
			   解决:打开:D:\xampp\apache\conf\httpd.conf文件
				 查找:ctrl+F:listen 80
				 随意换为4位数
				 建议:你能用默认端口就不要去修改他,好处:不需要写出来
			3、切忌安装时一定要安装在盘符下,不可以安装在某个文件夹内
			4、如果以上三种解放方案都不行,说明系统问题-重装系统

	TOMCAT - 用于运行java环境的服务

	如果你的apache成功开始,恭喜你,你的服务器已经开启了(私网)

	如何访问apache服务器:其实apache控制着一个文件夹:D:\xampp\htdocs
		打开浏览器:
			127.0.0.1:端口号
			localhost:端口号
			主机号:代表自己的电脑

	搭建一个自己的服务器端应用:
		把你的任意一个项目 - 复制到D:\xampp\htdocs,把之前的东西删掉

	其他人也可以来访问了:
		打开cmd:iconfig
		将你的ipv4发送到群里,让别人来访问
		172.168.20.xxx

	添加网页小图标:
		随便一张图片:名字改为:favicon.ico
		放到D:\xampp\htdocs

	修改顶级域名:- 假象(没花钱,只有自己用)
		打开C:\Windows\System32\drivers\etc\hosts
		问题1:系统文件不允许你保存,另存为到桌面,拖进去覆盖掉
		问题2:你打开是个白板,没有任何代码

mysql数据库

常用语句****

*****数据:4句以后最常用的操作
					增:INSERT INTO 表名 VALUES(字段值,...);
					    举例:INSERT INTO user VALUES(0,"鲁俊杰","123123","ljj@qq.com","1");

					删:DELETE FROM 表名 WHERE id=几;
					    举例:DELETE FROM user WHERE id=3;

					改:UPDATE 表名 SET 字段名=字段值,... WHERE id=几;
					    举例:UPDATE user SET name="雍燕",email="yongyan@qq.com" WHERE id=4;					
	
					查:3种语法:
					    SELECT * FROM 表名;//获取此表所有的数据
					    SELECT * FROM 表名 WHERE id=几;//获取id为几的那一条数据
                                                                                    SELECT 字段名,... FROM 表名;//获取此表所有的对应的字段值

MySQL - 数据库产品简介


  关系数据库 - 以表格为主
	Oracle - Oracle(甲骨文)
		主要应用于【企业级】开发市场
	MySQL - Oracle(甲骨文)
		主要应用于【互联网】开发市场 - 中小型公司的首选
	sql server - 微软
		大学讲课

  非关系型数据库 - 没有固定格式的
	是一种运动 - 反关系型数据库
	主流产品 - mongoDB

  MySQL
    最开始是由MySQL AB推出
    瞬间爆火 - 免费 简单 开源(源代码开放)
	开源的好处:
		公司:免费聘请民间大佬为你做测试、开发
		个人:查看、修改、添加源代码 - 开挂
    爆火的网站架构:LAMP - Linux + Apache + MySQL + PHP - 这四个都是免费的 - 非常让中小型公司满意
    企业级架构:Linux(AIX) + JavaEE + Oracle + weblogic - 一套架构搭建下来少说上百万 - 安全性高(银行、公安局、医院...)
    MySQL AB后期被sun公司收购
		sun公司 - 明星产品java
    sun后期被oracle公司收购了
		三个明星产品:
			oracle
			mysql - 社区版(免费)和商业版(收费)
			java

    为什么现在叫MariaDB?
	1MySQL的作者就受到了排挤、并不重视、关注
	2MySQL的作者就自己出来重做原滋原味的MySQL,但是名字不能再叫MySQL了,版权问题
	3MySQL的作者就以自己女儿的名字来命名的MariaDB

MySQL基本内容

    访问:
	1、图形化界面(更简单更方便) - 傻瓜操作
	   要求:同时打开mysql和apache
	   访问:127.0.0.1:端口号/phpmyadmin
		 localhost:端口号/phpmyadmin
		 有的同学可能打不开

	2、*****命令行方式 - 复杂很多,但是才能学到真正的SQL语句
		如何进入数据库:
			必须打开mysql
			1、打开cmd
                                                                 d:
			2、输入:cd d:/xampp/mysql/bin 回车
			3、登录:mysql -uroot -p 回车 不要加分号
			4、退出:exit


			5、学习SQL语句:关系型数据公用的SQL语句
				1、数据库:
					创建数据库:CREATE DATABASE IF NOT EXISTS 数据库名称 CHARACTER SET utf8;

					查看数据库:SHOW DATABASES;

					切换数据库:use 数据库名称;

				2、数据表:
					数据库的数据类型:
						数值:Int-整型
						      Float/Double-浮点型
						      DECIMAL-精确值
						字符串:
						      CHAR - 长度固定的
						      VARCHAR - 长度可变的
						日期:
						      DATE - YYYY/MM/DD
						      DATETIME - YYYY/MM/DD hh:mm:ss
						      TIMESTAMP - 时间戳(标识:唯一不重复的)

					创建数据库表:
						CREATE TABLE 表名(
							字段名 数据类型,
							...
						);

						举例:
						CREATE TABLE user(
							id INT PRIMARY KEY AUTO_INCREMENT,
							name VARCHAR(30),
							pwd VARCHAR(30),
							email VARCHAR(30),
							vip VARCHAR(1)
						);

						主键约束:PRIMARY KEY
						主键自增:AUTO_INCREMENT

php服务器

 php文件后缀名.php
   1、*****如何运行php文件:
		打开apache,将你的项目/文件放到htdocs文件夹中,打开浏览器输入:127.0.0.1,打开你需要的文件

		特殊:其实php文件也支持前端代码和php代码,以后我们上网的时候,看到网页的后缀.php也不必奇怪 - 比js严格

   2、php语法基础:
	1、输出方式:
		1echo(想要输出的内容); 或 echo 想要输出的内容; - 类似document.write输出在页面上
			echo只能输出4种标准类型,不能输出别的类型
		2var_dump(想要输出的内容); - 类似document.write输出在页面上,但是输出的非常详细,查看到数据类型和值
			var_dump可以输出一切数据类型,但是以后不会用到太多,太过详细了

	2、变量和常量
	       *1、变量:值可以改变
		   语法:$变量名=值;
		   注意:使用时$也不能省略

		2、常量:一旦创建后,值不能修改了
		   语法:const 常量名=值;

	3、*数据类型:
		四种标准/基本/原始类型:
			整型:Int
			浮点型:Float/Double
			布尔:Boolean
			字符串:string - 有区别
				单引号 - 只能放入纯文本

				双引号 - 支持变量,类似js中模板字符串
					echo "我的名字叫{$name}今年{$age}岁喜欢{$hobby}";

		两种复合类型:
			1Array - 数组
				创建:
				  1、直接量:$arr=[值1,...]; - 索引数组
				  2、内置函数:$arr=array( - hash数组
							key=>value,
							...
					       );
				     访问:$数组名[下标];

				     遍历:循环

			2Object - 面向对象,不需要用到面向对象开发

		两种特殊类型:
			1Resource - 资源类型,连接上数据库才会看到
			2null - 空,释放内存
					"" - 有,值为空
					null - 不存在
	
	4、运算符:几乎和js一致,唯独字符串拼接.,意味着php想要调用方法绝对不可能用.

	5、分支:完全一样:if...else  switch...case... 甚至三目依然可用

	6、循环:完全一样

	7、函数:完全一样

	8API:理论上完全一样的,但是操作却不同,不需要做任何学习和记忆,面向百度开发

全栈开发

1、前端->后端:


		前端需要发起请求:
			1、表单请求、提交
				注意:
				  1、input必须添加name属性,甚至有的人(radio、checkbox)可能还要添加value
				  2、form表单必须添加action="服务器端的文件的路径";
				  3、method到底用get还是post,和后端进行沟通
				只负责发送,不负责保存
				明天还可以用ajax发起请求
				
			2、后端 需要接收住 前端传来的 请求消息(查询字符串)
				语法:$_GET/POST/REQUEST["input的name的值"]

				REQUEST -> 请求,能接住一切请求不管是get还是post

2、后端<->数据库

php自带操作mysql的API,只需要学习4.5句话
		1、创建出连接数据库的对象
			$conn=mysqli_connect("hostname","username","userpwd","dbname");
			我们班的固定:
				$conn=mysqli_connect("127.0.0.1","root","","h52107");

		1.5、立马为创建的数据库连接设置中文编码
			mysqli_query($conn,"SET NAMES utf8");

		2、创建SQL语句:
			$sql="INSERT/DELETE/UPDATE/SELECT";

		3、某个数据要执行某个SQL语句 - 执行
			$rs=mysqli_query($conn,$sql);
			//增、删、改:结果是一个布尔值,true代表执行成功,false执行失败
			//查:问题:得到了一个我们谁都不认识的结果集对象
			      解决:php提供了一套API帮我们把不认识的结果集变成认识的对象
				       *mysqli_fetch_row(不认识的结果集);//一次只会拿到一行数据,是一个数组
				     ***mysqli_fetch_assoc(不认识的结果集);//一次只会拿到一行数据,是一个对象
					mysqli_fetch_array(不认识的结果集);//一次只会拿到一行数据,既可以用索引下标也可能有hash下标
					
					固定套路:
						while(($row=mysqli_fetch_xxx($rs))!=null){
							var_dump($row);
							echo "<br>";
						}

		4、断开和数据库的连接
			mysqli_close($conn);


扩展:多个表单想要提交到同一个php,但是又想区分开功能:需要用到一标签
	<input type="hidden" name="自定义" value="自定义

ajax(原生)

   同步交互:用户向服务器端发起请求的时候直到服务器端进行响应的全过程,用户是不可以做其他事情的(等)
	     典型:表单提交请求、网址请求 - 都属于同步交互

   异步交互:用户向服务器端发起请求的时候直到服务器端进行响应的全过程,用户是可以做其他事情的(不等)
	     典型:ajax请求
ajax:asynchronous javascript and xml:直译:异步的javascript和xml - 前端技术
   不严格的定义:页面不会完整刷新,只会导致局部页面发生改变
   我们早就见过异步技术/异步代码了:
	1、定时器:定时器里面的内容在耗时也不会卡主后续代码 - 做效果
	2、ajax:目的:在不刷新页面的情况下和服务器端进行交互 - 可以将服务器端的数据放到前端
        
   好处:1、不会让用户等待
	      2、不会刷新页面也能和服务器端进行交互(比表单强)
	      3、将服务器端的数据获取到前端页面
1、创建ajax的核心对象XMLHttpRequest;
		var xhr=new XMLHttpRequest();

	2、建立和服务器端的连接
		xhr.open("GET/POST","xx.php");

	3、向服务器端发送请求消息
		xhr.send();

		特殊:21GET请求:xhr.send()会失效,但是还不能省略,必须写为xhr.send(null);请求消息需要放到url后面添加?key=value&key=value...
				xhr.open("GET","url?key=value&...");
				xhr.send(null);

			2POST请求:xhr.send可用,但是必须在之前加上一句话设置请求头部
				xhr.open("POST","url");
				xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
				xhr.send("key=value&...");

	4、绑定状态监听事件:
		xhr.onreadystatechange=()=>{
			if(xhr.readyState==4&&xhr.status==200){
				xhr.responseText;//难在你拿到了数据要干什么?
			}
		}

ajax(jquery封装后的)

不管是哪一层简化都需要先引入jquery.js文件

第一层简化最麻烦,最复杂,最无敌

	$.ajax({//解构赋值,暂时理解为,我们传入一个对象是一个配置信息
		"url":"xx.php",//要连接的服务器的路径,必写参数
		"type":"GET/POST",//请求的类型,可以省略不写,默认为GET
		"data":"key=value&key=value",//要向服务器发送请求消息
		"dataType":"HTML/XML/JSON/JSONP",//服务器端响应的消息要解析为什么数据格式,默认值为HTML
		"jsonp":"通行令名字",//默认为callback
		"success":(data)=>{//ajax成功的时候执行:形参data自动保存住服务器端响应的消息,必写参数
			要干啥看你自己
		}
	})

第二层:再次简化:有3个方法:唯一的缺点就是不能做跨域


	1、$("xx").load("url","data",callback); - 垃圾
		缺点:1、数据会直接放在xx元素上
		     2、无法设置GET/POST,只能默认为GET
		     3、无法脱衣服

	2、$.get("url","data",callback,"JSON")

	3、$.post("url","data",callback,"JSON")

第三层: - 特殊用法:合作开发

      【同源策略】:浏览器的保护机制,要求协议、域名、端口都要相同,只要有一个不同则会触发同源策略的保护
      【跨域】:跨过同源策略:能够访问别人电脑上的数据库

	前端:ajax,jQuery封装的ajax里面,自带一个jsonp的技术:帮助我们跨域
		$.getJSON("url?key=?","data",callback)

		注意:1、?是固定写法,jQuery中jsonp会自动将他赋值为一个通行令函数

	后端:需要接收住前端传来的通行令函数,并且调用此函数放行
		echo $_GET["key"]."(".JSON_encode($arr).")";

	两者需要沟通:
	  1、通行令的名字叫什么
	  2、后端ip完整的地址要给前端:打开cmd:ipconfig:ipv4
	  3、告诉前端需要说什么话
          
   
   
   目的:1、简化版ajax
      2、如何使用ajax去拿去别人电脑上的数据

滚动监听触发ajax

   前端:
			var count=0;
			$(window).scroll(()=>{
				var sh=$(window).scrollTop()+innerHeight;//获取当前滚动条滚动到底部的位置
				var bh=$("body").height();//完整的页面的高度
				if(sh==bh){
					$.get("05server.php",`count=${count}`,data=>{
						//拿到data你要干啥子
						count+=2;
					},"JSON")
				}
			})

   后端:
	$sql="SELECT * FROM 表名 ORDER BY id DESC LIMIT 开始下标,个数;";

数据格式

XML

   1、面试题:HTMLXHTMLDHTMLXML分别是什么?
	HTML - 网页
	XHTML - 更严格的网页
	DHTML - 动态特效的网页:并不是新技术、新概念,现有技术的整合统称:HTML+CSS+JS(DOM) - 离线网页也就有动态特效
	XML - 配置文件 | 数据格式

   2、如何使用xml,其实就是一个后缀.xml的文件
	1、创建.xml文件
	2、必须写上声明标签:<?xml version="1.0" encoding="utf-8"?>
			version - 版本:目前的版本只有1.01.11.1升级并不理想,没有人使用,以后都不必在学了,已经淘汰了
			encoding - 编码格式
	3、必写写上一个根标签,而且只能写一个根标签(双标签),没有任何的预定义标签,所有的标签全都自定义
			<root></root>
	4、里面你随意。想放什么标签就放什么标签
	5、恭喜你,你学完了

	开发中:正常来说后端会想办法将数据库的数据整理为一个xml格式

	前端:依然使用ajax去获取xml:
		1、url 写 "xx.xml";
		2、xhr.responseXML 获取响应的xml文件,跟DOM差不多
		3、可以使用【核心DOM】去找到自己需要的部分

json

javascript Object Notation:js对象表示法,本身就是js的一部分
	作用:数据格式 类似于 XML
	好处:比XML 更简洁、更快、更容易解析 - 一个优秀的数据格式能极大的提升程序员的开发效率

	1、哪些属于JSON字符串:后端把数据库的数据取出来整理为一个JSON字符串:
		1'[1,2,3,4]'
		2'{"key":value,...}'
		3'[{},{},{},{}]'
		4'{"names":[],"ages":[],...}'

	2PHP如何将数据变为JSON字符串:
		echo JSON_encode($arr);
		var jsonTxt=JSON.stringify(jsonObj);//node.js以后你想要穿衣服就靠它

	3、前端依然使用ajax获取响应数据:
		xhr.responseText;//json字符串

	   把json字符串变为json对象 - 脱衣服:2eval("("+xhr.responseText+")");
	       *JSON.parse(xhr.responseText);