9.1.4 使用Insert语句实现用户注册

对于专门为数据库设计的语言来讲,SQL是一种数据库操作技术,可以对数据库进行添加、修改、删除等一系列操作。

当由记录表示的一个新实体出现时,通常就把一个新的数据记录添加到关系数据库中。实现数据的添加操作可使用Insert语句完成,具体的语法请读者参见本书11.6.1节。

数据添加主要应用到如下几个函数,下面分别进行介绍。

1.mysql_query()函数

mysql_query()函数用来根据连接标识符向指定数据库服务器的当前数据库发送查询。语法如下:

int mysql_query(string query ,int [link_identifier]);

其中,query是查询字符串;link_identifier是数据库连接标识符。

mysql_query()在执行成功时返回一个结果标识符,失败时返回FALSE。

2.mysql_fetch_array()函数

mysql_fetch_array()函数用来从结果集取得的行生成数组。语法如下:

array mysql_fetch_array(int result,int[result_type]);

其中,result_type参数是一个常量,可选项,可以接受以下值(默认值为MYSQL_BOTH):

MYSQL_ASSOC:只得到关联索引。

MYSQL_NUM:只得到数字索引。

MYSQL_BOTH:将得到一个同时包含关联和数字索引的数组。

注意:mysql_fetch_array()函数返回的字段名区分大小写。

mysql_fetch_array()函数先提取出查询结果的第一行的内容,这个函数的参数就是mysql_query()函数返回的整数标志。而mysql_fetch_array()执行成功后,记录集指针会自动下移,这样当再一次执行mysql_fetch_array()时,得到的就是下一行记录的内容了。

下面通过具体的范例来讲解Insert语句在PHP中的应用。

范例09-01 使用Insert语句实现用户注册

范例位置:mr\fl\09\01

录像位置:mr\lx\09

数据添加是Web程序或网站最基本的功能之一(基本功能为添加、修改、删除、查询等),任何一个Web程序或网站的后台管理页面都要提供数据添加的功能。向数据表中插入数据可以通过Insert语句实现。本范例通过Insert语句实现了用户注册功能,运行结果如图9.2所示。

本范例的设计思路如下。

(1)本范例在注册用户时,由于不能存在同样的用户名,因此需要首先对用户名进行判断。在“用户名”文本框中输入用户名称,单击“检测用户”超链接,通过window.open打开一个用户检测的用户对话框,对输入的用户进行检测,并对检测结果给出相应的提示。代码如下:

<script language="javascript">

   function openwin(x){

     if (x==""){

           alert("请输入用户名!"); myform.UserName.focus();return false;

}

else{

     window.open("submit_checkuser.php?x="+x,"newframe","width=300,height=150");

     }

   }

   </script>

<a href="#" onClick="javascript:openwin(myform.UserName.value)">[检测用户]</a>

图9.2 录入数据

(2)利用$_GET[x]将文本框的值传递到数据处理页(submit_checkuser.php),可检测用户名称是否存在,代码如下:

<?php

include "Conn/conn.php";

$UserName=$_GET[x];

$sql=mysql_query("select * from tb_user where Username = '$UserName'");

$result=mysql_fetch_array($sql);

if ($result!=false){

      echo ("[<font color=red>".$UserName."</font>]已被注册!");

}

else{

      echo ("恭喜您!用户名[<font color=green>".$UserName."</font>]可以注册!");

}

?>

(3)当用户按要求填写用户信息后,单击【确定保存】按钮将数据提交到数据处理页(register_deal.php)进行数据处理。

(4)在数据处理页register_deal.php中利用include包含文件命令引用数据库配置文件,访问数据库。代码如下:

<? php include "Conn/Conn.php"; ?>

(5)将从表单中提取的数据存储到变量中,使用Insert语句将用户填写的数据作为新记录插入到数据表中,并弹出“用户注册成功”提示框。程序代码如下:

<?php

$UserName=$_POST[UserName];

$TrueName=$_POST[TrueName];

$PWD=$_POST[PWD1];

$ICO=$_POST[ICO];

$Sex=$_POST[Sex];

$birthday=$_POST[Birthday];

$Email=$_POST[Email];

$Tel=$_POST[Tel];

$homepage=$_POST[Homepage];

$OICQ=$_POST[OICQ];

$Address=$_POST[Address];

      $INS=mysql_query("Insert Into tb_user (Username,Pwd,TrueName,ICO,Sex,birthday,Email,Tel, homepage,OICQ,Address) Values('$UserName','$PWD','$TrueName','$ICO','$Sex','$birthday','$Email',' $Tel', '$homepage','$OICQ','$Address')");

     $result1=mysql_fetch_array($INS);

      echo "<script> alert('用户注册成功!');</script>";

      echo "<script> window.location='index.php';</script>";

?>

9.1.5 使用Update语句实现批量更新用户状态

批量数据更新在数据库中的应用是比较广泛的,而且通过批量数据更改可以达到省时省力、提高效率的目的。

批量更新数据主要应用到了Update语句和In子句。Update语句的语法请读者参见本书11.6.2节。下面介绍一下In子句的用法。

In子句用于确定给定的值是否与子查询或列表中的值相匹配。语法如下:

test_expression [ NOT ] IN

(

      subquery

      | expression [ ,...n ]

)

其中,参数test_expression代表所有有效的Microsoft® SQL Server™表达式;参数subquery包含某列结果集的子查询;参数expression [,...n]表示一个表达式列表,用来测试是否匹配。所有的表达式必须与test_expression具有相同的类型。

下面的范例主要应用Update语句实现批量更新用户状态。

范例09-02 使用Update语句实现批量更新用户状态

范例位置:mr\fl\09\02

录像位置:mr\lx\09

一般在设计用户权限或是更改工资级别时都会用到批量更新,批量更新的好处是速度快、安全性高。在本范例中,利用批量更新更改用户状态。选择要操作的用户,单击【激活】或【冻结】按钮,即可将用户设为激活或冻结状态。程序运行结果如图9.3、图9.4所示。

  

            图9.3 选中欲更新的用户                      图9.4 批量更新用户状态

本范例的实现过程如下。

(1)利用include包含文件命令引用数据库配置文件,访问数据库。代码如下:

<?php include "conn/conn.php"; ?>

(2)利用Do…while循环语句输出用户信息,将每条记录前面加上复选框,并进行相关属性值设置。代码如下:

<form name="form1" method="post" action="index.php" onSubmit="Checker()">

<table width="349" border="1" align="center" cellspacing="0" >

    <tr align="center" bgcolor="#efefef">

      <td height="36" colspan="3">用户列表

      </td>

    </tr>

    <?php

      $sql=mysql_query("select * from tb_member");

      $result=mysql_fetch_array($sql);

      do {

      ?>

    <tr align="center">

      <td width="108"><input name="id" type="checkbox" id="id" value="<?php echo $result[M_ID];
?>"></td>

      <td width="131"><?php echo $result[M_Name]; ?></td>

      <td width="88"><?php echo $result[Grade]; ?></td>

    </tr>

    <?php

      }while($result=mysql_fetch_array($sql));

?>

<tr align="center">

        <input type="hidden" name="items" value="<?php echo $item; ?>">

<td colspan="3"><input type="submit" name="Submit" value="激活" > 

    <input type="reset" name="Submit" value="重置">

    <input type="submit" name="Submit" value="冻结">

</tr>

</table>

<p>&nbsp;</p>

</form>

(3)PHP接收多个同名复选框信息,不像JSP那样可以自动转换成为数组,这给使用者带来了一定的不便。但是还是有解决办法的,即利用JavaScript脚本做一下预处理。当提交表单时,调用cheaker()函数,多个同名复选框在JavaScript脚本中还是以数组的形式存在的,所以在表单提交之前,可以利用JavaScript把复选框中的信息组合成一个字符串赋值给表单中的隐藏元素。代码如下:

<script language="javascript">

function Checker(){

form1.items.value = "";         //设置隐藏域的值为空

if ( !form1.id.length ) {         //只有一个复选框,form1.item.length = undefined

      if ( form1.id.checked ){

      form1.items.value = form1.id.value;

      }

}else {

      var temp="";

      for ( i = 0 ; i < form1.id.length ; i++ ){

          if ( form1.id(i).checked ){               //复选框中有选中的框

                  temp=temp+form1.id(i).value+",";    //使用","分隔符将数组元素组合成一个字符串

          }

      }

      temp=temp.substring(0,temp.length-1);     //去除字符串末尾多余的","

      form1.items.value = temp;      //将变量赋值给隐藏域

}

}

</script>

(4)将隐藏域的值赋给变量item,这样就可以实现复选框信息的传递了。再使用Update语句和In子句对选中的用户进行批量更新。代码如下:

<?php

      $item = $POST[items];

      if( $item<>""){

          if ($_POST[Submit]=="激活"){

          $sql=mysql_query("update tb_member set Grade='激活' where M_ID in (".$item.")");

          $result=mysql_fetch_array($sql);

          }

      else{

                        $sql=mysql_query("update tb_member set Grade='冻结' where M_ID in (".$item.")");

                  $result=mysql_fetch_array($sql);

          }

      }

      else{

      echo "<div align='center' style='color:#FF0000; font-size:12px'>请选择一个用户</div>";

      }

?>

9.1.6 使用Delete语句实现批量删除用户信息

批量数据的删除在各大中小型网站及管理系统中应用最为广泛。批量删除数据是通过Delete语句实现的。

例如,批量删除图书信息表中图书名称包含“PHP”的数据信息,代码如下:

$sql=mysql_query("Delete from tab_book where bookname like '%".php."%'");

$result=mysql_fetch_array($sql);

下面的范例主要应用复选框实现数据的批量删除。

范例09-03 使用Delete语句实现批量删除图书信息

范例位置:mr\fl\09\03

录像位置:mr\lx\09

在对数据进行删除时,有很多种方法。本范例主要通过复选框实现数据的批量删除。运行本范例,选择要删除的数据前的复选框,单击【删除】按钮,此时所有被选中的数据将全部被删除。删除图书信息前及删除图书后的运行结果如图9.5、图9.6所示。

图9.5 批量删除数据前

图9.6 批量删除数据后

本范例主要应用Delete语句和In子句实现批量数据删除操作。Delete语句的语法请读者参见本书11.6.3节。

本范例的实现过程如下。

(1)利用包含文件命令include引用数据库配置文件,即可访问数据库。代码如下:

<?php include "Conn/conn.php"; ?>

(2)利用Do…While语句将数据表中的所有记录显示出来,并将每条记录前面加上复选框。添加Form表单及复选框,并进行相关属性值的设置。代码如下:

<form name="form1" method="post" action="index.php" onSubmit="Checker()">

<table width="770" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#73BA08" >

    <tr>

      <td height="244" colspan="7" background="p_w_picpaths/bg.jpg">&nbsp;</td>

    </tr>

    <?php

      $sql=mysql_query("select * from tab_book");

      $info=mysql_fetch_array($sql);

      do {

      ?>

    <tr>

      <td width="26"><input name="id" type="checkbox" id="id" value="<?php echo $info[id]; ?>"> </td>

      <td width="161"><?php echo $info[bookname]; ?></td>

      <td width="72"><?php echo $info[issuDate]; ?></td>

         <td width="29"><?php echo $info[price]; ?></td>

      <td width="170"><?php echo $info[synopsis]; ?></td>

        <td width="73"><?php echo $info[Maker]; ?></td>

      <td width="89"><?php echo $info[pulisher]; ?></td>

    </tr>

    <?php

      }while($info=mysql_fetch_array($sql));

      ?>

<tr align="center">

        <input type="hidden" name="items" value="<?php echo $item; ?>">

<td colspan="7"><input type="submit" name="Submit" value="删除" > 

    <input type="reset" name="Submit" value="重置">

</tr>

</table>

</form>

(3)当提交表单时,调用cheaker()函数,利用JavaScript脚本把复选框中的信息组合成一个字符串,赋值给表单中的隐藏元素。代码如下:

<script language="javascript">

function Checker(){

form1.items.value = "";         //设置隐藏域的值为空

if ( !form1.id.length ) {         //只有一个复选框,form1.item.length = undefined

      if ( form1.id.checked ){

      form1.items.value = form1.id.value;

      }

}else {

      var temp="";

      for ( i = 0 ; i < form1.id.length ; i++ ){

          if ( form1.id(i).checked ){               //复选框中有选中的框

                    temp=temp+form1.id(i).value+",";    //将数组中的元素使用","分隔

            }     

    }

    temp=temp.substring(0,temp.length-1);        //去除字符串末尾多余的","

    form1.items.value = temp;        //将变量赋值给隐藏域

}

}

</script>

(4)将隐藏域的值赋给变量item,这样就可以实现复选框信息的传递了。通过单击【删除】按钮,将复选框选择的任意一条或多条记录删除。代码如下:

<?php

    $item = $_POST[items];

    if( $item<>""){

            if ($_POST[Submit]=="删除"){

                    $sql=mysql_query("Delete from tab_book where id in (".$item.")");

                    $result=mysql_fetch_array($sql);

            }

    }

    else{

            echo "<div align='center' style='color:#FF0000; font-size:12px'>请选择欲删除的图书项目</div>";

    }

?>