[MySqli擴(kuò)展]①⑤--顯示評(píng)論內(nèi)容

comment.class.php

<?php

class Comment
{
    private $data = array();

    function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * 檢測(cè)用戶輸入的數(shù)據(jù)
     * @param $arr
     * @return bool
     */
    public static function validate(&$arr)
    {
        if (!($data['email'] = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL))) {
            $errors['email'] = '請(qǐng)輸入合法郵箱';
        }
        if (!($data['url'] = filter_input(INPUT_POST, 'url', FILTER_VALIDATE_URL))) {
            $errors['url'] = '';
        }
        if (!($data['content'] = filter_input(INPUT_POST, 'content', FILTER_CALLBACK, array('options' => 'Comment::validate_str')))) {
            $errors['content'] = "請(qǐng)輸入合法內(nèi)容";
        }
        if (!($data['username'] = filter_input(INPUT_POST, 'username', FILTER_CALLBACK, array('options' => 'Comment::validate_str')))) {
            $errors['username'] = "請(qǐng)輸入合法用戶名";
        }
        $options = array(
            'min_range' => 1,
            'max_range' => 5
        );
        if (!($data['face'] = filter_input(INPUT_POST, 'face', FILTER_VALIDATE_INT, $options))) {
            $errors['face'] = "請(qǐng)輸入合法頭像";
        }
        if (!empty($errors)) {
            $arr = $errors;
            return false;
        }
        $arr = $data;
        $arr['email'] = strtolower(trim($arr['email']));
        return true;

    }

    /**
     * 過濾用戶輸入的特殊字符
     * @param $str
     * @return bool|string
     */
    public static function validate_str($str)
    {
        if (mb_strlen($str, 'UTF8') < 1) {
            return false;
        }
        //nl2br 將\n轉(zhuǎn)換成br
        //htmlspecialchars 把一些預(yù)定義的字符轉(zhuǎn)換為 HTML 實(shí)體
        //ENT_QUOTES單引號(hào)也轉(zhuǎn)義
        $str = nl2br(htmlspecialchars($str, ENT_QUOTES));
        return $str;
    }

    /**
     * 顯示評(píng)論內(nèi)容
     * @return string
     */
    public function output()
    {
//        if ($this->data['url']) {
            $link_start = "<a href='" . $this->data['url'] . "' target='_blank'>";

            $link_end = "</a>";
//        }
        $dateStr = date("Y年m月d日 H:i:s", $this->data['pubTime']);
        $res = <<<EOF
        <div class='comment'>
            <div class='face'>
                {$link_start}
                    <img width='50' height='50' src="img/{$this->data['face']}.jpg" alt="" />
                {$link_end}
            </div>
            <div class='username'>
                {$link_start}
                {$this->data['username']}
                {$link_end}     
            </div>
            <div class='date' title='發(fā)布于{$dateStr}'>
                {$dateStr}      
            </div>
            <p>{$this->data['content']}</p>     
        </div>
EOF;
        return $res;
    }

}

doAction.php

<?php
header("content-type:text/html;charset=utf-8");
require_once 'connect.php';
require_once 'comment.class.php';
$arr = array();
$res = Comment::validate($arr);
if ($res) {
    $sql = "INSERT comments(username,email,url,face,content,pubTime) VALUES(?,?,?,?,?,?);";
    $mysqli_stmt = $mysqli->prepare($sql);
    $arr['pubTime'] = time();
    $mysqli_stmt->bind_param('sssssi', $arr['username'], $arr['email'], $arr['url'], $arr['face'], $arr['content'], $arr['pubTime']);
    $mysqli_stmt->execute();
    $comment = new Comment($arr);
    echo json_encode(array('status' => 1, 'html' => $comment->output()));
} else {
    echo '{"status":0,"errors":' . json_encode($arr) . '}';
}

?>

connect.php

<?php
$mysqli = new mysqli('localhost', 'root', '', 'imoocComment');
if ($mysqli->errno) {
    die('CONNECT ERROR ' . $mysqli->error);
} else {
    $mysqli->set_charset('UTF8');
}

index.php

<?php
require_once 'connect.php';
require_once 'comment.class.php';
$sql="SELECT username,email,url,face,content,pubTime FROM comments";
$mysqli_result=$mysqli->query($sql);
if($mysqli_result&& $mysqli_result->num_rows>0){
    while($row=$mysqli_result->fetch_assoc()){
        $comments[]=new Comment($row);
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title>Document</title>
    <link rel="stylesheet" type="text/css" href="style/style.css" />
</head>
<body>
<h1>慕課網(wǎng)評(píng)論系統(tǒng)</h1>
<div id='main'>
    <?php
    foreach($comments as $val){
        echo $val->output();
    }
    ?>
    <div id='addCommentContainer'>
        <form id="addCommentForm" method="post" action="">
            <div>
                <label for="username">昵稱</label>
                <input type="text" name="username" id="username" required='required' placeholder='請(qǐng)輸入您的昵稱'/>

                <label for="face">頭像</label>
                <div id='face'>
                    <input type="radio" name="face" checked='checked' value="1" />![](img/1.jpg)&nbsp;&nbsp;&nbsp;
                    <input type="radio" name="face"  value="2" />![](img/2.jpg)&nbsp;&nbsp;&nbsp;
                    <input type="radio" name="face"  value="3" />![](img/3.jpg)&nbsp;&nbsp;&nbsp;
                    <input type="radio" name="face"  value="4" />![](img/4.jpg)&nbsp;&nbsp;&nbsp;
                    <input type="radio" name="face"  value="5" />![](img/5.jpg)&nbsp;&nbsp;&nbsp;
                </div>
                <label for="email">郵箱</label>
                <input type="email" name="email" id="email" required='required' placeholder='請(qǐng)輸入合法郵箱'/>

                <label for="url">個(gè)人博客</label>
                <input type="url" name="url" id="url" />

                <label for="content">評(píng)論內(nèi)容</label>
                <textarea name="content" id="content" cols="20" rows="5" required='required' placeholder='請(qǐng)輸入您的評(píng)論...'></textarea>
                <input type="submit" id="submit" value="發(fā)布評(píng)論" />
            </div>
        </form>
    </div>
</div>
<script type="text/javascript" src="script/jquery.min.js"></script>
<script type="text/javascript" src="script/comment.js"></script>
</body>
</html>
Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瞄沙,一起剝皮案震驚了整個(gè)濱河市犀忱,隨后出現(xiàn)的幾起案子凑懂,更是在濱河造成了極大的恐慌,老刑警劉巖柬脸,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡宾巍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門渔伯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顶霞,“玉大人,你說我怎么就攤上這事锣吼⊙』耄” “怎么了蓝厌?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)古徒。 經(jīng)常有香客問我褂始,道長(zhǎng),這世上最難降的妖魔是什么描函? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任崎苗,我火速辦了婚禮,結(jié)果婚禮上舀寓,老公的妹妹穿的比我還像新娘胆数。我一直安慰自己,他們只是感情好互墓,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布必尼。 她就那樣靜靜地躺著,像睡著了一般篡撵。 火紅的嫁衣襯著肌膚如雪判莉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天育谬,我揣著相機(jī)與錄音券盅,去河邊找鬼。 笑死膛檀,一個(gè)胖子當(dāng)著我的面吹牛锰镀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咖刃,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼泳炉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了嚎杨?” 一聲冷哼從身側(cè)響起花鹅,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枫浙,沒想到半個(gè)月后刨肃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡自脯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年之景,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膏潮。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锻狗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情轻纪,我是刑警寧澤油额,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站刻帚,受9級(jí)特大地震影響潦嘶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜崇众,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一掂僵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顷歌,春花似錦锰蓬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赦抖,卻和暖如春舱卡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背队萤。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工轮锥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浮禾。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓交胚,卻偏偏與公主長(zhǎng)得像份汗,于是被迫代替她去往敵國(guó)和親盈电。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容