PHP + HTML simple realización de foro BBS y respuesta

        Este artículo describe principalmente cómo implementar simplemente el foro BBS y las funciones de publicación / respuesta a través de PHP + HTML.Esto es para extraer parte del contenido de nuestro proyecto php. El contenido principal incluye:
        1. Realice la interfaz de diseño parcial a través de JavaScript e Iframe
        2. Cómo definir la clase PHP para realizar la función de acceso a la base de datos
        3. Realice el foro BBS simple y la función de publicación / respuesta.
        Ya que este proyecto fue completado por diez personas en las vacaciones de invierno, se adoptó SAE.Construir una base de datos back-end en línea, y otras personas usan Apache para diseñar páginas web y acceder a la base de datos localmente, lo que equivale a un simple acceso BS de tres terminales.
        Dirección de descarga del código fuente: http://download.csdn.net/detail/eastmount/8501443
        Visite http: // localhost: 8080 / testphp / index.php y el efecto se muestra en la siguiente figura:



 

1. Construcción del diseño de la página de inicio

        El primero es crear el diseño de la página de inicio, el diseño principal se divide en head, main_left y main_right. La pantalla de la derecha usa la pantalla parcial realizada por iframe, mientras que la izquierda usa JavaScript para realizar las funciones de ocultar y mostrar clic. El código de la página de inicio de index.php es el siguiente:

<html> <head> <meta http-equiv = "Content-Type" content = "text / html; charset = utf-8" /> <title> 《分布式 系统》 精品 课程 学习 </title> <link href = "css / mycss.css" type = "text / css" rel = "stylesheet" /> <style type = "text / css"> / * 这个 链接 改变 颜色 * / a.one:link {color: # ff0000 } a.one:visited {color: # 0000ff} a.one:hover {color: # ffcc00} </style> </head> <body> <! - 布局 顶部 登录 状态 -> <div id = " main "> <TABLE cellSpacing = 0 cellPadding = 0 width =" 100% "background =" images / header_bg.gif "border = 0> <! - 头部 图片 -> <TR altura = 80> <TD ancho = 260> <IMG height = 80 src = "images / logo.png" width = 260> </TD> <TD style = "TAMAÑO DE FUENTE: 12px; PESO DE FUENTE: negrita; COLOR: # 000; PADDING-TOP: 20px; ACOLCHADO DERECHO:20px "align = right> 您 还未 登录! | <A class="one" href="login.php"> 登录 </A> | <A class="one" href="register_student.php"> 学生 注册</A> | <A class="one" href="register_teacher.php"> 教师 注册 </A> </TD></TR> </TABLE> <TABLE cellSpacing = 0 cellPadding = 0 width = "100 % "border = 0> <TR bgColor = # 1c5db6 height = 4> <TD> </TD> </TR> </TABLE> <br /> <! - 布局 中部 -> <div id =" medio "> <! - 布局 中部 右边 -> <div id =" index_right "> <iframe height =" 100% "width =" 100% "border =" 0 "frameborder =" 0 "src =" main_right.php "name =" rightFrame "id =" rightFrame "title =" rightFrame "> </iframe> </div> <!- El lado izquierdo del medio del diseño -> <div id = "index_left"> <? Php include ('main_left.php');?> </div> </div>

        El diseño del código CSS aquí llama a la implementación mycss.css en el archivo css:

html, body {height: '100%'; width: '100%';} / * 头部 布局 * / # main {margin-left: 200px; ancho: 950 px;} / * 中部 布局 * / # medio {ancho: 950 px; altura: 500px; color de fondo: # b6effa;} / * 中部 左边 * / # index_left {float: left; margen superior: 10px; margen izquierdo: 10px; ancho: 180px; altura: 480px;} / * 中部 右边 * / # index_right {float: right; margen superior: 10px; margen derecho: 20px; ancho: 720px; altura: 480px; border-style: double;} / * 中部 右边 * / # logout_middle {float: right; margen superior: 100px; margen derecho: 220px; ancho: 500px; altura: 300px; estilo de borde: doble; color de fondo: #ffffff;}

        El código principal en Iframe es <iframe src = "main_right.php" name = "rightFrame" id = "rightFrame">, cuando se llama "<A href="main_right3-1.php" target="rightFrame"> foro BBS < / A> "Simplemente declare el objetivo como rightFrame. Al mismo tiempo, ocultar y mostrar, configure style.display en block o none.
        El código main_left.php es el siguiente, y el diseño anterior se puede realizar en este momento. 

<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.0 Transitional // EN"> <HTML> <HEAD> <META http-equiv = Content-Type content = "text / html; charset = utf-8"> <LINK href = "css / admin.css" type = "text / css" rel = "stylesheet"> <SCRIPT language = javascript> function expand (el) {childObj = document.getElementById ("child" + el); if (childObj.style.display == 'none') {childObj.style.display = 'block'; } else {childObj.style.display = 'ninguno'; } regreso; } </SCRIPT> </HEAD> <BODY> <TABLE height = "100%" cellSpacing = 0 cellPadding = 0 width = 170 background = images / menu_bg.jpg border = 0 align = left> <TR> <TD vAlign = top align = middle> <TABLE cellSpacing = 0 cellPadding = 0 width = "100%" border = 0> <TR> <

        El efecto mostrado es el siguiente: 

 

 

2. Realice el Foro BBS y Responda

        El foro se implementa principalmente a través de Httppost.php en la carpeta de base de datos personalizada, donde main_right3-1.php es el tema de todas las publicaciones del foro de BBS, y main_right3-1-content.php es el contenido de la publicación correspondiente, incluido el contenido de respuesta, etc.
        El código de main_right3-1.php es el siguiente:

 

> <div class = "wrap_left"> <div class = "wenda-head"> <a href="#" class="quealltab onactive"> 最新 </a> <a href = "#" class = "quealltab" > 热门 </a> <a href="#" class="quealltab "> 等待 回复 </a> </div> <? Php // 查询 贴 $ hgi = new HttpPostInf (); $ resultado = $ hgi-> doquery ('2', "seleccionar * de BBS_Post;"); // 解析 json $ dj = json_decode ($ resultado, verdadero); $ jcount = contar ($ dj); para ($ i = 0; $ i <$ jcount; $ i ++) {?> <div class = "wenda-list"> <div class = "headslider"> <img src = 'images / bbs3.jpg' class = "wenda_list_head" width = '40 'height = '40' /> <a href = "" title = "name" class = " wenda-nickname "> <? php echo $ dj [$ i] ['BP_Pid'];?> </a> </div> <div class =" qaslider "> <ul> <li> <img src =" images / bbs1.jpg "class =" icon "/> <a href =" main_right3-1-content.php? bbsid = <? php echo $ dj [$ i] ['BP_Pid']; ?> "class =" wendatitle "> <? php echo $ dj [$ i] ['BP_Ptitle'];?> </a> </li> <li> <img src =" images / bbs2.png "clase = "icon2" /> <span class = "replydet"> 发帖 身份 : <? php if ($ dj [$ i] ['BP_Ptype'] == 0) echo "教师"; if ($ dj [$ i] ['BP_Ptype'] == 1) echo "学生";?> | 发帖 人 编号 : <? Php echo $ dj [$ i] ['BP_Puserid'];?> </span></li> <li> <span class = "time"> 提问 时间 : <? php echo $ dj [$ i] ['BP_Ptime']; ?> </span> </ul> </div> <! - qaslider -> </div> <! - wenda-list -> <? php // 结束 循环}?> </div> <!--wrap--> </div> <! - wrap_right -> </div> <! - middle -> <TABLE cellSpacing = 0 cellPadding = 2 width = "95%" align = center border = 0> <TR altura = 20> <TD> </TD> </TR> </TABLE>

        Aquí debe señalar que el ".." en el código HTML "../database/httppost.php" significa regresar al directorio de nivel superior. El directorio de código se muestra en la figura siguiente, y el código fuente es colocado en la carpeta htdocs en Apache. 

 

        El código main_right3-1-content.php es el siguiente: 

<? php header ("Content-Type: text / html; charset = utf-8"); incluir ("../database/human.php"); session_start (); ?> <link rel = "stylesheet" href = "css / main.css" type = "text / css" /> <TABLE cellSpacing = 0 cellPadding = 0 width = "100%" align = center border = 0> <TR height = 28> <TD background = images / title_bg1.jpg> 当前 位置: BBS 论坛 </TD> <TD align = right> <A href="main_right6-1.php" class="one"> 返回 </ A > </TD> </TR> <TR> <TD bgColor = # b1ceef height = 1 colspan = "2"> </TD> </TR> <TR height = 10> <TD background = images / shadow_bg.jpg colspan = "2"> </TD> </TR> </TABLE> <! - PHP 数据库 中 获取 内容 -> <? php // 查询 BBS $ hgi = new HttpPostInf (); $ resultado = $ hgi-> doquery ('2', " seleccione * de BBS_Post donde BP_Pid = '". $ _ GET [' bbsid ']."'; "); // 解析 json $ dj = json_decode ($ resultado, verdadero); $ jcount = count ($ dj); for ( $ i = 0; $ i <$ jcount; $ i ++) {$ _SESSION ['bbsid'] = $ dj [$ i] ['BP_Pid'];?> <div class = "middle"> <div class = " wrap "> <div class =" wrap_left "> <div class =" wenda-head "> <TABLE cellSpacing = 0 cellPadding = 0 width =" 100% "align = center border = 0 bgcolor =" blue "> <TR altura = 10> <TD></TD> </TR> <TR altura = 22> <TD style = "PADDING-LEFT: 10px; PESO DE FUENTE: negrita; COLOR: #ffffff "align = left> [贴] <? Php echo $ dj [$ i] ['BP_Ptitle'];?> </TD> </TR> <TR height = 10> <TD> </ TD > </TR> </TABLE> </div> <! - 楼主 内容 -> <TABLE cellSpacing = 0 cellPadding = 0 width = "95%" align = center border = 0> <tr> <td valign = "top"> <div align = " medio "ancho = 150> <BR /> <BR /> <img src = 'images / tx.jpg' ancho = '60 'alto = '60' /> <BR /> <BR /> 楼主 1 # <BR /> <? php echo $ dj [$ i] ['BP_Puserid']; ?> <BR /> 身份 <? Php if ($ dj [$ i] ['BP_Ptype'] == 0) echo "教师"; if ($ dj [$ i] ['BP_Ptype'] == 1) echo "学生"; ?> <BR /> <? Php echo $ dj [$ i] ['BP_Ptime']; ?> </div> </td> <! - 多 行 文本 输入 控件 disabled = "disabled" 不可 编辑 -> <td> <textarea rows = "15" type = "text" width = "400px" style = "resize: none; font-size: 16px;" maxlength = "2000" name = "content" cols = "60" disabled = "disabled"> <? php echo $ dj [$ i] ['BP_Cont']; ?> </textarea> </td> </tr> <TR height = 4> <TD colspan = "3"> </TD> </TR> <tr> <td colspan = "2"> <hr ancho = "100%" size = "2" color = "# FF0000"> </td> </tr> </TABLE> <! - 上面 的 php 中 while 循环 并 没有 结束, 还有 右 ​​括号 -> <? php} // 查询 BBS $ hgi = new HttpPostInf (); $ resultado = $ hgi-> doquery ('2', "seleccionar * de BBS_Reply donde BR_Pid = '". $ _ GET [' bbsid ']. "';"); // 解析 json $ dj = json_decode ($ resultado, verdadero); $ jcount = contar ($ dj); para ($ i = 0; $ i <$ jcount; $ i ++) {?> <! - 楼层 回复 内容 -> <TABLE cellSpacing = 0 cellPadding = 0 width = "95%" align = center border = 0> <tr> <td valign = "top"> <div align = "medio" ancho = 150> <BR /> <BR /> <img src = 'images / tx.jpg' ancho = '60 'alto = '60' /> <BR /> <BR /> 楼层 < ? php $ _SESSION ['bbshfid'] = hora (); echo $ i + 2;?> # <BR /> <? php echo $ dj [$ i] ['BR_Ruserid']; ?> <BR /> 身份 <? Php if ($ dj [$ i] ['BR_Rtype'] == 0) echo "教师"; if ($ dj [$ i] ['BR_Rtype'] == 1) echo "学生"; ?> <BR /> <? Php echo $ dj [$ i] ['BR_Ptime']; ?> <BR /> 回复 楼层 <? Php echo $ dj [$ i] ['BR_Pfloor']; ?> # </div> < / td> <! - 多 行 文本 输入 控件 disabled = "disabled" 不可 编辑 -> <td> <textarea rows = "15" type = "text" width = "400px" style = "resize: none; font -tamaño: 16px; " maxlength = "2000" name = "content" cols = "60" disabled = "disabled"> <? php echo $ dj [$ i] ['BR_Cont']; ?> </textarea> </td> </tr> <TR height = 4> <TD colspan = "3"> </TD> </TR> <tr> <td colspan = "2"> <hr ancho = "100%" size = "2" color = "# FF0000"> </td> </tr> </TABLE> <? Php}?> <! - 回复 内容 -> <form id = "form1 "name =" form1 "method =" post "action =" main_right3-1-content.php "> < TABLE cellSpacing = 0 cellPadding = 0 width = "95%" align = center border = 0> <tr> <td colspan = "2"> 回复 楼层 <input type = "text" name = "lc" id = "lc" valor = "" estilo = ancho: 150 puntos; maxlength = "50" /> </td> </tr> <tr> <td valign = "top"> <div align = "middle" width = 150> <BR /> <BR /> 回复 <BR /> </div> </td> <! - 多 行 文本 输入 控件 disabled = "disabled" 不可 编辑 -> <td> <textarea rows = "10" type = "text" width = "400px" style = " resize: none; font-size: 16px; " maxlength = "2000" name = "bbscontent" cols = "60"> </textarea> </td> </tr> <tr> <td colspan = " radio '] == 2) $ a = 0; // 老师 // SQL 更新 $ sql = "INSERT INTO BBS_Reply (BR_Rid, BR_Pid, BR_Ruserid, BR_Rtype, BR_Ptime, BR_Pfloor, BR_Cont) VALUES ("; $ sql. = "'". $ _ SESSION [' bbshfid ']. " ', "; $ sql. ="' ". $ _ SESSION ['bbsid']." ', "; $ sql. ="' ". $ _ SESSION ['número']." ', "; $ sql. = "'". $ a. "',"; $ sql. = "'" .date (' Ym-d '). "',"; $ sql. = "'". $ _ POST [' lc ']. "',"; $ sql. = "'". $ _ POST ['bbscontent']. "'"; $ sql. = ");"; // 更新 信息 // echo $ sql; $ hgi = nuevo HttpPostInf (); $ resultado = $ hgi-> doquery ('1', $ sql); // echo "<script> alert ('恭喜 你 修改 成功!'); </script>"; header ('Ubicación: main_right3-1.php '); }?>

        El efecto de visualización posterior a la respuesta se muestra en la siguiente figura: 

 

        El código publicado no se publicará, puede ver el código fuente. En este punto, es posible que esté confundido sobre el contenido de la parte de acceso a la base de datos, ¡expliquemos brevemente a continuación!
 

Tres. PHP define clases y funciones miembro

        En PHP, los sitios web que solemos completar durante el estudio del curso se basan en un enfoque orientado a procesos, ignorando así su conocimiento orientado a objetos Obviamente cometí este error.
        PD: Dado que este proyecto es un curso de "Análisis y desarrollo orientado a objetos", necesita utilizar conocimientos orientados a objetos para analizar y realizar. De repente, un día descubrí que PHP se usaba para implementar backends de diseño HTML y PHP, y no usaba el conocimiento de clases, encapsulación y herencia, pero después de consultar información relevante, descubrí que todo tiene estas cosas.
        Posteriormente, en el proceso de implementación de este proyecto, definimos diferentes clases (gracias a PU brother), aquí solo se muestran ejemplos de bases de datos y clases humanas.

<? phpheader ("Content-Type: text / html; charset = utf-8"); class HttpPostInf {function __construct () {// 无 参 构造 函数} function doquery ($ type, $ sql) {// 网路通信 函数 $ datos = matriz ('sqlType' => $ tipo, 'sqlExe' => $ sql); $ datos = http_build_query ($ datos); $ opts = array ('http' => array ('method' => 'POST', 'header' => "Tipo de contenido: aplicación / x-www-form-urlencoded \ r \ n". "Longitud de contenido : ". strlen ($ datos)." \ r \ n ", 'contenido' => $ datos)); $ contexto = stream_context_create ($ opciones); $ html = file_get_contents ('http://courseweb.sinaapp.com/courseweb.php', falso, $ contexto); return $ html; }}?>

        Defina la clase humana al mismo tiempo, y el alumno y el profesor que heredan esta clase son usuarios de inicio de sesión con dos identidades. El constructor y la instanciación se han escrito en la función miembro. 

} function geteym () {return $ this-> eym;} function getscore () {return $ this-> score;}} class Teacher amplía Human {título $ privado; // 职称 private $ res; // 成果 premio $ privado; // 获奖 función __construct ($ tid) {// 1 参 构造 函数 $ this-> hid = $ tid; $ stu = nuevo HttpPostInf (); $ resultado = $ stu-> doquery ('2', "seleccionar * de Teacher_Info donde TI_ID = '". $ tid. "';"); // echo 'resultado:'. $ resultado; // 解析 json $ dj = json_decode ($ resultado, verdadero); $ jcount = contar ($ dj); para ($ i = 0; $ i <$ jcount; $ i ++) {// 只 返回 1 个 , 所以 只 取 一个 即可 , jcount = 1 $ this-> ptitle = $ dj [$ i] ['TI_Ptitle' ]; $ esto-> res = $ dj [$ i] ['TI_Res']; $ this-> award = $ dj [$ i] ['TI_Award']; // 或者 写 : $ score = $ dj-> Sinf_Bir; $ esto-> pwd = $ dj [$ i] ['TI_Pwd']; $ esto-> nombre = $ dj [$ i] ['TI_Name']; $ esto-> sexo = $ dj [$ i] ['TI_Sex']; $ esto-> correo electrónico = $ dj [$ i] ['TI_Email']; }} function getname () {return $ this-> name;} function getsex () {return $ this-> sex;} function getemail () {return $ this-> email;} function getpwd () {return $ this- > pwd;} function getptitle () {return $ this-> ptitle;} function getres () {return $ this-> res;} function getaward () {return $ this-> award;}}?>

        Luego llame a las clases HttpPostInf y Human definidas anteriormente, y el código simple para acceder a la base de datos es el siguiente:
        <? Php
                // Query post
                $ hgi = new HttpPostInf ();
                $ result = $ hgi-> doquery ('2', "select * from BBS_Post;"); // Sentencia SQL
                // Analizando json
                $ dj = json_decode ($ resultado, verdadero);
                $ jcount = count ($ dj);
                for ($ i = 0; $ i <$ jcount; $ i ++) {   
                        echo $ dj [$ i] ['BP_Pid'];
                }
        ?>
        Cuando el usuario inicia sesión, la sesión se usará para registrar la identificación del usuario, y luego toda la información del usuario se puede obtener a través de la clase instanciación. El código simple es el siguiente:
        $ h1 = new Student ('2220140598');
        echo $ h1-> getname (); echo '<br>';
        echo $ h1-> getsex ();echo '<br>';
        echo $ h1-> getemail (); echo '<br>';

        Finalmente, espero que el artículo sea útil para todos, ¡especialmente descubrí que hay pocos artículos creados en PHP! Un número relativamente grande de artículos se ocupa de algunos detalles de PHP y espero que aprenda más sobre PHP. Siempre siento que tengo algunos problemas con los blogs, pero no puedo decírselo. ¡Espero que todos puedan exponer las deficiencias! La base de datos de códigos se establece en el SAE, por lo que el efecto de todos los gráficos anteriores se puede mostrar directamente.
      (Por: Eastmount 2015-3-14 a las 4 pm   http://blog.csdn.net/eastmount/ )

Supongo que te gusta

Origin blog.csdn.net/zy17822307856/article/details/112798413
Recomendado
Clasificación