//JQuery入口函数
$(document).ready(function() {
// 获取当前元素的索引值
var thisindex = $(this).index();
//获取button的文本值
btn.text();
//修改button的文本值
btn,text('文本');
//在文本后追加元素
btn.text().append(" <span class='caret'></span>");
});
//mysql修改密码
set password for username @localhost = password(“newpwd”);
PHP include 和 require 语句
在 PHP 中,您可以在服务器执行 PHP 文件之前在该文件中插入一个文件的内容。
include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码。
include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:
require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。
包含文件省去了大量的工作。这意味着您可以为所有网页创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。
小皮中mysql启动又自动停止
借鉴博文
主要是与本地已经存在的mysql服务冲突的原因。
可以理解成单台设备上无法满足同时跑两个mysql
(1)这里将本地mysql先关闭,然后使用小皮的mysql
(2)如后续有需要,再关闭小皮的mysql,打开本地的
步骤:
(1)关闭本地mysql服务:
管理员身份运行cmd,切换到mysql/bin目录下
net stop Mysql
//这里的服务名称根据自己系统服务里的名称
sc delete Mysql
//将服务从windows的服务注册表中删除
(2)在phpstudy中重启mysql,成功
后续有使用本地mysql的需求时,首先在phpstudy中关闭数据库服务。
(3)cmd管理员身份运行,切换至mysql/bin目录
mysqld --install Mysql
//重新创建服务名Mysql
net start Mysql
//启动服务,切换至本地mysql成功
复制文件时出现1813 - Tablespace ‘repaire
.dormitory_info
’ exists.原因
原本文件的空间还在,把文件里对应ibd删掉即可。
Access denied for user ‘root’@‘localhost’ (using password: YES/NO) 的原因以及解决方案
Access denied for user ‘root’@‘localhost’ (using password: YES/NO),还是先翻译一下比较好,意思为无权限使用root账号本地登录MySQL, 说人话,就是密码校验未通过,括号内是:使用密码:是/不是。账号密码有误
php连接数据库:
$conn = new mysqli('主机', '用户名', '密码', '数据库名');
//例如
$conn = new mysqli('localhost', 'xianmin', '123456', 'Repaire');
//判断是否连接成功
if ($conn -> connect_errno) {
printf("Connect failed: %s\n", $conn->connect_error);
exit();
}
else{
echo "终于连上了!";
}
PHP查询操作
//包含数据库连接文件,连接数据库
include('coon.php');
//检测用户名及密码是否正确SQL语句
$sql="select * from user_info WHERE user_id='$id'and user_password='$password'";
//在conn连接的数据库中进行查询操作
// 查询操作
$result=$conn->query($sql);
// 输出查询数据
while($row = $result->fetch_assoc()) {
echo $row["user_name"];
}
外键的删除时和更新时:(参考博客)
删除时属性:默认(RESTRICT),RESTRICT,No ACTION,CASCADE,SET NULL属性。
- 当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。例如某一课程被删除,若学生表里某学号仍有该门课程,则不能删除该课程(课程号是学生表的外键)
- 当取值为Cascade时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。
- 当取值为Set Null时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。
更新时属性:默认(RESTRICT),RESTRICT,No ACTION,CASCADE,SET NULL属性。
- 当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。
- 当取值为Cascade时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。
- 当取值为Set Null时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。
外键创建时数据类型、字段名、设置(填充0)、引擎都要完全一致。
外键的命名规范:fk_+从表名+_+主表名
FK_ForeignTable_PrimaryTable_On_ForeignColumn
直白的翻译就是,ForeignTable在ForeignColumn列上引用了PrimaryTable的主键。(参考博客)
设置php返回json类型数据
1.设置header:text/json
//返回json类型数据
header('content-type:text/json;charset=utf-8');
- json_encode把json对象转化为json字符串再用echo传给ajax:参考博文
echo json_encode($a);
3.ajax接收到数据后通过JSON.parse()将json字符串再转化为json对象:参考博文
var json = JSON.parse(xhr.responseText);
4.遍历json对象:参考博文
$.each(json, function(index, value) {
alert(value.name);//value为元素,name为属性
}
只能用这种方式获得json的数据
动态生成表格
var tab = $(".usertable>tbody"); //获取到了表格中tbody元素的jQuery对象
var tr = ' <tr > ' +
'<td >' + xuhao + '</td>' +
'<td >' + value.admin_id + '</td>' +
'<td > ' + value.name + ' </td>' +
'<td >' + value.sex + '</td>' +
'<td >' + value.type + '</td>' +
'<td >' + value.tel + '</td>' +
'<td >' + '</td>' +
'<td ><button name ="delBtn" >删除 </button></td > ' +
' </tr>';
tab.append(tr); /*向表格内部末尾追加一个行元素使用append*/
jQuery获取按钮上的文字.text()
jQuery去除文本空白字符参考博文
.trim()去除文本首尾空白字符.replace(/\s/g, "")去除之间空白
地址拼接参数参考博文
常的url地址参数拼接格式是(使用“?” 隔开地址与参数、 “&”符号来拼接参数,【参数名=参数值】):
http://baidu.com?flag=1&page=2
jquery动态添加元素无法触发绑定事件的解决方案(参考博客)
$("body").on("click", ".newBtn", function() {
alert('这里是动态元素添加的事件');
});
//这里的ParentEle是 thisEle的父辈元素或者祖先元素,ParentEle可以是document,也可以是body等。
//注意:如果此时调用的函数是外部定义好的函数,那在调用的时候不要加(),不然会跳过点击事件直接触发函数
JQuery获取单选框的值(参考博客)
获取单选框的值有三种方式:
1、$('input:radio:checked').val();
2、$("input[type='radio']:checked").val();
3、$("input[name='rd']:checked").val();
JQuery复合选择器(参考博客)
简单的来说:
- 子代选择器:父代>子代
- 后代选择器:祖代 后代
- 组合选择器:选择器1,选择器2,选择器3,….
- 后面兄弟选择器:当前元素~后面元素
- 紧跟兄弟选择器:当前元素+紧跟元素
获得表格指定行指定列的值(参考博客)
$("table").find("tr").eq(i-1).find("td").eq(j-1).text(); // 注意-1是因为index从0开始计数
$(this).parents("tr").find("td").eq(1).text();//获取当前行的指定单元格的值
限制面板高度实现滚动(参考博客)
overflow-y: auto
php操作mysql
1.删除数据
mysqli_query($con,"DELETE FROM Persons WHERE LastName='Griffin'");
2.插入数据
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
jQuery刷新页面(参考博客)
window.location.reload()刷新当前页面.
parent.location.reload()刷新父亲对象(用于框架)
opener.location.reload()刷新父窗口对象(用于单开窗口)
top.location.reload()刷新最顶端对象(用于多开窗口)
jQuery属性选择器使用变量要用加号连接,单选框设置如下
$("input[type=radio][name=modifySex][value=" + value.sex + "]").attr("checked", 'checked');
jQuery设置display属性:
.css('display','none')
jquery删除div元素向div添加元素 参考博客
jQuery remove() 方法删除被选元素及其子元素。
//点击加号图标为管理员新增管理区域
$('.addAdminManagerLouBtn').click(function() {
$('.defaultArea').eq(0).clone().appendTo('.addAdminManagerLou');
var button = "<button type='button' class='btn btn-default dropdown-toggle minusAdminManagerLouBtn' title='删除该选项'><span class='glyphicon glyphicon-minus-sign' aria-hidden='true'></span></button>";
$('.addAdminManagerLou').append(button);
});
//点击减号图标为删除管理区域和这个减号(动态生成的)
$("body").on("click", ".minusAdminManagerLouBtn", function() {
$(this).prev().remove();
$(this).remove();
});
jquery修改a标签 .text()
ajax使用:获得返回值:设置为同步参考博客
var unm;
function Get(){
$.ajax({
async:false,
type:"post",
contentType:"application/json",
url:"Webservices/WS_BBS_Login.asmx/GetUserInfo",
data:"{}",
dataType:"json",
success:function(result){
if(result!=null){
alert(result);//这里肯定能看到 1
num=result; //num 是有值的....
return result;
}
}
});
}
使用同步会出现chrome控制台警告:Synchronous XMLHttpRequest on the main thread终极解决办法
php:session
在调用session之前要先启动session
session_start();
$_SESSION['one']=value1;
$_SESSION['two']=value2;
在php文件中直接使用$_SESSION[‘one’]即可得到one的值(参考博客)
jq克隆元素(参考博客)
$("b").clone().prependTo("p");
//克隆$("b"),并将克隆体加入p中
注意:$(“b”)选到的可能是多个元素,用eq(index)来选择克隆哪个
jquery页面跳转
//跳转是用window对象里的location属性来处理的,
window.location.href = “abc.html"
关于获取回调函数中的值或者.post()的返回值问题
如果不是需要直接让值显示在页面而只是引用,可以直接在php文件中引用相应php文件,相当于引用php代码段,类似于引用连接数据库文件。
例如,我要修改用户数据,其中用户的房间id是通过页面上的地址查询数据库得到的,并不能直接使用,所以写一个getUserRoomId.php,里面存放的是通过地址查询数据库得到房间id的代码段,再在修改用户信息的php中引用getUserRoomId.php,这样,修改信息的php文件中就有房间id数据了,
//getUserRoomId.php
<?
include('coon.php');
// 这三个参数直接由引入这个文件的文件提供
// $domName = $_POST['domName'];
// $louName = $_POST['louName'];
// $roomName =$_POST['roomName'];
// 查宿舍区id
$sql="select dormitory_id from dormitory_info WHERE dormitory_name='$domName'";
$result=$conn->query($sql);
while($row = $result->fetch_assoc()) {
$domId=$row['dormitory_id'];
// echo "dom:".$domId;
}
//楼id
$sql="select lou_id from lou_info WHERE dormitory_id='$domId' and lou_name='$louName'";
$result=$conn->query($sql);
while($row = $result->fetch_assoc()) {
$louId=$row['lou_id'];
// echo "lou:".$louId;
}
$sql="select room_id from room_info WHERE lou_id='$louId' and room_name='$roomName'";
$result=$conn->query($sql);
while($row = $result->fetch_assoc()) {
$room_id=$row['room_id'];
// echo $room_id;
}
?>
//modifyUser.php
<?
$id=$_POST['id'];
$m_id=$_POST['m_id'];
$name=$_POST['name'];
$pwd=$_POST['pwd'];
$sex=$_POST['sex'];
$tel=$_POST['tel'];
$domName=$_POST['domName'];
$louName=$_POST['louName'];
$roomName=$_POST['roomName'];
//引入
include('getUserRoomId.php');//提供room_id参数
$sql="UPDATE user_info SET id='$m_id' , name ='$name', pwd='$pwd', sex='$sex', tel='$tel',room_id= $room_id WHERE id='$id'";
mysqli_query($conn,$sql);
?>
//修改函数
$.fn.modifyUser = function($id, $m_id, $name, $pwd, $sex, $tel, $domName, $louName, $roomName) {
// console.log("22222");
$.post("/Repair/php/modifyUser.php", {
id: $id,
m_id: $m_id,
name: $name,
pwd: $pwd,
sex: $sex,
tel: $tel,
domName: $domName,
louName: $louName,
roomName: $roomName
},
function(data) {
console.log("user成功!" + data);
});
}
parseInt():jquery转换字符串为整型
如果突然出现了用户代理样式表,有可能是因为不小心移错盒子,导致结构不匹配。
jquery去掉最后的字符串:rtrim($arr_str, ",")
(参考博客)
购物车数字加减按钮(参考博客)
//html
<ul class="btn-numbox">
<li><span class="number">层数:</span></li>
<li>
<ul class="count">
<li><span id="num-jian" class="num-jian glyphicon glyphicon-minus" aria-hidden="true"></span>
</li>
<li><input type="text" class="input-num" id="input-num" value="0" /></li>
<li><span id="num-jia" class="num-jia glyphicon glyphicon-plus" aria-hidden="true"></span>
</li>
</ul>
</li>
</ul>
//css
.defaultLou {
display: inline-block;
}
ul {
list-style-type: none;
}
.btn-numbox li {
float: left;
}
.btn-numbox li .number,
.kucun {
display: inline-block;
font-size: 12px;
color: #808080;
vertical-align: sub;
}
.btn-numbox .count {
overflow: hidden;
margin: 0 0px 0 0px;
}
.btn-numbox .count .num-jian,
.input-num,
.num-jia {
display: inline-block;
width: 34px;
height: 34px;
line-height: 34px;
text-align: center;
font-size: 18px;
color: #999;
cursor: pointer;
border: 1px solid #e6e6e6;
}
.btn-numbox .count .input-num {
width: 34px;
height: 34px;
color: #333;
border-left: 0;
border-right: 0;
}
.input-num {
margin-top: 0 !important;
}
.defaultLou {
width: 78%;
display: inline-block;
padding: 0;
margin: 0;
}
.floorNum,
.roomNum {
display: inline-block;
height: 34px;
padding-top: 10px;
line-height: 34px;
}
.defaultLou .inputadd {
width: 25%;
}
.addLouBtn {
padding: 0;
border: 0;
margin: 0 !important;
background-color: transparent;
}
//jquery
$("body").on("click", ".num-jian", function() {
$mid = $(this).parent().next().find('input');
if ($mid.val() > 0) {
$mid.val($mid.val() - 1);
} else {
$mid.val(0);
}
});
$("body").on("click", ".num-jia", function() {
$mid = $(this).parent().prev().find('input');
$mid.val(parseInt($mid.val()) + 1);
});
MySQL给非主键增加唯一性约束(参考博客)
1、建表时加
CREATE TABLE `member` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(18) NOT NULL ,
`phone` varchar(18) NOT NULL unique,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2、建表后改
alter table member add unique(phone);
3.使用Navicat工具添加索引
在navicat中建外键时,保存后就全部消失的解决方法(参考博客)
设计表的时候,要把选项里面的引擎选为InnoDB
jquery模态框嵌套模态框:(参考博客)
手动显示模态框:
$("#btn2").click(function(){
$("#show2").modal("show");
});
jquery:.post()
$.post("/Repair/php/modifyAdmin.php", {
id: $id,
m_id: $m_id,
name: $name,
pwd: $pwd,
sex: $sex,
tel: $tel
},
function(data) {
// console.log("成功!" + data);
parent.location.reload();
$('#myModal3').modal('hide');
});
按钮点击事件的注意事项
如果点击按钮A事件里包含B按钮点击,那么点击一次A,点击模态框里的B,B触发一次;如果直接关闭不刷新,再次点击A按钮,再点击B按钮,B按钮将直接被触发两次(因为相当于点击了两次A按钮),以此类推。所以模态框里的按钮点击事件不刷新的话最好放在触发按钮事件外面。
javascript中html字符串转化为jquery dom对象的方法(参考博客)
var area = "<div class='defaultArea'><div class='input-group-btn addAdress domul'><button type='button' class='btn btn-default dropdown-toggle domName ' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>请选择宿舍区<span class='caret'></span></button><ul class='dropdown-menu domUl'></ul></div><div class='input-group-btn addAdress louul'> <button type='button' class='btn btn-default dropdown-toggle louBtn' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>请选择宿舍楼<span class='caret'></span></button><ul class='dropdown-menu'> <li><a href='#'>请先选择宿舍区</a></li></ul> </div></div>";
$area2=$(area);//$()就把area转换成JQUery对象了。
清空文本可以用.html(),但清空子元素必须用.children().remove()。
PHPforeach 遍历数组
示例如下:
<?php
$array = [0, 1, 2];
foreach ($array as &$val){ // 遍历数组
echo $val;
}
?>
在一个js中调用另一个js文件的方法
在HTML中先后引入a.js和b.js,b中可以直接使用a中的方法
input标签不能换行!换行要用textarea
Jquery 获取当前时间参考博客
$.fn.getNowTime = function() {
var data = new Date();
var year = data.getFullYear();
var month = data.getMonth() + 1;
var date = data.getDate();
var h = data.getHours();
var m = data.getMinutes();
var s = data.getSeconds();
var time = year + '/' + month + '/' + date + ' ' + h + ':' + m + ':' + s;
console.log(time);
return time;
};
mysql中错误:1452 : Cannot add or update a child row: a foreign key constraint fails 的解决方法
报错原因:表里已经有了数据,然后外键那列可能是空的,也可能那里的数据不是对应主表里的,也就是说,主表里没有外键那列的的某些数据,这不就出大问题了吗?所以添加外键的时候最好是没有数据然后把外键设可以null。
jquery 设置display显示(block)时,样式发生改变
设置table为显示(block)时,table的样式变了,显示时设置为.scc('display','')
,样式不会变,后查看网页发现此时的table的display为"table"。
display设置为空时显示的应是元素的默认样式。
让div垂直居中:子绝父相-设置高度-通过top、bottom定位
ajax上传文件
$content = iconv(“GBK”, “UTF-8”, $content);
//利用FormData对象上传文件
$.fn.postPhoto = function($photo) {
console.log($photo);
var fd = new FormData();
fd.append("photo", $photo)
$.ajax({
type: "post",
url: "/Repair/php/user_php/postPhoto.php",
data: fd,
cache: false,
processData: false,
contentType: false,
success(data) {
console.log(data);
// id = data.trim();
},
error(data) {
console.log("shibai" + data);
}
});
};
//php
<?php
header ("Content-Type:text/html;charset=utf-8");
print_r(($_FILES));
//获取文件名
//转换编码防止中文乱码(iconv把对象转化成GBK再存储,存储进去的是gbk再被读出来就不会出现中文乱码)
$name=iconv('UTF-8','gb2312',$_FILES['photo']['name']);
move_uploaded_file($_FILES['photo']['tmp_name'],'../../images/repaire/'.$name);
// move_uploaded_file($_FILES['photo']['tmp_name'],'./files/'.$_FILES['photo']['name']);
?>
//运行结果:
Array
(
[photo] => Array
(
[name] => 微信图片_20211107090056.jpg
[type] => image/jpeg
[tmp_name] => C:\Windows\php83EF.tmp
[error] => 0
[size] => 43887
)
)
上传图片框jquery 实现图片上传,并在前端显示出来
使用jquery操作元素的css样式(获取、修改等等)
判断元素显示与隐藏
.is(':hidden'));
.is(':visible');
ajax传递数组给php(参考博客)
//ajax:把数组转化
var postdata = JSON.stringify(array);
//php:把接收的数据转化为数组
$dataa = $_POST[‘postdata ’];
$arr= json_decode($dataa ) ;
//这样arr就是数组形式了
获取新插入数据库的数据的id
(1)id是递增的,可以用max,但是存在同步问题,如果同时添加可能会因为时间问题出现错误
(2)使用INSERT_LAST_ID();获取上一次插入数据的id,如果操作时相当于修改,则会返回原始id,无意义。
如果是用PHP操作数据库,那么获取其id=$row[‘INSERT_LAST_ID()’],数据库语句为"SELECT INSERT_LAST_ID(); "不需要添加from什么表,因为获取的是整个数据库最新insert的数据的id.