12

文本框间传值——JS

[singlepic id=224]

如果文本框有内容时,当我点击文本框时,当前内容会复制到今天1里,如果1里有内容,就会复制到2里,依次类推。

<textarea onclick=”oCopy1(this);” id=”yesterdayWork1″ name=”yesterdayWork1″ >

JS部分
if(document.getElementById(“todayWork1″).value==””)
{
document.getElementById(“todayWork1”).value=document.getElementById(“yesterdayWork1”).value;
}

展示部分代码,重要的是思路。

知识共享  资源共享  心得共享

MySql 数据表关联查询

当数据库中有两个表。当我想查询A表中某一字段和B表中的某些字段在一起查出并显示时。要用到联合查询。但前提是两个表中必须包含一个字段,下面请看详细例子。

以日志系统为例,我想查出某人某天的工作。在用户表里查出用户名,在工作表里查出工作和某天。

SELECT a.userName, b.* FROM user as a left join work_log as b on(a.userId=b.userId) where `date`=”2013-07-07″ order by `reorder`

根据字段进行排序

前一阵用PHP做了个工作日志系统用户名排序功能,首先在user表里增加reorder字段,通过reorder字段里的数字来进行排序。实现的方法先将遍历出来的用户表,每条数据对应用户ID和reorder字段的值,点击排序按钮后,将reorder值全部提交,并在数据库里更新。最后在查询时根据reorder排序即可。

<input type=”text” name=”<?=$r[“userId”]?>” id=”<?php echo $r[“userId”]; ?>” value=”<?php echo $r[“reorder”];?>” onkeyup=”value=value.replace(/[^\d]/g,””)” />

$reorder = $this->input->post();
foreach($reorder as $k=>$v)
{
$this->adduser_mdl->update1($k,$v);
}

工作日志系统技术总结

工作日志系统技术总结

工作日志系统是把每人每天的工作记录下来,方便查看和填写,下面介绍流程和主要技术。

  1. 登录页面

登录页面,首先jquery判断账号位数:

<script type=”text/javascript” src=”<?php echo JSPATH; ?>/jquery-1.7.1.min.js”></script>

<script type=”text/javascript” src=”<?php echo JSPATH; ?>/jquery.validate.js”></script>

<script type=”text/javascript” language=”javascript”>

//验证表单

$(document).ready(function()

{

//用户账号位数:验证规则追加

$.validator.addMethod(“accountLength”, function(value, element) {

return this.optional(element) || (value.length >= 4 && value.length < 20);

});

 

// 验证部分

$(“#login_form”).validate({

rules: {

“userAccount”     : {required  : true,

accountLength:true

}

},

messages: {

“userAccount”   : {

required: “账号不能为空”,

accountLength: “账号长度不符合要求”

}

},

errorPlacement : function(error, element) {

error.appendTo(element.siblings(“span”));

}

});

});

//将错误信息输出到指定位置

</script>

 

然后从数据库里检出用户名和密码是否匹配,如果不匹配,返回错误信息,是通过数组传过去的提示信息。如匹配成功,将会往session里传值,判断登录用户权限,如果是管理员,页面定向到用户查询页面,否则定向到工作查询页。最后定义方法,注销session.

public function find()

{

$data[“userAccount”]  = $this->input->post(“userAccount”);

$data[“userPassword”] = $this->input->post(“userPassword”);

$login = $this->login_mdl->find($data);

if(!empty($login) && (md5($data[“userPassword”]) ==$login[“userPassword”]))

{

$session_data  = array(“user_authority”     => $login[“userAuthority”],

“user_account”     => $login[“userAccount”],

“user_name”     => $login[“userName”],

“user_id”        => $login[“userId”]);

$this->session->set_userdata($session_data);

$user_authority = $this->get_userdata()->user_authority;           //调用SESSION

//$data[“user_authority”] =$user_authority;

if($user_authority==”管理员”)

redirect(“/search_name/index”);

else

redirect(“/work_search/index”);

}

else

{

$this->load->view(“login”, array(“check”=>”<span style=”color:red”>用户名或密码不正确</span>”));

//redirect(“/login”);

}

 

}

public function logout()

{

$unset_sess = array(

“authority”              => “”,

“account”       => “”,

“name”                 => “”,

“user_id”          => “”

);

$this->session->unset_userdata($unset_sess);

redirect(“/login”);

}

}   //注销session

 

 

  1. 用户查询页面

这个页面是为管理员应用的。它集成了用户查询、更新、删除、分页等功能,下面介绍详细方法。

以管理员权限进入的页面是用户查询,通过分页查询数据:

private function search_page($data)

{

$id = intval($this->input->get(“per_page”));                                     //接收分页导航传的ID值,命名必须是per_page,内置分页类定义好的,获取当前页码数

//配置参数

$config[“base_url”]         = “/search_name/index?userAccount=” . $data[“userAccount”] . “&userName=” . urlencode($data[“userName”]) .”&per_page=”.$id;                                                                                                            //导入分页URL,命名必须是per_page,内置分页类定义好的

$config[“total_rows”]       = $this->search_name_mdl->test_total($data);              //总条数

$config[“use_page_numbers”] = TRUE;                                                                                  //URL显示当前页码

$config[“per_page”]         = 5;                                                                                  //每页显示的条数

$config[“page_query_string”] = TRUE;                                                                               //***解析地址传值:http://example.com/index.php/test/page/20 http://example.com/index.php?c=test&m=page&per_page=20

//自定义分页样式

$config[“num_links”]             = 3;

$config[“first_link”]        = “首页”;

$config[“last_link”]         = “尾页”;

//$config[“cur_tag_open”]              = “<b><font color=”red”>”;

//$config[“cur_tag_close”]       = “</font></b>”;

$config[“prev_link”]              = “上一页”;

$config[“next_link”]        = “下一页”;

//给CI分页类赋值

$this->load->library(“pagination”);                                                                                                   //导入分页类

$this->pagination->initialize($config);                                                                                             //初始化分类页

//定义计算变量

$id    = $id?$id:1;                                                                                                                                    //二元判断

$end   = $config[“per_page”];                                                                                                               //每页显示条数

$start = ($id-1)*$end;

//显示数据

$data[“user_list”]      = $this->search_name_mdl->select($data,$end,$start);                              //条件查询结果

$data[“total”]          = $this->search_name_mdl->test_total($data);                                               //条件查询总条数

$data[“show_page”]      = $this->pagination->create_links();

//分配数据

//$this->show($data);

$this->load->view(“search_name”,$data);

}

 

通过条件进行查询(m层):

public function select($data,$end,$start)

{

$where = ” where 1=1″;

if(!empty($data[“userAccount”]))

{

$where.=” and `userAccount` like “%”.$data[“userAccount”].”%””;

}

if(!empty($data[“userName”]))

{

$where.=” and `userName` like “%”.$data[“userName”].”%””;

}

$user  = self::USER;

$sql   = “select * from {$user} “.$where.”  order by userId desc limit “.$start.”,”.$end;

$query = $this->db->query($sql);

return $query->result_array();

}

 

删除方法对应删除记录

function delete()

{

$data[“userId”]         = $this->uri->segment(3);                                                                           //   往后划分/3

$delete                  = $this->search_name_mdl->delete($data);

redirect(“/search_name/index”);

}

 

public function delete($data)

{

$user  = self::USER;

$sql   = “delete  from {$user} WHERE userId = “. $data[“userId”];

$query = $this->db->query($sql);

if ($query)

{

return true;

}else

{

return false;

}

}

 

 

  1. 用户增加和修改

判断账号位数和是否和数据库中重名。还有两次密码是否一致。

<script type=”text/javascript” src=”<?php echo JSPATH; ?>/jquery-1.7.1.min.js”></script>

<script type=”text/javascript” src=”<?php echo JSPATH; ?>/jquery.validate.js”></script>

<script type=”text/javascript” language=”javascript”>

//判断密码是否一致

function docheck()

{

 

if(document.getElementById(“nuserPassword”).value != document.getElementById(“userPassword”).value)

{

document.getElementById(“nuserPassword_error”).innerHTML = “</br></br><font color=”red”>密码不相同</font>”;

return false;

}

 

return true;

}

 

//验证表单

$(document).ready(function()

{

//用户账号位数:验证规则追加

$.validator.addMethod(“accountLength”, function(value, element) {

return this.optional(element) || (value.length >= 4 && value.length < 15);

});

//密码允许字母数字下划线:验证规则追加

$.validator.addMethod(“userpassword”,function(value, element){

return this.optional(element)||/^[a-zA-Z0-9_] $/.test(value);

});

 

// 验证部分

$(“#login_form”).validate({

rules: {

“userAccount”     : {required  : true,

accountLength:true,

remote : {                                                               //定义一个异步方法,判断用户名是否存在,后台处理

url : “<?php echo site_url(“Adduser/realname_taken”);?>”,

type:”post”,                                //c层realname_taken方法传值的方式,数据发送方式

dataType : “json”,                        //获取的值的类型,接受数据格式

data : {userAccount : function (){return $(“#userAccount”).val()}} //要往URL中传的值,要传递的数据

}

 

},

“userPassword”        : {required : true

}

},

messages: {

“userAccount”   : {

required: “账号不能为空”,

accountLength: “账号长度不符合要求”,

remote:   “账号已存在”

},

“userPassword” :{

required:”密码不能为空”,

}

 

},

errorPlacement : function(error, element) {

error.appendTo(element.siblings(“span”));                                //将错误信息输出到指定位置

}

});

});

</script>

C层中:

//向user表内字段传值

public function realname_taken()

{

$data[“userAccount”] = trim($this->input->post(“userAccount”));

if($this->adduser_mdl->realname_exists($data))

{

echo “true”;

}

else

{

echo “false”;

}

}

 

在M层中:

//查询账号是否重复

public function realname_exists($data)

{

$user = self::USER;

$sql = “select * from {$user} where userAccount = “”.$data[“userAccount”].”””;

$query = $this->db->query($sql);

if(0<$query->num_rows())

return false;

else

return true;

}

 

由于代码部分较长这里不在赘述,有问题请联系博主。

接下来就是用户填加。用户增加后,在用户查询页可见。修改时通过ID传值来对就应的输出。

 

最大和最集中的技术在最后一项,就是用户工作页。它主要的功能有

  1. 当用户登录进来时,用户选项定到登录那个人的名字。用户选项是通过user表查询来的。
  2. 时间框是显示当前日期,并能识别出每月的天数。选择日期时,会查询当日的工作。
  3. 当点击今天的按钮时,时间会回到系统当前日期。
  4. 点击复制昨天时,会把这位用户上个工作日的工作复制到当前日期的昨天框内。
  5. 工作填写完成后,点击提交。工作就会提交,并显示。如想查询某日的工作,直接选择日期即可。

 

下面依次介绍实现的技术。

  1. 用户选项定到登录那个人的名字。首先把用户都遍历出来。输出是的用户名,但要用到userId。

foreach ($user_list as $row)

{

if(!empty($suserId))

{

if($suserId==$row[“userId”])

$selected=”selected=”selected””;

}

echo “<option “.$selected. “value=””.$row[“userId”].””>”.$row[“userName”].”</option>”;

$selected=””;

}

 

  1. 时间框显示当前日期。同时触发查询操作

如能取到日期,就取日期,否则就取系统日期

$year     = @$_GET[“year”]   ? $_GET[“year”] : date(“Y”);

$month    = @$_GET[“month”]  ? $_GET[“month”]: date(“m”);

$day      = @$_GET[“day”]    ? $_GET[“day”]:   date(“d”);

 

<select id=”day” name=”day” onchange=chooseQuery()>

<?php

$temp = strtotime(“$year-$month”);

$days = date(“t”,$temp);

$selected=””;

for($i=1;$i<=$days;$i )

{

if($i==$day)

{

$selected=”selected=”selected””;

}

if($i<10)

{

$j=”0″.$i;

}

else

{

$j=$i;

}

echo”<option “.$selected.”value=””.$j.””>”.$i.”</option>”;

$selected=””;

}

?>

触发查询

 

<script language=javascript>

function chooseQuery(chuan)

{

var userId =document.getElementById(“userId”).value;

var year =document.getElementById(“year”).value;

var month =document.getElementById(“month”).value;

var day =document.getElementById(“day”).value;

url = “/work_search/index?userId=” userId “&year=” year “&month=” month “&day=” day;

window.location.href= url;

}

</script>

 

 

  1. 当点击今天的按钮时,时间会回到系统当前日期。

使其链接到当前页,要查的用户不变

<a href=”work_search/index?userId=<?php echo $suserId;?>”>今 天</a>

 

  1. 点击复制昨天时,会在地址栏上多个值。如果取到act这个值时,就输出相应的内容。

<a href=”/work_search/copy_yesterday_work_log?userId=<?php echo $suserId;?>&year=<?php echo $year;?>&month=<?php echo $month;?>&day=<?php echo $day;?>& =copy”>复制昨天</a>

  1. 工作填写完成后,提交后,先删除当前条,插入,然后执行查询。

由于样式好看,把input标签换成<a>标签,用它来触发form表单。

<a href=”#” onclick=”document.getElementById(“form_work”).submit()”>提交</a>

等同于<input type=”submit” name = “form_work” value = “提交”/>

OK 先写到这里,如有技术疑问,请联系本人,qq:179932133       验证消息:我是在雪印笔记里看到的。

根据年月—显示月份天数

年份有闰年和平年之分,每个月有30和31天不等,二月除外。如何用年月来显示出对应的天数呢,请看下面。

date(“t”); 表示当前月份对应的天数,范围就是28—31。

如果要只定年月,就得给它赋值。

$temp = strtotime(“$year-$month”);

$days = date(“t”,$temp);

OK。

知识共享 资源共享 心得共享

眼泪的告白之——EditPlus备份文件

在开发者的角度来看。如果把记事本比做一根棍子的话,那么EditPlus就是一把小刀了。EditPlus方便简单,并有相应的颜色提示。它支持编辑的语言 java c/c perl html php 等等好多。下面说说昨天本人犯的致命错误。

Editplus 在默认配置下,保存后会生成后缀名bak文件,那是它的备份文件,昨天在修改httpd-vhosts 文件时,不甚将它的备份文件修改了,结果怎么试都不好使。在查看文件时,应设置成详细信息查看,并显示后缀名。

如不需要备份文件时,在工具–>用户配置

SVN数据自动备份

上次星官神仙提到,用Windows 批处理文件可以实现备份。如何让计算机自己来做呢,下面介绍一下计算机里的任务计划,实现自动备份。

打开任务计划,在开始菜单->控制面板->任务计划->添加任务计划

单击浏览选项,把批处理文件加入里面。

我们要每天都要备份,选择每天,17:45分运行。

需要输入用户名和密码。

完成后将在任务计划里多出一条您刚增加的任务。

一切OK。感谢诸位神仙。

12