返回列表 回复 发帖

[最适合菜鸟]刚学PHP,做的最粗糙最简单的留言本[全程思考过程][更新版本V2.0]

[最适合菜鸟]刚学PHP,做的最粗糙最简单的留言本[全程思考过程][更新版本V2.0]

第一次写的程序在这里
http://www.phpchina.com/bbs/thread-32190-1-2.html
如果没有看第一篇的新手请看第一篇,再看这一贴子,
因为这里不是从头开始了,而是接着上次的来修改,完善...
我准备把他写成连载,记录自己学习PHP的点点滴滴
老鸟就不用看了,因为都是比较基础的东西,
如果要看,就看最后我提的问题吧:)
这一次主要是增加了几个字段,增加了删除,修改功能
呵呵,这一次我把表的字段增加了  sex  hompage email  这3个字段, 看看SQL语句吧
ALTER TABLE `my_liuyanADD `sexVARCHARNOT NULL AFTER `name` ; 

#这个是增加sex的语句,  AFTER `name` 的意思是在name 字段后面 ,同样

ALTER TABLE `my_liuyanADD `homepageVARCHARNOT NULL ;

ALTER TABLE `my_liuyanADD `emailVARCHARNOT NULL ;

#在后面增加了两个字段,至于这个 ` 符号,我查了资料,是mysql特有的,不加也没有关系的 ,SQL里面不用这个符号的

复制代码
好了,现在我就修改了数据表

然后,因为增加了用户要填写的数据,所以主页也加了几个表单,现在我把 body 标签里面的代码贴出来
<body>

<
form action="jieshou.php" method="POST">

        
姓名:<input type="text" name="user_name"/><br/>

    <
input type="radio" name="sex" value="1" checked="check" />

    


        
<input type="radio" name="sex" value="2" />

    


<br/>

        
主页:<input type="text" name="user_home"/><br/>

        
EMAIL:<input type="text" name="user_email"/><br/>

        
信息内容:<br/>

        <
textarea name="user_content" cols="40" rows="8"></textarea>

        <
br/>

        <
input type="submit" name="btn_ok" value="提交"/>

</
form>

复制代码
汗......... 刚刚提交的时候出现了问题.,...害得好多注释没有了...我疯调了

好了,现在按照流程,因为   ,所以,我们要改一下 jieshou.php 这个页面了       这次这个页面加了比较多的东西,看代码:)

<?php

/////////////////////////////////////////////////////////////////链接数据库     

include_once('config.inc');    //引入数据库参数

$con mysql_connect($DBHOST,$DBUSER,$DBPWD);

mysql_select_db($DBNAME,$con);//////  上面这一段是链接数据库和选择数据库,大家都应该很熟练了吧

///////  其中,我发现一个问题,就是 config.inc 这个文件的后缀名, 不能为 .inc ,因为我试过了, 这个后缀名的文件可以在浏览器

///////  直接打开,能看到里面的变量数据, 如果改成 config.inc.php ,就没有问题,也就安全多了,呵呵,这里我就不改了

$query "INSERT INTO my_liuyan (name,sex,content,ltime,homepage,email)";

$query.= "VALUES('$user_name','$user_sex','$user_content','$creat_time','$user_home','$user_email')";

//////  然后,上面这一句是建立查询语句,还没有查询哦 , INSER INTO  就是插入数据的语法,大家也可以查一下,

//////  在这里我建议大家,如果有碰到看不懂的语句,千万不要PASS,而是要查资料,利用搜索引擎,或者百度,或者google都可以

//////  这样我感觉就进步得快!

////echo $query;   /// 这一句是我测试SQL 语法是否 赋给了 变量,调试程序中用的,测试通过我就把他注释掉了

//echo mysql_errno();  //同样,这一句是返回 mysql错误的代号,No嘛,如果没有错误就是0.如果有错,就会出现不为0的数字        

$reslt mysql_query($query); //向数据库中执行SQL语句,具体的就是插入语句       

 
if($reslt) echo '数据库插入成功'//如果成功,就写成功,测试通过也可以屏蔽

$close mysql_close($con); 

///最后当然是关闭链接,不过我看资料,说是这一页如果关了,那也会自动关闭和数据库的链接的                                       

 /// 但是前提是用了 mysql_connect 这个函数,而不是用永久链接那个函数(函数名字我忘了)                                      

  ///  查了一下  是这个:        mysql_pconnect ,多了一个P ,那样的话,就不会自动断开链接了

?>

复制代码
呵呵,插入的终于说完了现在,要来修改 现实留言的 页面 了 ,就是 chaxun.php 这个页面废话不说,代码贴出,思路在注解里面

<?php

//测试查询数据库

include_once('config.inc');

$con mysql_connect($DBHOST,$DBUSER,$DBPWD);

mysql_select_db($DBNAME,$con);



$query "select * from my_liuyan ORDER BY lid DESC ";





$reslt mysql_query($query);

if(
$reslt) echo '查询成功<br/>';





//下面这个改得挺多的,就是增加了表格,让显示页面更加整齐一点



while ($row mysql_fetch_row($reslt))   

//这是 mysql_fetch_row 这个函数的作用了                                                           

// 也就是他的指针会自动往下移动的      

// 听别人说用 foreach 效率更好,但是我还是有点不懂,所以就先用这个了



//大家注意看,我在html里面 把 " 用 \" 代替,就是不让"在php中起作用                                                      

        
{

                echo 
"<table width=\"100%\" border=\"1\">

  <tr>

    <td width=\"24%\">(ID:$row[0]) 姓名:$row[1]</td>   //ID:$row[0] ,因为lid的字段是表中的第一个,所以$row[0]就是 lid 里面的值

    <td width=\"50%\">主页:$row[5]</td>               // 这几行都是这个道理    

    <td width=\"7%\">性别:$row[2]</td>

    <td width=\"19%\">时间:$row[4]</td>

  </tr>

  <tr>

    <td colspan=\"4\">$row[3]           //这是内容,大家就可以看出来在表中,这是第四个字段了   

   <br/>



////下面是我新增的内容了哦

    <a href=\"chang.php?id=$row[0]\">修改</a>  <a href=\"del.php?id=$row[0]\">删除</a> 



// 首先,  这个  <a href=\"chang.php?id=$row[0]\">修改</a> 是一个修改的链接 , 点击了会转到              

//chang.php?id=$row[0] 这个页面 ,这里 $row[0] ,在编译时,会自动转成 要修改留言的 id   

//呵呵,到这个时候,我终于明白了用 id 的好处了 . 这个 ?id=$row[0] 就是传输参数的意思             

//在 PHP4.3 之后,就可以用 $_GET['id'] 来获得



// 然后,    <a href=\"del.php?id=$row[0]\">删除</a>  ,也是这个道理         

///////

    </td>

    

  </tr>

</table>"
;

                

        }

mysql_close($con);



?>

复制代码
好了,按照流程 这时候应该 要 建立 连个文件了
因为主页里面多了 chang.php 和 del.php
所以,我们要新建一个 chang.php , del.php 这里,我就先新建一个 del.php
好了看代码,同样,思路我也全写在注释里

刚刚提交了一下,发现有敏感字符,回到页面,编辑器变成可见的了,里面全乱了,疯了,注释能找多少就算多少了

:')
这里,我说一下简单的流程. 如果点击了修改这个链接,那么就会显示出原来的留言内容
然后,用户修改了内容,再点击提交,这时候,我们就要用修改数据库的内容了,
而修改数据库的内容,应该交给另一个页面来完成现在,
先把 chang.php 的代码贴出来

<?php

include_once('config.inc');

        
$con mysql_connect($DBHOST,$DBUSER,$DBPWD);

        
mysql_select_db($DBNAME,$con);



        
$id $_GET['id'];        //得到页面传输的id参数

        //echo $id;  //测试用



        
$query "select * from my_liuyan where lid='$id' ";

 

        
$reslt mysql_query($query);



        
//if($query) echo '查询成功<br/>';



        
$row mysql_fetch_row($reslt);     //得到查询结果,这里不用while了 ,因为只查询一条留言,所以也就不用循环了 



///////////  下面现实的内容跟 index.htm 中的差不多,就是有一点不同 : 表单里面的默认值是有的,而且是原来留言的内容             

/////  一般是在 value 里面                         



echo "

        <form action=\"changed.php?id=$id\" method=\"POST\">

// 注意看,这里  action=\"changed.php?id=$id\ 修改的任务交给了 changed.php 这个页面去执行,然后也传递 id



        姓名:<input type=\"text\" name=\"user_name\" value=\"$row[1]\"/><br/>"
;

//////// 注意了没有 value=\"$row[1]\" 这里的 $row[1] 就是名字这个字段的内容,这里放在 value 后面                                         

 //// 就表示页面一开始,里面就默认有的文字



////////////////////////////////////////////////// 这个方框里面的代码是为了显示默认的男女现实框而做的逻辑判断

///////////   因为 radio 没有预设值,只能有 checked 这东西,所以不能象 value 那样用参数要动态变化



 
if ($row[2] == 1){

echo        
"<input type=\"radio\" name=\"sex\" value=\"1\" checked=\"check\" />

    男

        <input type=\"radio\" name=\"sex\" value=\"2\" />

    女"
;

 }else {

         echo        
"<input type=\"radio\" name=\"sex\" value=\"1\"  />

    男

        <input type=\"radio\" name=\"sex\" value=\"2\" checked=\"check\"/>

    女"
;

 }



///////////////////////////////////////////////////////////////////////////////////////



//////// 下面的这段就跟主页一样了 ,

echo "<br/>

        主页:<input type=\"text\" name=\"user_home\" value=\"$row[5]\"/><br/>

        EMAIL:<input type=\"text\" name=\"user_email\" value=\"$row[6]\"/><br/>

        信息内容:<br/>

        <textarea name=\"user_content\" cols=\"40\" rows=\"8\">$row[3]

        </textarea>

        <br/>

        <input type=\"submit\" name=\"btn_ok\" value=\"提交\"/>

</form>"

        
;

        



?>

复制代码
接下来,就是最后一步了哦就是 changed.php 这个页面了,实现修改的页面代码贴上

<?php

//检查页面请求是否合法

$check $_POST['btn_ok'];

if (
$check != '提交')

        {

                echo 
"请求不合法!";       

                exit();          

        }

/////////////////////////////

////接受传递数据

$id $_GET['id'];

$user_name $_POST['user_name'];                         //得到用户名

$user_content $_POST['user_content'];                //得到留言内容

$creat_time date(y.'年'.m.'月'.d.'日'.h.':'.i.':'.s); //得到提交留言日期

$user_home $_POST['user_home'];

$user_email $_POST['user_email']; 



$user_sex $_POST['sex']=='男' '女';





//echo $id.$user_content.$user_sex;  //测试用的



//测试查询数据库



include_once('config.inc');

$con mysql_connect($DBHOST,$DBUSER,$DBPWD);

mysql_select_db($DBNAME,$con);





$query " UPDATE my_liuyan SET name='$user_name',sex='$user_sex',

                   content='$user_content',homepage='$user_home',email='$user_email' 

                   WHERE lid='$id' "
;

/////// 这个  UPDATE my_liuyan SET 就是更新的语法了,后面就是加上字段的赋值

////////  最后   WHERE lid='$id'  限定了只能在指定的 一行中修改



$reslt mysql_query($query);



if(
$reslt) echo '修改成功!<br/>';



mysql_close($con);



?>

复制代码
呵呵.终于好了,好累啊,

不过我有一个问题,希望高手给出解决方案

这里的 del.php ,我想高手已经看到了严重的要求漏洞了吧

因为他只以来与 用浏览器来传输 数值 ,所以如果用户直接在 浏览器改变一下id 的值,

那就可以任意删除留言啦

目前我想出一种方法,就是用POST 的 SUBMIT 来 实现检验

可是,还没有没有别的方法,请高手给出思路

我知道程序还有很多不完善的地方,呵呵,希望大家提出来,共同进步,毕竟,这才是我第二次写的程序.

呵呵,打得好辛苦啊,继续学习ing :)

[ 本帖最后由 njuptsoz 于 2007-8-8 02:21 编辑 ]
Css爱好者
坚持发有质量的帖,回有质量的贴
谢谢
不错.顶下..
php mysql apache 学习中..
新人学习中
※云是风滑过天空的痕迹,你是谁记忆中的碎片,飘落的叶,飘飞的云,留下一片孤寂,散落于天空中......※
得多多学习了,支持一下
顶顶顶
享受PHP
打个包   就更好了   
谢谢
努力,奋斗,拼搏
blog: http://www.xphper.com
lz的注释可以用这种能够风格

/*
注释内容
*/

就看这注释数量!

也要顶起呀~~~~~~~~~~~~~

就是注意一下注释的写法呀.  @_@!

/**
*
*/

#

//    按需取用........

[ 本帖最后由 liuxingyuyuni 于 2007-8-13 15:08 编辑 ]
不简单啊!~
返回列表