发新话题
打印

(转)[最适合菜鸟]最粗糙最简单的留言本[全程思考过程]

(转)[最适合菜鸟]最粗糙最简单的留言本[全程思考过程]

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

呵呵,学习PHP的时间,看我的注册时间吧.
不过,之前有过一点C++的基础,所以语法还是挺容易看懂的.


但是就是看 MYSQL语法啊,对于SQL,我一点概念都没有,后来找了很多资料,才终于知道了基本概念
      就是,数据库->表->字段->行; (呵呵,也许有的人认为很简单,但是这花了我两天的时间才领悟的,本人比较笨,呵呵)
然后,知道了数据库的概念之后,我就想应该可以弄个留言本玩玩了吧.
      但是,由于除了写echo之外,从来没有写过PHP代码,所以,基本上这个粗糙的留言本都是翻资料,在论坛找资料所得

如果是高手的话,就不用看了吧,因为这确实比较简单的,
      如果你还是刚入门,就可以看看,因为我把思路都放在注释里面了.

下面,就看我这个最最简单的留言本吧.呵呵

    首先,是数据库的结构,既然是最粗糙的留言本,就只需要这几个字段:
                  

  • ID(我看到别人一般都有,也就加了,是自动增长的)
  • name 就是留言者的名称
  • content 留言内容
  • ltime 留言的时间

           其中,name和content是需要留言的人自己写的,其他是自动生成的.
     
现在我把建立表的语句放上来:
复制内容到剪贴板
代码:
create table if not exists my_liuyan  #这里是建立一个表
( lid int not null auto_increment primary key,  #建立一个lid,自动增加,主键
  name varchar(30) not null,    #建立了一个名字
  content blob not null,          #建立了内容字段,类型为 blob ,是查资料的,虽然对blob还不了解
  ltime varchar(30) not null      #建立了存贮发言时间的字段,本来类型是定义成 datetime 的,但是我要存贮的是07年8月4日04:05:36
                                           #这种形式的,所以就把 datatime 改成了 varchar(30) 了
);
一开始写这个SQL语句的时候,都犯了很多错误,比如 create ,我就写成了 creat ,呵呵,毕竟一开始写,我知道这是一个过程.
然后把上面这段放在 phpmyadmin 里面运行,就建立这个表(当然,在此之前弄错了好多);

    然后,我就开始写全局变量的文件:

首先,是config.inc 这个配置文件代码:
复制内容到剪贴板
代码:
<?php
//全局变量
$DBHOST = 'localhost';   //数据库服务器地址,我是在本地的
$DBUSER = 'root';         //数据库用户
$DBPWD = ' ';    //数据库密码,我这里就不写了,呵呵
$DBNAME = 'myliuyan';   //这是我在phpmyadmin里面建立的一个数据库,里面来放我刚刚建立的一个表

?>
然后,就是开始写 index.htm 这个静态页面了.也贴出代码这里我只把 body这个标签里面的代码贴出来)
复制内容到剪贴板
代码:
<body>
<form action="jieshou.php" method="POST"> <!--这里表示接受这个表单数据的文件地址:jieshou.php,方法是post--!>
        姓名:<input type="text" name="user_name"/><br/> <!--定义接受姓名的变量为user_name--!>
        信息内容:<br/>
        <textarea name="user_content" cols="40" rows="8"></textarea>  <!--定义接受内容的变量为user_content--!>
        <br/>
        <input type="submit" name="btn_ok" value="提交"/>  <!--定义一个提交按钮,这里我定义了一个变量,但是后面没有用,因为我看资料,有的资料定义了这个变量,我想是以后有用的吧--!>
</form>
</body>
呵呵,是不是很简陋的页面啊,先不管,看看能不能成功再说.

然后,要写 jieshou.php 这个文件了,这个文件的任务就是把留言的信息提交到数据库中去,贴代码:
复制内容到剪贴板
代码:
<?php
//使用接受一下参数,看看对不对(这是一开始还没有链接数据库的时候,我做的测试)
$user_name = $_POST['user_name'];                         //得到用户名
//echo $user_name; //这是刚开始我做的看能不能得到在index.htm中的数据写的语句
$user_content = $_POST['user_content'];                //得到留言内容
                 /////////////////////////////////////////////
                //这里,我要说一下上面两个语句,也就是我得到index.htm中的语句
               //之前,资料中是用 $HTTP_GET_VARS得到数据的
              // 然而,我看到很多人用 $_POST,所以,在论坛找到了资料
             //一个是PHP4.3之前的用法,一个是4.3之后的版本
            ///////////////////////////////////////////////////////////////////////////

$creat_time = date(y.'年'.m.'月'.d.'日'.h.':'.i.':'.s); //得到提交留言日期
          ////////// 同时,上面这个函数 datedate(y.'年'.m.'月'.d.'日'.h.':'.i.':'.s) 也是查资料的,得到的是 07年08月04日12:03:36这样的形式.

//链接数据库
include_once('config.inc');                                                           //引入数据库参数 ,把刚刚那个文件的变量引入进来了.

$con = mysql_connect($DBHOST,$DBUSER,$DBPWD);                   //这个函数是链接到数据库的函数

               //if($content) echo '数据库链接成功';                           //这个也是测试数据库链接的情况

mysql_select_db($DBNAME,$con);                                              //这个是选择数据库,前几次因为忘了选择数据库,所以总是插入失败
        
              //if($close) echo '数据库关闭成功';                                //同样,这个也是测试数据库的关闭成功情况,后来也是忘了把这句注释                        

                                                                                             //掉,弄得插入失败

$query = "INSERT INTO my_liuyan (name,content,ltime)";
$query.= "VALUES('$user_name','$user_content','$creat_time')";    //这两行是数据库查询语句,不过还没有实行,

echo $query;                                                                            //输出查询语句,看看有没有语法错误

$reslt = mysql_query($query);                                                    //这个函数是查询函数,这一句才是插入数据的命令
        if($reslt) echo '数据库插入成功';                                          //看看数据插入成功否

$close = mysql_close($con);                                                        //关闭数据库
?>
然后,测试后,成功的写入信息到数据库了,但是,我在phpmyadmin中看BLOB数据的时候,看不到,请问怎么看BLOB数据?

然后,就是查看留言内容的页面了,其实就是一个查询数据库的页面,代码贴上:
复制内容到剪贴板
代码:
<?php
//////////////////测试查询数据库
include_once('config.inc');   //引入文件
$con = mysql_connect($DBHOST,$DBUSER,$DBPWD);        //链接数据库

mysql_select_db($DBNAME,$con);                        //选择数据库

$query = "select * from my_liuyan";                 //设置查询的语句

$reslt = mysql_query($query);                     //实施查询命令
//if($query) echo '查询成功<br/>';//测试查询成功否            

while ($row = mysql_fetch_row($reslt))        //把结果返回到 $row 数组中
         {
                echo 'ID: '.$row[0].'<br/>';
                echo 'name:  '.$row[1].'<br/>  ';
                echo 'content:  '.$row[2].' <br/> ';
                echo 'time:  '.$row[3].' <br/> ';
                echo '<hr/>';
        }                                                  //这段while语句就 把查询到的语句输出出来

mysql_close($con);        //关闭数据库

?>
好了,这就是昨天晚上花了3个小时做出来的,

其中,自己范了很多错误,是学到在看书时没有意识到的错误.

虽然程序很简陋,也没有设计到分页查询,但是,这毕竟是自己的第一个有功能的程序了

呵呵,所以就厚着脸皮发出来,

然后自己再把程序不断完善,在这个过程学到更多的知识和技巧.

对于高手来说,这个应该是最基本的代码了,所以,如果大家有什么建议的话,也可以说出来,

帮助我们这些菜鸟成长吧.
交流QQ群2:16142493
智能手机软件下载
PHP新手不可错过一帖
PHP新手如何获得积分
论坛需要你,我们大家需要你!

TOP

[最适合菜鸟]最粗糙最简单的留言本[全程思考过程][V2.0]

如果没有看第一篇的新手请看第一篇,再看这一贴子,
因为这里不是从头开始了,而是接着上次的来修改,完善...
我准备把他写成连载,记录自己学习PHP的点点滴滴
老鸟就不用看了,因为都是比较基础的东西,
如果要看,就看最后我提的问题吧
这一次主要是增加了几个字段,增加了删除,修改功能
呵呵,这一次我把表的字段增加了  sex  hompage email  这3个字段, 看看SQL语句吧
复制内容到剪贴板
代码:
ALTER TABLE `my_liuyan` ADD `sex` VARCHAR( 2 ) NOT NULL AFTER `name` ;
#这个是增加sex的语句,  AFTER `name` 的意思是在name 字段后面 ,同样
ALTER TABLE `my_liuyan` ADD `homepage` VARCHAR( 2 ) NOT NULL ;
ALTER TABLE `my_liuyan` ADD `email` VARCHAR( 2 ) NOT 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']==1 ? '男' : '女';


//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
交流QQ群2:16142493
智能手机软件下载
PHP新手不可错过一帖
PHP新手如何获得积分
论坛需要你,我们大家需要你!

TOP

这样的好啊...适合我们学习.....`````
多发些啊
*********************************
天地自在,任我逍遥
http://www.dophp.net/
dophp@qq.com
**********************************

TOP

发新话题