分类归档 JavaScript

通过清心醉

表单提交的基础JS/PHP双重验证

首先得有个表单:

<form action=”” method=”post”>
<table align=”center” width=”80%” border=”1″ cellpadding=”2″ cellspacing=”0″>
<tr><td>商家用户名</td><td><font color=”red”><?php echo $this->user[‘user’]?>(不可修改)</font></td>
<td>商家店名</td><td><font color=”red”><?php echo $this->user[‘name’]?>(不可修改)</font></td></tr>

<tr>
<td>商家地址</td><td><input type=”text” name=”add” value=”<?php echo $this->user[‘add’]?>” style=”width:100%” id=”qxz2″ onchange=”qxzadd()” maxlength=”20″/></td>
<td>商家邮箱</td><td><input type=”text” name=”mail” value=”<?php echo $this->user[‘mail’]?>” id=”qxz1″ onchange=”qxzemail()”style=”width:100%” maxlength=”30″/></td>
</tr>

<tr>
<td>商家手机</td><td><input type=”text” name=”phone” value=”<?php echo $this->user[‘phone’]?>” id=”qxz0″ onchange=”qxzphone()” style=”width:100%” maxlength=”11″/></td>
</td><td>商家热线</td><td><input type=”text” name=”tel” value=”<?php echo $this->user[‘tel’]?>” id=”qxz3″ onchange=”qxztel()” style=”width:100%” maxlength=”18″/></td>
</tr>

<tr>
<td>商家密码</td><td><input type=”text” name=”password” value=”” id=”qxz4″ onchange=”qxzpass()” style=”width:100%” maxlength=”16″ placeholder=”默认不修改.只允许英文和数字”/></td>
<td>修改资料</td><td><center><input type=”submit” value=”修改” onclick=”post_sys()” style=”width:100%”/></center></td>
</tr>
</table>
</form>

里面的PHP值不管了 就是作者MVC设置的

然后对每个环节进行JS控制:

function qxzphone() //实时检测手机号码
{
var x=document.getElementById(“qxz0”).value; //获取表单ID=PHONE的VALUE数值
if(isNaN(x)) //判断是否为数字
{
alert(“请输入11位数字的手机号”);
document.getElementById(“qxz0″).value=””; //重写为空
return false;
}
else
{
if(x.length!=11) //判断数值长度
{
alert(“您输入的手机号不足11位数”);
document.getElementById(“qxz0″).value=””; //重写为空
return false;
}
else
{
var mreg = /^(((13[0-9]{1})|159|153|158)+\d{8})$/; //正则表达式判断手机号的合法性
if(!mreg.test(x)) //用正则判断phone的值 ,如果是11位数但号码是乱写的
{
alert(“您输入的手机号有误”);
document.getElementById(“qxz0″).value=””; //重写为空
return false;
}
else
{
//alert(‘正确’);
return true;
}
}
}
}
function qxzemail() //邮箱格式判断
{
var mail=document.getElementById(“qxz1”).value;
var mreg=/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
if(!mreg.test(mail))
{
alert(“邮箱格式不正确!”);
document.getElementById(“qxz1″).value=””; //重写为空
return false;
}
else
{
//alert(“OKOK”);
return true;
}
}

function qxzadd()
{
var add=document.getElementById(“qxz2”).value;
if(add.length<1)
{
alert(“商家地址为空!”);
document.getElementById(“qxz2″).value=””; //重写为空
return false;
}
else if(add.length<4)
{
alert(“地址长度小于4”);
document.getElementById(“qxz2″).value=””; //重写为空
return false;
}
else
{
return true;
}
}

function qxztel()
{
var tel=document.getElementById(“qxz3”).value;
var mreg=/^((0\d{2,3})-)(\d{7,8})(-(\d{2,3,4}))?$/;
//正则表达式,区号0+(2-3位)-号码(7-8位)-分机(3-4位)
var mreg1=/^((0\d{2,3})-)(\d{7,8})?$/; //无分机号码判断
if(tel.length==null||tel.length==undefined||tel.length<1) //如果为空,表示没有固话,直接返回真结束
{
//alert(“商家固定电话为空”);
return true;
}
else if(!mreg1.test(tel)) //如果判断无分机号码不正确
{
if(!mreg.test(tel)) //如果有分机号码但格式不正确
{
alert(“号码不正确!”);
document.getElementById(“qxz3″).value=””; //重写为空return false;
}
else
{
//alert(“号码正确,并且是带有分机号码的!”);
return true;
}
}
else
{
return true;
}
}

function qxzpass()
{
var pass=document.getElementById(“qxz4″).value;
var mage = RegExp(/[(\ )(\~)(\!)(\@)(\#)(\$)(\%)(\^)(\&)(\*)(\()(\))(\-)(\_)(\+)(\=)(\[)(\])(\{)(\})(\|)(\\)(\;)(\:)(\’)(\”)(\,)(\.)(\/)(\<)(\>)(\?)(\)]+/);
//密码禁止非法字符判断
var zhcn=/.*[\u4e00-\u9fa5]+.*$/;//判断是否包含有中文
if(pass.length==null||pass.length==undefined||pass.length<1)
{
return true; //密码为空
}
else if(pass.length<8||pass.length>16)
{
alert(“密码必须大于8小于16”);
document.getElementById(“qxz4″).value=””; //重写为空
return false;
}
else
{
if(mage.test(pass))
{
alert(“包含特殊字符,密码只能为数字/英文 \n 取消修改密码”);
document.getElementById(“qxz4″).value=””; //重写为空
return false;
}
else if(zhcn.test(pass))
{
alert(“包含中文字符,密码只能为数字/英文 \n 取消修改密码”);
document.getElementById(“qxz4″).value=””; //重写为空
return false;
}
else
{
return true;
}

}
}

function post_sys() //提交数据按钮
{
if(qxzphone()==true&&qxzadd()==true&&qxzemail()==true&&qxztel()==true&&qxzpass()==true) //如果5个参数的判断结果都为真
{
var qxz=new Array();//定义数组
for(i=0;i<5;i++)
{
qxz[i]=document.getElementById(“qxz”+i).value; //循环获取用户输入的数据到数组
}
//在这里循环获取的数据会用在变量str中
/*
for (i=0;i<qxz.length;i++) //测试循环输出数据
{
document.write(qxz[i] + “<br />”);
}
*/
//开始请求AJAX发送数据包!
var url=”/shangjia/index.php?controller=user&action=userform”; //请求的URL接收方法为user控制器的userform方法
var str=”phone=”+qxz[0]+”&email=”+qxz[1]+”&add=”+qxz[2]+”&tel=”+qxz[3]+”&pass=”+qxz[4]; //创建POST数据的字符串连接
var ajax=false;
//开始初始化XMLHttpRequest对象开始
if(window.XMLHttpRequest) { //Mozilla 浏览器
ajax = new XMLHttpRequest();
if (ajax.overrideMimeType) {//设置MiME类别
ajax.overrideMimeType(“text/xml”);
}
}
else if (window.ActiveXObject) { // IE浏览器
try {
ajax = new ActiveXObject(“Msxml2.XMLHTTP”);
} catch (e) {
try {
ajax = new ActiveXObject(“Microsoft.XMLHTTP”);
} catch (e) {}
}
}
if (!ajax) { // 异常,创建对象实例失败
window.alert(“不能创建XMLHttpRequest对象实例.”);
return false;
}
//对象创建结束
//正式开始数据请求!!
ajax.open(“POST”, url, true); //打开POST请求
ajax.setRequestHeader(“cache-control”,”no-cache”); //禁止缓存
ajax.setRequestHeader(“contentType”,”text/html;charset=uft-8″) //指定发送的编码
ajax.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”); //POST请求头
ajax.send(str); //开始发送POST数据
ajax.onreadystatechange = function()
{
//如果执行状态成功,那么就把返回信息写到指定的层里
if (ajax.readyState == 4 && ajax.status == 200) {
//msg.innerHTML = ajax.responseText;
//alert(“数据POST成功!”);
alert(ajax.responseText);
}
}
//数据请求完毕,数据在方法里执行.
}
else
{
alert(“请确认是否有数值填写错误!”);
}
}

请求的URL是MVC的

在控制器的方法里,还有多个方法进行判断

/*
* 判断邮件类型,需要一个参数为判断的变量值
*/
protected function email_type($email) #判断邮件格式
{
if(preg_match(“/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/”,$email))
{
return true; #返回真
}
else
{
return false; #返回假
}
}

/*
* 判断手机号码类型,参数为判断的手机号码
*/
protected function phone_type($phone)
{
if(preg_match(“/^(((13[0-9]{1})|159|153|158)+\d{8})$/”,$phone))
{
return true;
}
else
{
return false;
}
}

/*
* 判断电话号码格式
*/
protected function tel_type($tel)
{
if (!preg_match(“/^((0\d{2,3})-)(\d{7,8})?$/”,$tel)) //如果没有分机号码也不正确
{
if(!preg_match(“/^((0\d{2,3})-)(\d{7,8})(-(\d{2,3,4}))?$/”, $tel)) //如果有分机号码还是不正确
{
return false;
}
else
{ //有分机号码的.号码正确
return true;
}
return false;
}
else
{
return true;
}
}

/*
* 商家地址字符长度判断
* 第一个参数为商家地址,第二个为最少字数,默认为4个
*/
protected function add_type($add,$num=4)
{
$o=mb_strlen($add,’UTF8′); //获取商家长度
if ($o<$num)
{
return false;
}
else
{
return true;
}
}

protected function pass_type($pass,$num=8)
{
if(preg_match(“/[\’.,:;*?~`!@#$%^&+=)(<>{}]|\]|\[|\/|\\\|\”|\|/”,$pass)) //判断密码里是否有包含特殊字符
{
return false;
}
else if(preg_match(“/[\x7f-\xff]/”, $pass))
{
return false;
}
else
{
return true;
}
}

这样在接收的页面,就可以进行方法判断了,只要一个不符合要求,就不写入数据库

至于密码这一块,符号的定义可以自由截取部分,比如逗号是可以使用的等等.

使用JS/PHP双重判断的好处就是,别人恶意提交了AJAX请求,一样会面临被攻击的危险.

 

通过清心醉

17-js单击html指定元素时触发事件

<!–
长按触发事件:
onmousedown, onmouseup 以及 onclick 构成了鼠标点击事件的所有部分。首先当点击鼠标按钮时,会触发 onmousedown 事件,当释放鼠标按钮时,会触发 onmouseup 事件,最后,当完成鼠标点击时,会触发 onclick 事件。
–>
<div onmousedown=”mDown(this)” onmouseup=”mUp(this)” style=”background-color:green;color:#ffffff;width:90px;height:20px;padding:40px;font-size:12px;”>点我变颜色</div>

<script>
function mDown(obj)
{
obj.style.backgroundColor=”red”;
obj.innerHTML=”我变红色拉.”;
}

function mUp(obj)
{
obj.style.backgroundColor=”green”;
obj.innerHTML=”你不点了我又变绿色了.”;
}
</script>

通过清心醉

16-js鼠标移至HTML元素上方或移出元素时触发事件

<h1><div onmouseover=”mOver(this)” onmouseout=”mOut(this)” style=”background-color:green;width:320px;height:120px;padding:40px;color:#ffffff;”>想要知道密码鼠标移过来</div></h1>

<script>
function mOver(obj)
{
obj.innerHTML=”密码没有哦,真对不起,因为是空!”;
}

function mOut(obj)
{
obj.innerHTML=”想要知道密码鼠标移过来”;
}
</script>

<!–
onmouseover 和 onmouseout 事件可用于在用户的鼠标移至 HTML 元素上方或移出元素时触发函数。
–>

通过清心醉

15-js判断手机号码

<script>
function mynumber()
{
var x=document.getElementById(“number”).value; //一定要加.value 不然无法获取值的哦
if(isNaN(x)) //判断是否非数字
{
alert(“您输入的是非数字”);
}
else
{
if(x.length!=11) //判断是否有11个字符
{
alert(“请输入11位数的手机号”);
}
else
{
var myreg = /^(((13[0-9]{1})|159|153|158)+\d{8})$/; //定义一个正则表达判断手机号
if(!myreg.test(x))
{
alert(“您输入的手机号有误”);
}
else
{
document.getElementById(“numbertext”).innerHTML=(“您输入的号码为:”+x);
}
}
}
}
</script>
<p>请输入手机号码:<input type=”text” id=”number” onchange=”mynumber()”></p>
<p id=”numbertext”></p>

通过清心醉

14-js-onchange离开输入字段触发事件

<head>
<script>
function myFunction() //定义个函数
{
var x=document.getElementById(“fname”); //获取表单id=fname的值给x
x.value=x.value.toUpperCase(); //更新表单id=fname的值,利用toUpperCase()内置方法大小写转换.
//如果需要大写转小写.可写成:x.value=x.value.toLowerCase();
}
</script>
</head>
<body>
请输入英文字符:<input type=”text” id=”fname” onchange=”myFunction()”>
<p>当您离开输入字段时,会触发将输入文本转换为大写的函数。</p>

<br /> <br />
</body>

通过清心醉

13-js-用户进入或离开页面触发事件

<body onload=”checkCookies()”>
<script>
function checkCookies()
{
if (navigator.cookieEnabled==true)
{
alert(“已启用 cookie”)
}
else
{
alert(“未启用 cookie”)
}
}
</script>
<p>提示框会告诉你,浏览器是否已启用 cookie。</p>
</body>
<!–
onload 和 onunload 事件会在用户进入或离开页面时被触发。
onload 事件可用于检测访问者的浏览器类型和浏览器版本,并基于这些信息来加载网页的正确版本。
onload 和 onunload 事件可用于处理 cookie。
定义和用法
cookieEnabled 属性可返回一个布尔值,如果浏览器启用了 cookie,该属性值为 true。如果禁用了 cookie,则值为 false。
语法
navigator.cookieEnabled
–>

通过清心醉

12-js-onclick利用button(按钮)调用函数

<p>点击按钮就可以执行 displayDate() 函数。</p>
<button onclick=”displayDate()”>点击这里</button>
<script>
function displayDate()
{
document.getElementById(“demo”).innerHTML=Date();
//更新id=demo的显示内容为Date()函数值. 注:Date为内置时间函数
}
</script>

<p id=”demo”></p>
<!–
当点击了<button onclick=”displayDate()”>点击这里</button>这一行时
最后一行会显示数据,
–>

/*********第二种方法*********/
<br /> <br />
<p>点击按钮就可以执行 <em>displayDate1()</em> 函数。</p>
<button id=”myBtn1″>点击这里</button>
<script>
document.getElementById(“myBtn1”).onclick=function(){displayDate1()};
//在这已经根据ID获取单击事件,响应的函数->displayDate1()
function displayDate1() //函数体
{
document.getElementById(“demo1″).innerHTML=Date();
}
</script>
<p id=”demo1”></p>

通过清心醉

11-js-onclick单击事件改变文本

<h1 onclick=”this.innerHTML=’我是第一行,颜色不改!'”>修改这一行的内容</h1>
<h2 onclick=”this.innerHTML=’我是第二行,带个红色’;this.style.cssText=’color: red'”>修改这一行的内容</h2>

通过清心醉

10-js判断邮箱是否已写并且格式是否正确

<!– 10-js判断必填项是否已写–>
<html>
<head>
<script type=”text/javascript”>
function validate_email(field,alerttxt)
{
with (field) //with主要用于对一个对象的多个属性进行操作时,使代码更简洁易读,在这里对用户输入的eail进行操作
{
/*
邮箱输入的表单验证。
value.indexOf(@)返回字符串@在输入的邮箱地址中首次出现的位置,从零开始计算,apos<1是为了避免首字母出现@,
value.lastIndexOf(“.”)返回“.”在邮箱地址中最后出现的位置,dotpos-apos<2是确保@后面至少有一个“.”且@与“.”之间至少间隔一个字符。
*/
apos=value.indexOf(“@”);
dotpos=value.lastIndexOf(“.”);
if (apos<1||dotpos-apos<2)
{
alert(alerttxt);
return false; //返回假
}
else
{
return true; //返回真
}
}
}

function validate_form(thisform) //定义个表单判断方法,带个参数来明确是哪个表单
{
with (thisform) //获取了表单的数据即<input type=”text” name=”email” size=”30″>,由用户点击<input type=”submit” value=”邮件格式查询”> 触发
{
if (validate_email(email,”邮箱格式不正确!”)==false)
//调用vilidate_eamil函数,并且带上两个参数,第一个email是<input type=”text” name=”email” size=”30″> 注意这有个name=”email”,传递的是这个参数.
{
email.focus();
return false;
}
}
}
</script>
</head>

 

<body>
<form action=”post页面” onsubmit=”return validate_form(this);” method=”post”>
<!–如果return返回的值为真,把参数传递到post页面–>
Email: <input type=”text” name=”email” size=”30″>
<input type=”submit” value=”邮件格式查询”>
</form>
<!–
form是一个表单,这里首先给表单设置个onsubmit事件.
当用户点”邮件格式查询”时
会先调用validate_form(this)函数的返回值.
至于onsubmit=”return validate_form(this);里面的this是指当前的表单
–>
</body>

</html>

通过清心醉

9-js自定义try catch输出异常错误

<!– 9-js自定义try catch输出异常错误–>
<html>
<body>

<script>
function myFunction()
{
try
{
var x=document.getElementById(“demo”).value; //获取<input id=”demo” type=”text”>代码块的输入值
if(x==””) throw “值为空”; //首先判断是否为空
if(isNaN(x)) throw “不是数字”; //判断是否为数字 isNaN有个返回值
if(x>10) throw “太大”; //判断值是否大于10
if(x<5) throw “太小”; //判断值是否小于5
if(x>=5&&x<=10) throw “数字范围内”; //如果值 (大/等于)5并且(小/等于)10
}
catch(err)
{
var y=document.getElementById(“mess”); //<p id=”mess”></p>这一行显示出throw输出的信息
y.innerHTML=”错误:” + err + “。”; //更新的内容,其中err变量就是try里throw的参数.
}
}
</script>

<h1>我的第一个 JavaScript 程序</h1>
<p>请输入 5 到 10 之间的数字:</p>

<input id=”demo” type=”text”>
<button type=”button” onclick=”myFunction()”>测试输入值</button>
<p id=”mess”></p>

</body>
</html>

通过清心醉

8-js通过try catch输出异常错误

<!– 通过try catch输出异常错误–>
<head>
<script>
var txt=””;
function message()
{
try
{
error_main(“Welcome guest!”); // error_mail方法是不存在的. 到这时会抛出一个异常.
}
catch(err)
{
txt=”本页有一个错误。\n\n”;
txt+=”错误描述:” + err.message + “\n\n”;
txt+=”点击确定继续。\n\n”;
alert(txt);
}
}
</script>
</head>

<body>
<input type=”button” value=”查看消息” onclick=”message()” />
</body>

通过清心醉

7-js-continue 语句中断循环中的迭代

<p>点击下面的按钮来执行循环,该循环会跳过 i=3 的步进。</p>
<button onclick=”myFunction()”>点击这里</button>
<p id=”demo”></p>

<script>
function myFunction()
{
var x=””,i=0;
for (i=0;i<10;i++)
{
if (i==3)
{
continue;
}
x=x + “The number is ” + i + “<br>”;
}
document.getElementById(“demo”).innerHTML=x;
}
</script>

通过清心醉

6-js对象

<script>
var duixiang={
name : “清心醉”,
tel : “138238”,
id : 5566
};
document.write(“名字是:”+duixiang.name + “<br />”);
document.write(“电话是:”+duixiang[“tel”] + “<br />”);
</script>

<p>/*************对象的说明二:***************/</p><br />
<script>
person=new Object(); // 创建一个对象
person.firstname=”Bill”; //对象的firstname值
person.lastname=”Gates”; //对象的lastname值
person.age=56; //对象的age值
person.eyecolor=”blue”; //对象的eyecolor值
document.write(person.firstname + ” is ” + person.age + ” years old.”);
</script>

通过清心醉

5-js创建数组

<script>
var i; //
var cars = new Array();//创建数组,并且写入3组数据
cars[0] = “我是数组的第1个数据”;
cars[1] = “我是数组的第2个数据”;
cars[2] = “我是数组的第3个数据”;
for (i=0;i<cars.length;i++)
{
document.write(cars[i] + “<br>”); //循环输出数组的每一个数据.
}
/*
//也可以这么定义
var cars=[“我是数组的第1个数据”,”我是数组的第2个数据”,”我是数组的第3个数据”];
*/
//这和php的for差不多的,只是cars.length
//他类似于判断cars里面有多少个元素
</script>

通过清心醉

4-js改变多个文字内容

<p id=”myPar”>I am a paragraph.</p>
<div id=”myDiv”>I am a div.</div>
<p>
<button type=”button” onclick=”myFunction()”>点击这里</button>
</p>
<script>
function myFunction()
{
document.getElementById(“myPar”).innerHTML=”Hello World”;
document.getElementById(“myDiv”).innerHTML=”How are you?”;
}
</script>
<p>当您点击上面的按钮时,两个元素会改变。</p>

通过清心醉

3-js-document.write函数重写页面

<h1>My First Web Page</h1>

<p>My First Paragraph.</p>

<button onclick=”myFunction()”>点击这里</button>

<script>
function myFunction()
{
document.write(“糟糕!文档消失了。”);
}
</script>

通过清心醉

2-js判断输入的是否为数字

<p>请输入数字。如果输入值不是数字,浏览器会弹出提示框。</p>
<script>
function myFunction()
{
var x=document.getElementById(“demo”).value;
//变量x的值=id为demo的value
//在这里value即为在表单内输入的值

if(x==””||isNaN(x)) //isNan判断是否为数字
{
alert(“空值/非数字”);
}
else
{
alert(“没错,您输入的是数字哦”);
}
}
</script>
<input id=”demo” type=”text”>
<button type=”button” onclick=”myFunction()”>点击这里</button>

通过清心醉

1-js改变文字内容

<!–先定义个函数–>
<script>
function myFunction()
{
x=document.getElementById(“demo”); // 找到元素
x.innerHTML=”<font color=’red’>修改过后的内容哦</font>”; // 改变内容
}
</script>

<p id=”demo”>
JavaScript 能改变 HTML 元素的内容。
</p>
<button type=”button” onclick=”myFunction()”>点击这里</button> <!–触发myfunction函数–>
<!–
触发的规则很多,比如要修改颜色
x.style.color=”#ff0000″; 就可以了
–>

通过清心醉

JavaScript基础一

前      言

最近PHP转入ZEND框架或者用面向对象编程方式来写小代码,说真的,如果不是大的项目,根本不需要框架(特别是ZEND这种重量级的),但是面向对象是PHP的一特征,总得慢慢的进入面向对象(OOP)的思维,也更容易进行后期的维护等工作。

后端会了,可前端不行,都是单纯的使用table表格来制作,说真的,DIV+CSS作者也不懂,但CSS也算是很简单的。需要使用的地方GOOGLE下就有了。还有一个就是Javascript,有人说直接学jQuery。就好比初学PHP,你不学面向过程的编程,直接跳面向对象的方式,思维能力能承受的来吗?

好了,来点Javascript的简单案例:

一个带变量的JS:

<html>
<head>
<Script Language =”JavaScript”>
var i=100;
var o=99;
alert(i+o);
</Script>
</Head>
</Html>

在JS中,var就是定义变量了,alert(i+o);就是弹出输出变量i+o的值。

alert();在我以往的PHP代码中,需要弹出对话框,都是基于该方法来实现。

/************************我是分割线*************************/

JS单击onclick事件:

<form>
<input type=”button” value=” ” onclick=alert(“这是一个例子”)>
</form>

在这里出发单击onclick时间,调用了方法alert()输出这是一个例子;

来个带JS函数的小例子

<form>
<Script Language =”JavaScript”>
function myfunction()
{
var i=5;
var o=8;
alert(i+o);
}
</Script>
<input type=”button” value=” ” onclick=myfunction()>
</form>

如果触发单击事件,调用myfunction()函数,弹出文本输出i+o的值