12

PHP MySQL入门

   连接数据库

语法:mysql_connect(servername,username,password);

例子:

<?php

$con = mysql_connect(“localhost”,”root”,””);

if(!$con)

{

die(“Could not connect: ” . mysql_error());

}

?>

    创建数据库 (CREATE DATABASE)

语法:CREATE DATABASE database_name

例子:

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
 {
 die("Could not connect: " . mysql_error());
 }

if (mysql_query("CREATE DATABASE db_log",$con))
 {
 echo "Database created";
 }
else
 {
 echo "Error creating database: " . mysql_error();
 }

mysql_close($con);
?>

   创建数据库表 (CREATE TABLE)

语法:CREATE TABLE table_name

例子:

<?php
$con = mysql_connect(“localhost”,”root”,””);
if (!$con)
  {
  die(“Could not connect: ” . mysql_error());
  }

// Create database
if (mysql_query(“CREATE DATABASE db_log”,$con))
  {
  echo “Database created”;
  }
else
  {
  echo “Error creating database: ” . mysql_error();
  }

// Create table in db_log database
mysql_select_db(“db_log”, $con);
$sql = “CREATE TABLE log 
(id INT(5) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
username VARCHAR(15) NOT NULL,
password VARCHAR(15) NOT NULL,
age INT(3) NOT NULL
)”;
mysql_query($sql,$con);

mysql_close($con);
?>

   插入数据 (INSERT INTO)

语法:INSERT INTO table_name VALUES(value1,value2……)

例子:

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
 {
 die("Could not connect: " . mysql_error());
 }

mysql_select_db("db", $con);

mysql_query("INSERT INTO log(username,password, Age) 
VALUES ("Peter", "123456", "35")");

mysql_close($con);
?>

   检索数据 (SELECT)

语法:SELECT column_name FROM table_name

例子:

<?php

$con = mysql_connect(“localhost”,”root”,””);
if (!$con)
  {
  die(“Could not connect: ” . mysql_error());
  }

mysql_select_db(“db_log”, $con);

$result = mysql_query(“SELECT * FROM log”);

while($row = mysql_fetch_array($result))
  {
  echo $row[“username”] . ” ” . $row[“password”];
  echo “<br />”;
  }

mysql_close($con);

?>

   过滤数据 (WHERE)

语法:SELECT column_name FROM table_name WHERE column_name = “value”

例子:

<?php

$con = mysql_connect(“localhost”,”root”,””);
if (!$con)
  {
  die(“Could not connect: ” . mysql_error());
  }

mysql_select_db(“db_log”, $con);

$result = mysql_query(“SELECT * FROM log

WHERE username=””Peter”);

while($row = mysql_fetch_array($result))
  {
  echo $row[“username”] . ” ” . $row[“age”];
  echo “<br />”;
  }

?>

   排序 (ORDER BY)

语法:SELECT column_name(s) FROM table_name ORDER BY column_name

例子:

<?php

$con = mysql_connect(“localhost”,”root”,””);
if (!$con)
  {
  die(“Could not connect: ” . mysql_error());
  }

mysql_select_db(“db_log”, $con);

$result = mysql_query(“SELECT * FROM log ORDER BY age”);

while($row = mysql_fetch_array($result))
  {
  echo $row[“username”];
  echo ” ” . $row[“password”];
  echo ” ” . $row[“Age”];
  echo “<br />”;
  }

mysql_close($con);

?>

  更新 (UPDATE)

语法:UPDATE table_name

SET column_name = new_valule

WHERE column_name = some_valule

例子:

<?php
$con = mysql_connect(“localhost”,”root”,””);
if (!$con)
  {
  die(“Could not connect: ” . mysql_error());
  }

mysql_select_db(“db_log”, $con);

mysql_query(“UPDATE log SET Age = “36”
WHERE username = “Peter” AND password = “123456””);

mysql_close($con);
?>

  删除数据库,表(DROP)

语法:DROP DATABASE database_name;

           DROP TABLE table_name;

例子:

<?php

$con = mysql_connect(“localhost”,”root”,””);
if (!$con)
  {
  die(“Could not connect: ” . mysql_error());
  }

if (mysql_query(“CREATE DATABASE db_log”,$con))
  {
  echo “Database created”;
  }
else
  {
  echo “Error creating database: ” . mysql_error();
  }
  mysql_query(“DROP DATABASE db_log”,$con);

mysql_close($con);

?>

   删除数据库中数据(DELETE FROM)

语法:DELETE FROM table_name WHERE column_name =some_value

例子:

<?php
$con = mysql_connect(“localhost”,”root”,””);
if (!$con)
  {
  die(“Could not connect: ” . mysql_error());
  }

mysql_select_db(“db_log”, $con);

mysql_query(“DELETE FROM log WHERE Age=”36″”);

mysql_close($con);
?>

   关闭连接 (mysql_close())

语法:mysql_close();

修改PHP对上传文件大小的限制

网上像这样的问题,有很多种方法来解决,而且说明地非常详细,俺也只是借花献佛,把他们总结在一起,还望大神们莫怪,小仙谢过了!

一、修改php服务器的配置文件php.ini

upload_max_filesize :允许上传文件大小的最大值,默认为2M

post_max_size :控制在采用POST方法进行一次表单提交中PHP所能够接收的最大数据量。默认为8M 。如果希望使用PHP文件上传功能,则需要将此值改为比upload_max_filesize要大;

memory_limit :为了避免正在运行的脚本大量使用系统可用内存,PHP允许定义内存使用限额。默认为8M 。通过memory_limit变量来指定单个脚本程序可以使用的最大内存容量变量memory_limit的值应当适当大于post_max_size的值。

那么我们可以这样修改:

file_uploads = On;//这个是必须的

upload_max_filesize = 128M

post_max_size = 128M

memory_limit = 128M

注意:

如果要上传大于8M的文件,而仅仅设置上述几项是不一定能上传成功的,除非你的网络上传速率非常快,还应该设置以下两个变量:

max_input_time :以秒为单位对通过POST、GET以及PUT方式接收数据时间进行限制。默认60秒。如果应用程序所运行环境处在低速链路上,则需要增加此值以适应接收数据所需的更多时间。

max_execution_time :max_execution_time设置了在强制终止脚本前PHP等待脚本执行完毕的时间,此时间以秒计算。默认30秒。当脚本进入了一个无限循环状态时此变量非常有用。然而,当存在一个需要很长时间完成的合法活动时(例如上传大型文件),这项功能也会导致操作失败。在这样的情况下必须考虑将此变量值增加,以避免PHP在脚本正在执行某些重要过程的时候将脚本关闭。

那么我们可以这样修改:

 max_execution_time   =   600

max_input_time = 600

二、上述一方法是一种临时解决方案,这个为何不能修改,是与PHP的运行模式是有很大的关系的,如安全模式。在安全模式下也不能使用ini_set的指令:max_execution_time、memory_limit、child_terminate。所以,正确做法是在.htaccess文件里加上如下代码:

php_value post_max_size 128M

php_value upload_max_filesize 128M

memory_limit = 128M

php_value max_execution_time 600

php_value max_input_time 600

前提是该站点在httpd.conf中配置了:AllowOverride All。

数据库如何创建索引

在创建索引之前,首先要了解什么是索引?

在SQl server中索引就是数据库表的目录,表中数据和相应的存储位置的列表。

索引是对数据库表中的一列或者多列的值进行排序的一种结构。

索引的作用:提高查询优化,确保数据的唯一性以及可以对任何全文索引字段中的大量文本的搜索进行优化。加速表与表之间的连接。

主要索引介绍

1.常规索引(INDEX)

就是普通的,正常的索引,其实他没有什么特别的特性,它可以唯一性的,也可以非唯一。因为唯一的已经有主键索引,所以常规索引经常用于设置非唯一,但是又经常能用到的,比如名字,因为有人可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或者更多次,这时就可以用到常规索引了,

可以提升数据库性能。

你可能经常希望针对非主键甚至非唯一的字段的搜索进行优化,所以应当可以通过为这些字段建立索引来优化这种搜索。这种索引就称作常规索引或正常索引。比如性别,商品类别等可以用常规索引。

2.主键索引(PRIMARY)

这是关系数据库中最常见的索引类型

主要作用是确定数据库表里一条特定的数据记录的位置,标识唯一性。

主键索引是不允许重复的,这样会加快寻找制定位置的速度,而且无论以后是否会删除以前存在的记录,每条记录都会有唯一的主键索引。一般我们会把id设置为主键索引。

最好为每一张数据表都定义一个主键.

一个表只能制定一个主键.

主键的值不能为空.

3.唯一索引(DNIQUE)

与主键索引的作用一样,都可以防止创建重复的值。

当插入一条新记录的时候,会自动检查新记录的字段的值是否已经存在,如果存在,MySQL会拒绝插入。

不同的是,每个表可以有多个唯一索引。比如用户名,文章名,个人介绍都可以用唯一索引。

创建唯一索引往往不是为了提高访问速度,而只是为了不让数据重复,像上面提到的用户名,文章名,大多数都不是重复的,而主键只能创建一个,所以就要用到唯一索引。

4.全文索引(FULLTEXT)

用来搜索存储在CHAR,VARCHAR,TEXT数据类型中的文本,比如文章,书籍之类内容比较多的,用全文索引。文本字段上的普通索引只能加快出现在字段内容最前面的字符串(也就是字段内容开头的字符)进行检索操作,如果字段里存放的是由几个神智更多单词构成的较大段文字,普通索引就吃力了,需要处理的数据量越大,响应的时间就越长,这时就要用到全文索引,在生成这种类型索引时,mysql将把在文本中出现的所有单词创建为一份清单,查询操作将根据这份清单去检索有关的数据记录,全文索引既可以跟数据表一起创建,也可以等日后有必要时再使用下面命令添加:

ALER TABLE tablename ADD FULLTEXT (column1,column2)有了全文索引,就可以用SELECT查询命令去检索那些包含着一个或者多个给定单词的数据记录了。

全文索引的基本语法:

SELECT*FROM tablename WHERE MATCH(column1,column2) AGAINST(“word1″,”word2,””word3”)

上面这条命令将把column1和column2字段里有word1,word2和word3的数据记录全部查出来。

提示:InnoDB数据表不支持全文索引。所以我们平时用到全文索引的时候也比较少。

 

一个没有建立任何索引的表知识一个未经排序的数据的集合,打个比方说,你想去书店买一本书,书店有成千上万本书,你想找一本《PHP与MySQL》,如果没有索引,你就要一本一本去找,可能找几天,甚至几个月,如果有了索引,你可以先去2层楼,找软件类书籍,再找有关PHP,最后找到《PHP与MySQL》,按照索引顺序很快找到。

事情都有两面性,索引在加快搜索速度的同时,也降低了插入,删除,修改的速度。还是上面的例子,如果要新添加一本《PHP与MySQL》,没有索引的话,把这本书直接扔到大库里就行了,什么都不用管,但是如果有索引,就要先去2楼,再找到软件类书籍,有关PHP,最后放到有关于PHP的一类里。

索引还有一个缺点就是需要使用更多的磁盘空间,索引越多,占用的空间也就越多,多余的索引只会导致不必要的硬盘空间消耗,所以建议只对WHERE,GROUP BY和ORDER BY子句中需要的列进行添加索引。

对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。

当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改操作远远多于检索操作时,不应该创建索引。

索引和表一样是独立的数据对象,可以单独使用,也可以在创建表时创建。

例如:创建一个索引名为ind1在用户表名字字段和年龄字段,单独创建时可以这么输入: creat index ind1 on users<name,age>;可以指定多个列。

这样,在查询的时候,按名字查询或者是年龄查询都会加快查询速度。

假如想删除索引输入         drop index ind1 on users;   不用再去可以指定name 或 age,因为创建这个索引名,它就知道在哪个字段上。

多列都可以指定索引,可以一个一个的去取索引名,这样就可以单独管理了

Js控制css样式(展开收起为例)

1.JQUERY控制CSS样式:

页面部分:指定ID,指定触发事件

<div id=”img1″ style=”width:500px;float:left;” class=”infonav infonav_hidden”>

              <p>文章标题</p>

              <p>1.文章标题一。</p>

              <p>2.文章标题二。</p>

              <p>3.文章标题三。</p>

 </div>

<div id=”img2″ style=”width:100px;float:left;padding-top:36px;”>

<a  border=”0″ style=”border:none;” href=”javascript:” onclick=”infonav_more_down(0);return false;”><img src=”list1.png”></a>

 </div>

jquery部分:

<script type=”text/javascript” src=”jquery-1.4.min.js” charset=”UTF-8″></script>

<script type=”text/javascript” charset=”UTF-8″>

//点击效果实现展开

function infonav_more_down(index)

{

var inHeight = ($(“#img1”).eq(index).find(“p”).length)*100;//设置要展开后显示的高度,100是可调数字。

if(inHeight > 65)

{

$(“#img1”).eq(index).css({height:inHeight});

$(“#img2”).eq(index).replaceWith(“<div id=”img2″ style=”width:100px;float:left;padding-top:360px;”><a onclick=”infonav_more_up(” index “);return false;” href=”javascript:”><img src=”list2.png”></a></div>”);

}

else

{

return false;

}

}

//点击效果实现收起

function infonav_more_up(index)

{

var infonav_height = 65;//设置要收起后显示的高度,15是可调数字。

$(“#img1”).eq(index).css({height:infonav_height});

$(“#img2”).eq(index).replaceWith(“<div id=”img2″ style=”width:100px;float:left;padding-top:36px;”><a onclick=”infonav_more_down(” index “);return false;” href=”javascript:”><img src=”list1.png”></a></div>”);

}

</script>

//===

addClass() 方法向被选元素添加一个或多个类。
$(selector).addClass(class)
removeClass() 方法从被选元素移除一个或多个类。
$(selector).removeClass(class)
hasClass() 方法检查被选元素是否包含指定的 class。
$(selector).hasClass(class)
find() 再次定位或查找指定元素(含)
.find(class)
attr() 方法设置或返回被选元素的属性值。
$(selector).attr(attribute)
$(selector).attr(attribute,value)
$(selector).attr(attribute,function(index,oldvalue))

 

//===

2.Javascript控制CSS样式:

页面部分:指定ID,指定触发事件

<div id=”img5″ class=”show_brand” style=”display: block;” onclick=”b();”></div>

<div id=”img6″ class=”hide_brand” style=”display: none;” onclick=”a();”></div>

javascript部分:

/* js写法:paddingTop ,css写法:padding-top*/

<script>

function a()

{

document.getElementById(“img1″).style.overflow=”hidden”;

document.getElementById(“img2″).style.paddingTop=”75px”;

document.getElementById(“img5″).style.display=”block”;

document.getElementById(“img6″).style.display=”none”;

}

function b()

{

document.getElementById(“img5″).style.display=”none”;

document.getElementById(“img6″).style.display=”block”;

document.getElementById(“img2″).className=”text”;

}

</script>

<style type=”text/css”>

.text{
position:absolute;
left:700px;
bottom:1px;
}

</style>

 

工作日志系统技术总结

工作日志系统技术总结

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

  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       验证消息:我是在雪印笔记里看到的。

CI框架文件上传功能

1.建立保存上传文件的文件夹:C:\localhost\test\source

2.指定上传位置:

2.1修改文件.htaccess:

2.2修改文件index.php

图1:

图2::

3.上传页面(V层):

4.实现上传(C层):

4.1参数设置:

获取上传文件信息表:

PHP实现二分搜索(折半查找)

目前在看编程珠玑(第2版),书中利用二分搜索例子讲解的十分精辟。

稍作调整改写为PHP,仅供参考。

在贴代码之前,我想大家是否可以根据算法以及下列伪代码自己推出代码,

这样可以得到一些头脑锻炼与提高的价值。

二分搜索:初始条件是已知一个对象存在于一个给定的范围内,而一次探索操作可以告诉我们该对象是否低于,等于或高于给定的位置。二分搜索通过重复探测当前范围的中点来定位对象。如果一次探测没有找到该对象,那么将当前范围减半,然后继续下一次探测。当找到所需要的对象或范围为空时停止。在程序设计中二分搜索最常见的应用是在有序数组中搜索元素。

伪代码:

min=0;max=n-1;

loop

{

if min > max

break;

middle = (min max) / 2;

case

x[middle] < t: min = middle 1;

x[middle] == t: P=middle;break;

x[middle] > t: max = middle -1;

}

我对条件稍微做了改动:随机输入一数字,然后随机生成10个100以内的数字,判断输入的数字是否存在于10个数字之内。代码如下:

<?php
$searchKey = $_SERVER[“argv”][1];//取得输入的数字
echo $searchKey . “\n”;

$randNumbers = array();
for($i = 0;$i < 10;$i )
{
 $randNumbers[$i] = rand(1, 100);
 echo $randNumbers[$i] . “\t”;
}
echo “\n”;
sort($randNumbers);
print_r($randNumbers);//随机生成10个100以内的数字,存入数组并正排序

$min = 0;
$max = 9;
$hasSameNumber = false;

while($min <= $max)
{
 $middle = round(($min + $max) / 2);
 if($randNumbers[$middle] < $searchKey)
 {
  $min = $middle 1;
 }
 else
 {

  if($randNumbers[$middle] > $searchKey)
  {
   $max = $middle – 1;
  }
  else
  {
   $hasSameNumber = true;
   break;
  }
 }
}

echo “\n”;
if(false == $hasSameNumber)
{
 echo “hasn”t same number”;
}
else
{
 echo “has same number”;
}
echo “\n”;

12