20 12
发新话题
打印

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

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

第一次写的程序在这里
http://www.phpchina.com/bbs/thread-32190-1-2.html
如果没有看第一篇的新手请看第一篇,再看这一贴子,
因为这里不是从头开始了,而是接着上次的来修改,完善...
我准备把他写成连载,记录自己学习PHP的点点滴滴
老鸟就不用看了,因为都是比较基础的东西,
如果要看,就看最后我提的问题吧:)
这一次主要是增加了几个字段,增加了删除,修改功能
呵呵,这一次我把表的字段增加了  sex  hompage email  这3个字段, 看看SQL语句吧
复制PHP内容到剪贴板
PHP代码:
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 标签里面的代码贴出来
复制PHP内容到剪贴板
PHP代码:
<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内容到剪贴板
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内容到剪贴板
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内容到剪贴板
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内容到剪贴板
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爱好者
坚持发有质量的帖,回有质量的贴

TOP

谢谢
不错.顶下..
php mysql apache 学习中..

TOP

新人学习中
※云是风滑过天空的痕迹,你是谁记忆中的碎片,飘落的叶,飘飞的云,留下一片孤寂,散落于天空中......※

TOP

得多多学习了,支持一下
顶顶顶
享受PHP

TOP

打个包   就更好了   
谢谢
努力,奋斗,拼搏
--------------------------------
blog: http://www.webphper.cn

TOP

lz的注释可以用这种能够风格

/*
注释内容
*/

就看这注释数量!

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

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

/**
*
*/

#

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

[ 本帖最后由 liuxingyuyuni 于 2007-8-13 15:08 编辑 ]

TOP

不简单啊!~

TOP

 20 12
发新话题