二种php用户登录代码(cookie,数据库)

 更新时间:2016年11月25日 16:38  点击:1465

下面我们要讲到二种用户登录方法一种是利用window验证加数据库教程密码验证实现登录,后者是利用cookie记录用户信息进行登录,有需要的朋友可以试下。

<?php教程
   function authenticate_user() {
      header('WWW-Authenticate: Basic realm="Secret Stash"');
      header("HTTP/1.0 401 Unauthorized");
      exit;
   }

   if (! isset($_SERVER['PHP_AUTH_USER'])) {
      authenticate_user();
   } else {
      mysql教程_pconnect("localhost","authenticator","secret") or die("Can't connect to database server!");
      mysql_select_db("java2s") or die("Can't select authentication database!");

      $query = "SELECT username, ps教程wd FROM user WHERE username='$_SERVER[PHP_AUTH_USER]' AND pswd=MD5('$_SERVER[PHP_AUTH_PW]')";

      $result = mysql_query($query);

      // If nothing was found, reprompt the user for the login www.111cn.net information.
      if (mysql_num_rows($result) == 0) {
         authenticate_user();
      }
   }
?>

利用cookie登录方法

<html>
  <head>
  <title>Enter Password</title>
  </head>
  <body>
  <form name="forml" method="POST" action="CookieBasedPasswordLogin.php">
    <table>
      <tr>
       <td colspan="2" >
         <div align="center"><b>Please Specify the Password</b></div>
       </td>
     </tr>
   <tr>>
     <td>
       <div align="right">Customer ID</div>
     </td>
     <td>
       <input type="text" name="username">
     </td>
   </tr>
   <tr>
     <td>
       <div align="right">Password</div>
     </td>
     <td>
       <input type="password" name="password">
     </td>
   </tr>
   <tr>
     <td colspan="2">
       <center>
         <input type="submit" name="Submit" value="Login">
       </center>
     </td>
    </tr>
   </table>
  </form>
  </body>
  </html>
 
 
 
 
<!-- CookieBasedPasswordLogin.php
<?php
    $now = getdate();
    $storetime= $now["weekday"] . " " . $now["month"] ." " . $now["year"] ;
    $storetime.=" Time : ";

    if ($now["hours"] < 10) {
      $storetime.= "0" . $now["hours"];
    } else {
      $storetime.= $now["hours"];
    }
 
    $storetime.= ":";
    if ($now["minutes"]<10) {
      $storetime.= "0" . $now["minutes"];
    } else {
      $storetime.= $now["minutes"];
    }
   
    $storetime.= ": ";
    if ($now["seconds"] <10) {
      $storetime.= "0" . $now["seconds"];
    } else {
      $storetime.= $now["seconds"];
    }
    if (isset($data)) {
       $counter=++$data[l];
        setcookie("data[0]",$storetime,time() + (60*60*24));
        setcookie("data[l]", $counter,time() + (60*60*24)); setcookie("data[2]",$username,time() + (60*60*24));
        echo "<b><center>Hi " . $data[2] . " ! !</center></b><br>n";
        echo "<b><center>Last Login Time :" .$data[0] . "</center></b><br>n";
        echo "<b><center>Current Date :" .$storetime. "</center></b><br>n";
        echo "<b><center>Page View Count :" . $data[l]. "</center></b><br>n";
        echo "<b><center>You have successfully logged in!</center></b>";
        echo ("<b><contor>You can access this area without entering a password for the next 24 hours!</center></b>");
   } else {
    if (isset($username) && isset($password)) {
     if ($password=="superpass") {
          $counter=0;
          setcookie("data[0]",$storetime,time() + (60*60*24));
          setcookie("data[l]",$counter,time() + (60*60*24));
          setcookie("data[2]",$username,time() + (60*60*24));
          $url="Location: cookieimp.php";
          header($url);
     }else{
          echo "<hl><center>INVALID PASSWORD!!!</center></hl>";
     }
    }
  }
  ?>
 
 

这篇教程对初学者会有帮助的,我们讲了数据库教程连接并且利用mysql教程_query,mysql_num_rows,mysql_fetch_row三个函数把记录读取并输出。

<html>
<head>
<title>Selecting Data</title>
</head>
<body>
<?php教程
$user = "root";
$pass = "";
$db = "mydatabase";
$link = mysql_connect( "localhost", $user, $pass );
if ( ! $link ) {
  die( "Couldn't connect to MySQL: ".mysql_error() );
}

mysql_select_db( $db, $link ) or die ( "Couldn't open $db: ".mysql_error() );

$result = mysql_query( "SELECT * FROM domains where sex='F'" );
$num_rows = mysql_num_rows( $result );

print "<p>$num_rows www.111cn.net women have added data to the table</p>n";

print "<table>";
while ( $a_row = mysql_fetch_row( $result ) ) {
  print "<tr>";
  foreach ( $a_row as $field ) {
    print "<td>".strips教程lashes($field)."</td>";
  }
  print "</tr>";
}
print "</table>";
mysql_close( $link );
?>
</body>
</html>

什么是存储例程?
 存储例程是存储在数据库教程服务器中的一组sql语句,通过在查询中调用一个指定的名称来执

行这些sql语句命令。
为什么要使用存储过程?
 我们都知道应用程序分为两种,一种是基于web,一种是基于桌面,他们都和数据库进行交

互来完成数据的存取工作。假设现在有一种应用程序包含了这两种,现在要修改其中的一个

查询sql语句,那么我们可能要同时修改他们中对应的查询sql语句,当我们的应用程序很庞

大很复杂的时候问题就出现这,不易维护!另外把sql查询语句放在我们的web程序或桌面中

很容易遭到sql注入的破坏。而存储例程正好可以帮我们解决这些问题。
存储过程(stored procedure)、存储例程(store routine)、存储函数区别
 Mysql存储例程实际包含了存储过程和存储函数,它们被统称为存储例程。
 其中存储过程主要完成在获取记录或插入记录或更新记录或删除记录,即完成select

insert delete update等的工作。而存储函数只完成查询的工作,可接受输入参数并返回一

个结果。

创建存储过程、存储函数

 create procedure 存储过程名(参数)
  存储过程体

 create function 存储函数名(参数)
  存储函数体
假设现在有一个数据库omcmc中的表db_info 表结构如下:

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for db_news
-- ----------------------------
DROP TABLE IF EXISTS `db_news`;
CREATE TABLE `db_news` (
  `id` int(10) NOT NULL auto_increment,
  `title` varchar(200) NOT NULL,
  `editor` varchar(20) default NULL,
  `origin` varchar(20) default NULL,
  `tags` varchar(200) default NULL,
  `content` text NOT NULL,
  `hits` int(10) default '0',
  `ip` varchar(15) NOT NULL,
  `time` int(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `db_news` VALUES ('1', First App', 'xqbar.com', 'xqbar.com', 'omcmc',

'detail。。', '100', '127.0.0.1', '1215051225');

使用上面的表我们创建一个简单的存储过程
create procedure select_news()
select title,hits from db_news;

在终端运行并调用
 
从上面的截图我们看到如何调用我们的存储过程

调用存储过程
call 存储过程名();

以上我们创建了一个简单的存储过程,当然我们的应用程序不可能使用这么简单的存储过程

,我们需要的是能给存储过程传递参数,以返回给我们所需要的结果数据。下面就了解下存

储过程的参数。
存储过程的参数
通常存储过程接受用户的参数,返回结果给调用用户。
mysql教程规定对于存储过程的参数要求其每个参数都必须声明其参数名,数据类型以及该参数是

输入参数还是用于返回信息还是两者兼有,对于存储函数php教程只支持输入参数。
声明参数时规定要使用关键字IN,OUT,INOUT。
其中:
 IN:用于输入参数
 OUT:用于返回参数
 INOUT:用于向存储过程传递参数值,如果该值改变则返回
另外规定对于声名为OUT,INOUT的参数当我们调用存储过程时需要在参数名前加@,以确保参

数在过程外调用,下面我们修改上面的存储过程以传递信息编号给存储过程select_news,返

回对应的信息标题给我们查看。

drop procedure if exists select_news;
create procedure select_news(IN id int,OUT title varchar(200))
select db_news.title from db_news where db_news.id=id;

在终端运行并调用
 
注意调用格式
call select_news(1,@title);
其中1是我们要传入的信息编号,title是要返回的对应信息编号标题,由于是OUT所以再调用

时要在其前加@在过程外调用。(见下例)
drop procedure if exists getNum;
create procedure getNum(OUT num int)
select 100 into num;

call getNum(@num);
select @num;
截图:


 

php存储例程、存储过程进阶学习之二
接着上篇文章,再调用有返回值时上个例子我们可以使用以下的方法调用存储过程:
select @返回参数;
我们现在使用这个方法来调用上面我们创建的select_news,来看看
 
有人会疑问为什么返回的title是null,而不是像call select_news(1,@title)一样返回的是

我们数据库编号对应的数据First App,这是由于我们的存储过程体并没有给title返回参数返

回值。

下面我们来看看存储函数
仍然以db_news表为例说明,不过我们在这个存储函数中我们加入其他一些关于存储例程的知

识来引入我们这次要谈及的学习对象。

drop function if exists count_news;
delimiter //
create function count_news(hits int) returns int
comment '根据传入的点击次数统计超过此点击数的信息数目'
begin
   declare total_news int;
   declare hits_num int default 0;
   if hits>=0 then
      set hits_num=hits;
      select count(id) into total_news from db_news where db_news.hits>hits_num;
  else
     set total_news=0;
   end if;
   return total_news;
end;
//
delimiter ;


 


在上面的存储函数中我们使用到了存储例程变量的声明、设置其值、判断语句、存储函数特

有的返回值类型及存储例程如何描述(comment).

与存储过程返回参数不同的是存储函数在定义时没用直接声明哪个变量是返回参数,而只是

使用了returns声明了返回参数所属的数据类型,返回参数是在函数体中使用return返回要返

回的数据变量的形式来表示的。这就需要注意的是:
存储函数只支持输入参数,并且输入参数前没有IN或INOUT.

返回上面的存储函数,我们来解释下代码含义:
drop function if exists count_news;
如果存在存储函数count_news则删除该存储函数,与存储过程一样我们可以使用下面的语句

删除存储过程或函数
drop procedure|function [if exists] 存储过程名|存储函数名;
delimiter //
使用delimiter更改mysql默认使用分号(;)使用新的结束符号来结束当前语句,使用

delimiter后原先默认的分号(;)结束语句符号不再起作用,直到重新恢复声明结束符后。
create function count_news(hits int) returns int
注意存储函数的参数只有输入参数并且前不再声明IN或INOUT,返回只需声明要返回的数据类


comment '根据传入的点击次数统计超过此点击数的信息数目'
使用comment 来描述该存储过程或存储函数的功能信息。使用格式为 comment '描述字符串

'
begin
   使用begin限定一个处理模块
declare total_news int;
声明变量 格式 declare 变量名 数据类型 [default 默认值]
   declare hits_num int default 0;
声明变量 格式 declare 变量名 数据类型 [default 默认值]
   if hits>=0 then
      set hits_num=hits;
      使用set 给变量赋值
select count(id) into total_news from db_news where db_news.hits>hits_num;
sql语句可以使用into给变量赋值
   else
     set total_news=0;
   end if;
   上面是一个判断语句,注意格式为if-else-end if 或者 if –else if-else-end if
注意分号(;)
   return total_news;
   使用return 返回存储函数要返回的值,注意该值只能是一个值。
end;
//
delimiter ;
综合一下我们上面的概念知识:
1. 存储函数的参数与存储过程有何不同。
2. 在存储例程中如何更改mysql的默认结束符号。
3. 在存储例程中如何描述功能信息。
4. 声明、设置变量。
5. begin-end语句块。
6. 条件判断if-else if-else-end if 或if-else-end if 或者if-end if

php教程 批量删除MySql数据库教程中相同前缀的表

<form id="form1" name="form1" method="post" action="<?php echo $PHP_SELF; ?>?

action=kill">
<table width="425" border="0" align="center">
  <tr>
    <td height="46" colspan="2" align="center"><p>批量删除MySQL数据库相同前缀的数

据表&nbsp;by <a href="http://www.111cn.net" target="_blank">sudu8</a></p></td>
    </tr>
  <tr>
    <td width="103">ip地址</td>
    <td width="306" height="26"><label>
      <input name="ip" type="text" id="ip" value="localhost" />
    </label></td>
  </tr>
  <tr>
    <td height="25">数据库账号</td>
    <td height="26"><label>
      <input type="text" name="user" id="user" />
    </label></td>
  </tr>
  <tr>
    <td>数据库密码</td>
    <td height="26"><label>
      <input type="text" name="pass" id="pass" />
    </label></td>
  </tr>
  <tr>
    <td>数据库</td>
    <td height="26"><label>
      <input type="text" name="db" id="db" />
    </label></td>
  </tr>
  <tr>
    <td>要删除的前缀</td>
    <td height="26">    <label>
      <input type="text" name="qz" id="qz" />
    </label>(&nbsp;例如:bbs_&nbsp;&nbsp;)</td>
  </tr>
    <tr>
    <td height="67" colspan="2" align="center">    <label>
      <input type="submit" name="tijiao" id="tijiao" value="开始删除" />
  </label></td>
    </tr>
</table>
</form>
<?php

if(@$_GET["action"]=="kill"){

if (empty($_POST['ip']))
echo "您没有填写IP地址";
echo "<br>";
if (empty($_POST['user']))
echo "您没有填写用户名";
echo "<br>";
if (empty($_POST['pass']))
echo "您没有填写密码";
echo "<br>";
if (empty($_POST['db']))
echo "您没有填写数据库";
echo "<br>";
if (empty($_POST['qz']))
echo "您没有填写前缀";
echo "<br>";
 
 $ip=$_POST['ip'];
 $user=$_POST['user'];
 $pass=$_POST['pass'];
 $db=$_POST['db'];
 $qz=$_POST['qz'];
 
$conn=mysql教程_connect($ip,$user,$pass);
 if (!$conn){
  die ("数据库连接出错! www.111cn.net ");
 }
mysql_connect($ip,$user,$pass);

mysql_select_db($db);

$rs=mysql_query('show tables');

while($arr=mysql_fetch_array($rs)){

    $TF=strpos($arr[0],$qz);

     if($TF===0){

        $FT=mysql_query("drop table $arr[0]");

         if($FT){

             echo "$arr[0] 删除成功!<br>";
       }

              }

            }

}

?>

定义和用法
header() 函数向客户端发送原始的 HTTP 报头。

认识到一点很重要,即必须在任何实际的输出被发送之前调用 header() 函数(在 PHP 4 以及更高的版本中,您可以使用输出缓存来解决此问题):

<html>
<?php教程
// 结果出错
// 在调用 header() 之前已存在输出
header('Location: http://www.111cn.net/');
?>语法
header(string,replace,http_response_code)参数 描述
string 必需。规定要发送的报头字符串。
replace 可选。指示该报头是否替换之前的报头,或添加第二个报头。

默认是 true(替换)。false(允许相同类型的多个报头)。
 
http_response_code 可选。把 HTTP 响应代码强制为指定的值。(PHP 4 以及更高版本可用)


1.定义header()头部输出格式

header("Content-type:application/vnd.ms-excel");  //定义输出的文件类型

header(“content-Disposition:filename=downloaded.pdf”);  //定义输出的文件名,也就是设置一个下载类型,下载的时候对文件从新命名

 

<?php
header("Content-type:application/vnd.ms-excel");
header("content-Disposition:filename=downloaded.pdf ");

echo"1t 2t 3n"; //其中 t 是空白 ,n是回车 (编码规范 不能直接输出)
echo"1t 2t 3n";
echo"1t 2t 3n";


?>


 

这时候就可以打开这个php文件,就会提示下载。

 

也可以以table表格的方式输出;

 

<?php
  header("Content-type:application/vnd.ms-excel ");
 header("content-Disposition:filename=downloaded.pdf");
?>
  <table>
    <tr>
      <td>t00</td><td>t01</td><td>t02</td>
    </tr>
    <tr>
      <td>t10</td><td>t11</td><td>t12</td>
    </tr>
    <tr>
      <td>t20</td><td>t21</td><td>t22</td>
    </tr>
  </table>
 

CSV的写入操作:

fputcsv()的使用可参考.

 

  $fp = fopen('f:/file.csv', 'w');
      fputcsv($fp,array('aaa','bbb','cccc'));
      fputcsv($fp,array('mmm','yyy','haha'));   //fputcsv()可以用数组循环的方式进行实现
       fclose($fp);

[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • c#异步读取数据库与异步更新ui的代码实现

    这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
  • Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
  • php根据用户语言跳转相应网页

    当来访者浏览器语言是中文就进入中文版面,国外的用户默认浏览器不是中文的就跳转英文页面。 <&#63;php $lan = substr(&#8194;$HTTP_ACCEPT_LANGUAGE,0,5); if ($lan == "zh-cn") print("<meta http-equiv='refresh' c...2015-11-08
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • php有效防止同一用户多次登录

    【问题描述】:同一用户在同一时间多次登录如果不能检测出来,是危险的。因为,你无法知道是否有其他用户在登录你的账户。如何禁止同一用户多次登录呢? 【解决方案】 (1) 每次登录,身份认证成功后,重新产生一个session_id。 s...2015-11-24
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • Linux 下使用shell脚本定时维护数据库的案例

    这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11