Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Sección de comentarios con PHP y MySQL

Estas en el tema de Sección de comentarios con PHP y MySQL en el foro de PHP en Foros del Web. Buen día, el motivo de este tema es que estoy realizando un sistema de comentarios que incluiré en mi página web, constará de un pequeño ...
  #1 (permalink)  
Antiguo 07/10/2014, 09:55
 
Fecha de Ingreso: octubre-2014
Ubicación: Distrito Federal
Mensajes: 8
Antigüedad: 9 años, 6 meses
Puntos: 0
Pregunta Ayuda con sección de comentarios con PHP y MySQL

Buen día, el motivo de este tema es que estoy realizando un sistema de comentarios que incluiré en mi página web, constará de un pequeño formulario en donde escribirán un alias, el título de su comentario y el comentario como tal.

Estoy utilizando programación php y base de datos para almacenar todos los alias, títulos y comentarios que se reciban y así mismo en una parte inferior del formulario que se muestren todos y cada uno de los comentarios realizados.

Soy muy novato en la programación php, tenía conocimientos sumamente básicos y este es mi primer proyecto en php como tal por lo que me gustaría tener orientación en el código que estoy realizando, mismo que he hecho con ayuda de algunos totorales de aquí y otros sitios pero de alguna manera me siento un poco perdido.

Les dejo el código que he realizado:

Código PHP:
Ver original
  1. <!--?php include('header2.php');?--><html><head>
  2. <style type="text/css">
  3. @import url("form.css");
  4. </style>
  5. </head><body>
  6. <?php
  7. $publicado="Publicado";
  8. require "config.php";
  9. ?>
  10. <div class="contenedor">
  11.             <div class="chismes">Cuenta el chisme</div>
  12.             <div class="formulario">
  13. <?php
  14. echo "<form method=post action=''><input type=hidden name=todo value=post_comment><span class='obligatorio'>*</span><span class='tit'>Tu Nombre</span><br /><input name=nombre type=text class='cajanom' size='42'>
  15. <p></p>
  16. <span class='obligatorio'>* </span><span class='tit'>Título del Chisme</span><br /><input name=titulo type=text class='cajatit' size='42'>
  17. <p></p>
  18. <span class='obligatorio'>* </span><span class='tit'>Tu chisme</span><br />
  19. <textarea name=comentarios cols=40 rows=3 class='cajatxt'></textarea><p></p>
  20. <input type=submit name=submit class='btn-default' value='Enviar Chisme'><p></p>
  21. </form>";
  22. ?>
  23. </div>
  24. <div class="resultado">
  25. <?php
  26. @$todo=$_POST['todo'];
  27. if(isset($todo) and $todo=="post_comment"){
  28.  
  29. $nombre=$_POST['nombre'];
  30. $nombre=mysql_real_escape_string($nombre);
  31. $titulo=$_POST['titulo'];
  32. $titulo=mysql_real_escape_string($titulo);
  33. $comentarios=$_POST['comentarios'];
  34. $comentarios=mysql_real_escape_string($comentarios);
  35.  
  36. $estado = "OK";
  37. $msg="";
  38.  
  39. if( strlen($name) <3 or strlen($name) > 25){
  40. $msg=$msg."Su nombre debe tener m&aacute;s de 3 letras y menos de 25. <BR>";
  41. $estado= "NOTOK";}                 
  42.  
  43. if( strlen($comentarios) <3 ){
  44. $msg=$msg."Su comentario debe tener m&aacute;s de 3 letras por lo menos.<BR>";
  45. $estado= "NOTOK";} 
  46. if( strlen($titulo) <3 ){
  47. $msg=$msg."Su título debe tener m&aacute;s de 3 letras por lo menos.<BR>";
  48. $estado= "NOTOK";}             
  49. if($estado<>"OK"){
  50. echo "$msg";
  51. }else{
  52. $fecha=date("Y-m-d");
  53. $estado='OK'; // Cambiar por OK si desea que todos los mensajes se aprueben automáticamente una vez publicados.
  54. $query=mysql_query("insert into bts_comentarios(publicado,fecha,nombre,titulo,comentarios,) values('$publicado','$fecha','$nombre','$titulo','$comentarios')");
  55. echo mysql_error();
  56. }
  57. }
  58. ?>
  59. </div>
  60. <div class="space"></div>
  61. <div class="chismes2">Los Chismes</div>
  62. <div class="space"></div>
  63. <div class="comentarios">
  64. <?php
  65. $q=mysql_query("select nombre, titulo, comentarios,fecha from comentarios where publicado='$publicado' and estado='OK' order by fecha ");
  66.  
  67. echo "<table width='600' border='0' cellspacing='0' cellpadding='5'>";
  68. while($nt=mysql_fetch_array($q)){ $comentarios=nl2br($nt['comentarios']);
  69. echo "<tr bgcolor='#f0f0f0'><td><strong>$nt[name]</strong></td><td align=right>".date("d-m-Y",strtotime($nt['fecha']))."</td></tr>";
  70. echo "<tr ><td colspan=2>$comentarios</td></tr>";
  71. echo "<tr ><td colspan=2>&nbsp;</td></tr>";
  72. }
  73. echo "</table>";
  74. ?>
  75. </div>
  76.         </div>
  77. <!--?php include('sidebar.php');?-->
  78. <div class="clear"></div>
  79. <!--?php include('footer.php');?--></body></html>



El archivo config.php es el siguiente:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $servername='localhost';
  4.  
  5. $dbusername='';  //*****Debe cambiarse*****//
  6.  
  7. $dbpassword='';  //*****Debe cambiarse*****//
  8.  
  9. $dbname='';  //*****Debe cambiarse*****//
  10.  
  11.  
  12.  
  13.  
  14.  
  15. connecttodb($servername,$dbname,$dbusername,$dbpassword);
  16.  
  17. function connecttodb($servername,$dbname,$dbuser,$dbpassword)
  18.  
  19. {
  20.  
  21. global $link;
  22.  
  23. $link=mysql_connect ("$servername","$dbuser","$dbpassword");
  24.  
  25. if(!$link){die("Could not connect to MySQL");}
  26.  
  27. mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error());
  28.  
  29. }
  30.  
  31. ?>

No sé si estoy conectando con la tabla de la base de datos o sólo con la base de datos pero no con la tabla y de igual manera si el código para recibir y mostrar los datos es el adecuado.

Les agradezco infinitamente su ayuda.

Que tengan todos buen día.

Última edición por javonocc; 07/10/2014 a las 10:46 Razón: Mejor explicación de la duda
  #2 (permalink)  
Antiguo 07/10/2014, 12:32
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
De acuerdo Respuesta: Sección de comentarios con PHP y MySQL

Hola, mira, mi opinión muy personal es que la programación a veces refleja la forma en que tú como programador te sientes cómodo, igual con la estructuración y el manejo de archivos que usas, por ejemplo yo suelo hacer varios archivos .php donde cada uno tiene su función, raramente uso un archivo .htm, aún que el archivo sea únicamente html, lo guardo como .php por si después requiero añadir algún código.

Mi sugerencia es, ve desde lo más fácil y sencillo, no te compliques.

Yo haría lo siguiente:

1) Hacer un archivo con el formulario de captura, puedes hacer pruebas.

captura.php
Código HTML:
<html>
	<head>
	</head>
	<body>
		<form id="comentario" name="comentario" action="guarda_comentario.php" method="post">
			<input id="alias" name="alias" value="" />
			<textarea name="comentario" id="comentario"></textarea>
		    <input type="submit" name="Submit" value="Enviar">
		</form>
	</body>
</html> 
2) Ya que tienes el archivo para captura (formulario) puedes avanzar, recuerda, el formulario consiste en "tomar" datos o información y "mandarla" o enviarla a "algún lado" para tomar una "acción", en este caso, la mando con el método "POST" a "guardar_comentario.php" aquí en este archivo, puedes hacer pruebas primeramente para ver si estás recibiendo la información bien del formulario.

(quizás sea una buena idea leer sobre html básico y formularios html)

guardar_comentario.php
Código PHP:
<?
    $alias
=$_POST['alias'];
    
$comentario=$_POST['comentario'];
    
    echo 
$alias;
    echo 
'<br>';
    echo 
$comentario;
?>
(quizás sea buena idea leer sobre PHP básico)

Lo anterior te debería imprimir lo que previamente capturaste en el formulario (paso 1).

3) Ahora, si todo está bien, puedes guardar lo que ya capturaste en una base de datos.

conectar.php //para conectarte a la base de datos

Código PHP:
<?
    $serverdb
='localhost';
    
$databasename='tubd';
    
$userdb='root';
    
$passdb='tuclave';

    
$link mysql_connect($serverdb$userdb$passdb);
    
    if (!
$link) {
        echo 
'Error en la Conexión a la Base de Datos, Contacte al Administrador';
    }
    
$db_selected=mysql_select_db($databasename$link);
    if (!
$db_selected){
        die(
'Error Interno con la Base de Datos, contacte con el administrador del sistema.<br>Detalle técnico: ' mysql_error($link));
    }

?>
(quizás sea buena idea leer sobre mysql básico y php)

guardar_comentario.php //lo actualizas

Código PHP:

<?
    $alias
=$_POST['alias'];
    
$comentario=$_POST['comentario'];
    
    include 
'conectar.php';
    
    
$sql "INSERT INTO tabla_comentarios (id, alias, comentario) values ('', '$alias', '$comentario')";
    
$result=mysql_query($sql$link);
    if (!
$result){
        echo 
"ERROR: No se pudo guardar la informaci&oacute;n, contacte al administrador.";
        echo 
"<br>".mysql_errno($enlace) . ": " mysql_error($enlace) . "\n";
    }else{
        echo 
"<b>Informaci&oacute;n guardada correctamente.</b>";
    }
?>
Ahora, en tu base de datos (supongo usas phpmyadmin) verás que la información está ahí, si hubiera algún problema, habría que ver que error sale, (para eso usas "mysql_error" que incluí, ahora si no quieres que muestre errores, borra esa linea).


Ahora, solo hace falta consultar la información.

3) Haces un archivo de consulta.

mostrar_comentarios.php

Código PHP:
<?
    
include 'conectar.php';
    
    
$sql='SELECT * FROM series';
    
$sql2=mysql_query($sql$link);
    while (
$row mysql_fetch_array($sql)) {
        echo 
$row['id'];
        echo 
"<br>";
        echo 
$row['alias'];
        echo 
"<br>";
        echo 
$row['comentario'];
        echo 
"<ln>";
    }
?>
Recuerda, esto es de lo más básico, ahora lo que habría que hacer es, personalizar la información, para que se vea como tu la quieres, pero insisto, lo importante aquí es que funcione y lo entiendas y puedas ir sintiendo la confianza de que estas avanzando en lo que haces y que no te estancas, yo la verdad casi no uso este foro pero creo que aquí hay muchas personas que saben mucho y te pueden ayudar, entiendo también que hay varios tutoriales, aun que sé que a veces no captamos alguna idea y necesitamos preguntar.

Si notas, tu presentabas 1 solo archivo, quizás así lo viste en algún tutorial, pero como te decía al comienzo, ya depende de los gustos del programador, en mi caso, prefiero tener todo separado como si fueran módulos, así, si después los necesito, los llamó con algún include.

Sin saber que tanto sabes o que no sabes es un tanto complicado en una respuesta cubrir muchas cosas, la verdad debes tener ánimo y practicar, y creo que hay mucho que leer, también hay algunas herramientas que te pueden ayudar, por ejemplo para firefox o chrome existe la extensión "firebug" que te ayuda a analizar tu código para ver si hay algún detalle.

Animo, que tu proyecto quede muy bien y que te diviertas mucho :)

Última edición por Mcruzmx; 07/10/2014 a las 12:42
  #3 (permalink)  
Antiguo 07/10/2014, 16:26
 
Fecha de Ingreso: octubre-2014
Ubicación: Distrito Federal
Mensajes: 8
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Sección de comentarios con PHP y MySQL

Muchas gracias Mcruzmx!! Al no saber justamente cómo se realizan estos procesos me costaba mucho trabajo discernir qué era lo que necesitaba y cómo hacerlo, tienes toda la razón al mencionar que se deben hacer varios archivos php con tal de economizar el trabajo y no realizarlo de una forma perdida o ambigua. Fijate que he encontrado un método para realizarlo quizá de una forma más rápida pero con mayores elementos, tales como script en ajax, jquery, base de datos y mismo php, te lo comparto para que también le eches un ojo, seguramente esto ya lo conoces pero no está demás justamente compartir la información.

He redactado las variables de una manera más práctica y al momento de realizar las pruebas en sitio local, está mandando la información de forma efectiva, bien lo comentas que con distintos archivos es más funcional.

Te lo dejo:

Código PHP:
Ver original
  1. <!--?php include('header2.php');?--><html><head>
  2. <link type="text/css" href="css/style.css" rel="stylesheet">
  3. <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
  4. <script type="text/javascript" src="js/jquery-ui-1.8.6.min.js"></script>
  5. <script type="text/javascript">
  6. $(document).ready(function() {
  7.  
  8.     $("#enviar-btn").click(function() {
  9.  
  10.         var name = $("input#name").val();
  11.         var title = $("input#title").val();
  12.         var comment = $("textarea#comment").val();
  13.         var now = new Date();
  14.         var date_show = now.getDate() + '-' + now.getMonth() + '-' + now.getFullYear() + ' ' + now.getHours() + ':' + + now.getMinutes() + ':' + + now.getSeconds();
  15.  
  16.         var dataString = 'name=' + name + 'title=' + title + '&comment=' + comment;
  17.  
  18.         $.ajax({
  19.             type: "POST",
  20.             url: "addcomment.php",
  21.             data: dataString,
  22.             success: function() {
  23.                 $('#newmessage').append('<div class="comfinal"><div class="titulo">'+title+'</div><p><div class="nombre">'+name+' dice:</div><p><div class="datecom">'+date_show+'</div><p><div class="comentariotxt">'+comment+'</div></div>');
  24.             }
  25.         });
  26.         return false;
  27.     });
  28. });
  29. </script>
  30.  
  31.  
  32. </head><body>
  33. <div class="content">
  34.     <div class="principal">
  35.         <div class="contenedor">
  36.         <div class="formulario">
  37.             <h2 class="nombre-user">Cuenta el chisme</h2>
  38.             <span class="calificap">Califica</span>
  39.                 <form method="post" action="">
  40.                 <span class="tit">Nombre:</span><br/>
  41.                 <input type="text" class="cajanom" id="name" name="name" size="40" /><br/><br/>
  42.                 <span class="tit">Titulo del chisme:</span><br/>
  43.                 <input type="text" class="cajatit" id="title" name="title" size="40" /><br/><br/>
  44.                 <span class="tit">Tu chisme:</span><br/>
  45.                 <textarea name="comment" class="cajatxt" id="comment" rows="6" cols="65"></textarea>
  46.                 <br/><br/>
  47.                 <input name="submit" class="btn-default" type="submit" value="Envia tu Chisme" id="enviar-btn" />
  48.                 </form>
  49.         </div><!-- #formulario -->
  50.        <div class="clear"></div>
  51.         <div id="newmessage">
  52.         </div>
  53.        
  54.     </div><!-- #contenedor -->
  55. <!--?php include('sidebar.php');?-->
  56.  
  57. </div><!-- #principal -->
  58. </div><!-- #content -->
  59. <div class="clear"></div>
  60. <!--?php include('footer.php');?--></body></html>


La hoja de estilo:

Código CSS:
Ver original
  1. /*LA RESENIA.php*/
  2.  
  3. .contenedor{
  4.     height: 600px;
  5.     width: auto;
  6.     float: left;
  7.     margin-right: 0px;
  8.     margin-left: 0px;
  9.     margin-bottom: 20px;
  10. }
  11. .formulario{
  12.     width: 550px;
  13.     height: auto;
  14.     float: left;
  15.     padding-left: 10px;
  16.     clear: left;
  17. }
  18. .chisme{
  19.     width: 550px;
  20.     color: #001489;
  21.     font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
  22.     font-size: 28px;
  23.     font-style: normal;
  24.     font-weight: bold;
  25.     width: 550px;
  26.     margin: auto;
  27.     padding: 10px;
  28.     text-align: left;
  29.     margin-bottom: 10px;
  30.     height: none;
  31.     clear: left;
  32.     float: left;
  33. }
  34. .cajatit {
  35.     font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
  36.     font-size: 12px;
  37.     font-style: normal;
  38.     font-weight: normal;
  39.     color: #000000;
  40.     background-color: #FFFFFF;
  41.     float: left;
  42.     width: 300px;
  43.     -webkit-border-radius: 5px;
  44.     border-radius: 5px;
  45. }
  46. .cajanom {
  47.     font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
  48.     font-size: 12px;
  49.     font-style: normal;
  50.     font-weight: normal;
  51.     color: #000000;
  52.     background-color: #FFFFFF;
  53.     float: left;
  54.     width: 300px;
  55.     -webkit-border-radius: 5px;
  56.     border-radius: 5px;
  57. }
  58. .cajatxt {
  59.     font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
  60.     font-size: 12px;
  61.     font-style: normal;
  62.     font-weight: normal;
  63.     background-color: #FFFFFF;
  64.     float: left;
  65.     height: auto;
  66.     width: 540;
  67.     min-width: 540px;
  68.     max-width: 540px;
  69.     min-height: 50px;
  70.     max-height: 50px;
  71.     -webkit-border-radius: 5px;
  72.     border-radius: 5px;
  73. }
  74. .tit{
  75.     font-family:Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
  76.     font-size: 14px;
  77.     font-style: normal;
  78.     font-weight: bold;
  79.     color: #0085ca;
  80. }
  81. .btn-default {
  82.     font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
  83.     font-size: 13px;
  84.     font-style: normal;
  85.     font-weight: bold;
  86.     color: #001489;
  87.     background-color: #0f8734;
  88.     border-style: none;
  89.     border-radius: 10px;
  90.     -webkit-border-radius: 10px;
  91.     width: 170px;
  92.     height: 30px;
  93.     margin-top: 30px;
  94. }
  95. .newmessage {
  96.     width: 550px;
  97.     height: auto;
  98.     float: left;
  99.     padding-left: 10px;
  100.     clear: left;
  101.     margin-top: 30px;
  102. }
  103. .comfinal {
  104.     width: 540px;
  105.     height: auto;
  106.     float: left;
  107.     padding-left: 10px;
  108.     clear: left;
  109.     margin-top: 20px;
  110. }
  111. .titulo{
  112.     width: 530px;
  113.     height: auto;
  114.     float: left;
  115.     clear: left;
  116.     font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
  117.     font-size: 20px;
  118.     font-weight: bold;
  119.     color: #29BD33;
  120.     float: left;
  121.     margin-top: 5px;
  122.     margin-left: 10px;
  123. }
  124. .nombre{
  125.     width: 530px;
  126.     height: auto;
  127.     float: left;
  128.     clear: left;
  129.     font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
  130.     font-size: 16px;
  131.     font-weight: bold;
  132.     color: #270ECC;
  133.     margin-top: 5px;
  134.     margin-left: 10px;
  135. }
  136. .datecom {
  137.     width: 530px;
  138.     height: auto;
  139.     float: left;
  140.     clear: left;
  141.     font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
  142.     font-size: 10px;
  143.     font-weight: normal;
  144.     color: #270ECC;
  145.     float: left;
  146.     margin-top: 5px;
  147.     margin-left: 10px;
  148. }
  149. .comentariotxt {
  150.     width: 530px;
  151.     height: auto;
  152.     float: left;
  153.     clear: left;
  154.     font-family:Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
  155.     font-size: 12px;
  156.     font-weight: normal;
  157.     color: #000000;
  158.     float: left;
  159.     margin-top: 5px;
  160.     margin-left: 10px;
  161. }
  162. .calificap{
  163.     color: #00689F;
  164.     font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
  165.     font-style: normal;
  166.     font-weight: bold;
  167.     font-variant: normal;
  168.     font-size: x-large;
  169.     line-height: normal;
  170.     text-align: left;
  171.     margin-bottom: 5px;
  172.     margin-top: 5px;
  173. }


El PHP para agregar los datos a la tabla en la base de datos:

Código PHP:
Ver original
  1. <?php
  2. require('config.php');
  3.  
  4. $name = utf8_decode($_POST['name']);
  5. $title = utf8_decode($_POST['title']);
  6. $comment = utf8_decode($_POST['comment']);
  7.  
  8.  
  9. $insert = mysql_query("INSERT INTO tbs_comentarios (nombre, titulo, comentario, comentarioip, hora, respuesta) VALUES ('$name', '$title', '$comment', now())", $conexion);
  10. ?>


El PHP de conexión con la base de datos:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $servername='localhost';
  4. $dbusername='';  //*****Debe cambiarse*****//
  5. $dbpassword='';  //*****Debe cambiarse*****//
  6. $dbname='';  //*****Debe cambiarse*****//
  7.  
  8. connecttodb($servername,$dbname,$dbusername,$dbpassword);
  9. function connecttodb($servername,$dbname,$dbuser,$dbpassword){
  10.     global $link;
  11.     $link=mysql_connect ("$servername","$dbuser","$dbpassword");
  12.     if(!$link){die("En este momento no se puede conectar con la base de datos");}
  13.     mysql_select_db("$dbname",$link) or die ("No se puede abrir la base de datos".mysql_error());
  14.     }
  15. ?>

Al realizar este proceso, he seguido tu consejo de divertirme, inicialmente me había sacado canas verdes, sin embargo con el paso del tiempo y al ver que estaba respondiendo localmente más me inspiraba a terminar el código y pulirlo poco a poco con ayuda de la lógica de la programación.

Así mismo, estoy buscando agregarle al código que de forma oculta se envíe la dirección IP de donde se comenta a la base de datos junto con los demás datos guardados, esto es únicamente porque como no pido un login para comentar, me gustaría tener la seguridad de que al recibir comentarios mal intencionados o inclusive de spam, pueda bloquear al comentarista utilizando su dirección IP. Sabes cómo puedo complementar esto que menciono en alguno de los archivos que tengo?

Así mismo quiero agregar un botón para responder sobre los comentarios que aparezcan, esto sería increíble para tener mayor contacto con los que comenten en la página, sabrías cómo complementarlo utilizando este mismo código?

Yo creo que para agregar el botón de respuesta sobre cada comentario, debe incluirse en la hoja de estilos el div junto con la referencia de la imagen y de esta manera tenerlo activo en invocarlo en el script de ajax, sin embargo cómo podría invocar a un cuadro de texto para realizar la respuesta?
  #4 (permalink)  
Antiguo 07/10/2014, 17:03
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
Respuesta: Sección de comentarios con PHP y MySQL

Hola, que bueno que te ayudó en algo mi respuesta.

Mira sinceramente, creo que estas copiando y pegando mucho código, y tal ves estés usando más de lo que necesitas. Como te decía en mi primera respuesta, ve por lo básico, lo sencillo y después ve mejorandolo, me parece adecuado que comiences con CSS, pues así tus archivos quedan un tanto más limpios, pero el usar ya AJAX o Jquery, considero que primero deberias comprender (no digo que no lo hagas) para que es, para que conviene y cuando no conviene, me da la idea de que el uso de tu jquery es inecesario, es mucho más fácil y corto en código armar un formulario convencional, que capturar valores con jquery y luego con jquery de nuevo mandarlos a otro archivo, pero bueno, como te decía en la otra respuesta, ya es cuestión de gustos, te sugeriría que evaluaras qué cosas de tu código realmente son necesarias o bien, aportan algo positivo a tu código y producto. Si solo es para usar una técnica nueva, pues no necesariamente es bueno, a excepción de que practicas, aprendes y quizás te diviertes, pero ya hablando del trabajo en sí, creo que a veces meter algo innecesario puede perjudicar más que beneficiar.

Otra observación, para que usas "utf8 decode", mejor, que tu html esté codificado igual que tu base de datos, así no tendrás la necesidad de usar más código para codificar, decodificar, etc.

Para lo de la IP, creo que debes leer sobre las variables de servidor que maneja PHP, puedes hacer quizás un "array" (o tabla) donde puedas agregar y consultar IP baneadas, y hacer una condicional (if) "si la ip que intenta comentar esta en la relación de ips baneadas, no lo permitas, sino, entonces permitelo", puedes buscar $_SERVER

Nota: php.net es un sitio que debes agregar a favoritos.

Ahora bien, quizás deberías incursionar un poco en el tema del captcha (busca en google algún captcha para php, y vas probando cual se te hace cómodo)

Sobre la respuesta de comentarios, pues ahí sí que tienes que usar tu lógica, y ver como relacionar información, y aquí también varia según la estructura de tu base de datos. Podrías tener una tabla de comentarios y otra de respuestas, relacionadas por algún ID, pero si vas a hacer respuestas de respuestas de respuestas, etc. o dejarlo abierto para N cantidad de respuestas, pues obviamente no harás N tablas, sino que aquí ya tienes que pensar como hacerlo, insisto, ya depende de cada programador y de lo que sabes hacer.

De nuevo, no te preocupes, ve a lo simple, y enfocate en puntos que quieres lograr.

Animo.
  #5 (permalink)  
Antiguo 13/10/2014, 15:22
 
Fecha de Ingreso: octubre-2014
Ubicación: Distrito Federal
Mensajes: 8
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Sección de comentarios con PHP y MySQL

Buen día Mcruzmx:

He seguido tus consejos y tus pasos y poco a poco le he dado una mayor optimización al sistema de comentarios, ya conecta con la base de datos, ya recibe y muestra información pero ahora sólo me resta acomodar un dato adicional, esto es agregarle estilo a cada título de cada comentario que se muestra, te dejo el código que he implementado, sin ajax ni similar.

Este es el código original de la página:

Código PHP:
Ver original
  1. <?php include('../header2.php');?>
  2. <?php
  3. require('config.php');
  4.  
  5. if(isset($_POST['submit']))
  6. {
  7.     $name = $_POST['name'];
  8.     $title = $_POST['title'];
  9.     $comment = $_POST['comment'];
  10.     $ip = $_SERVER['REMOTE_ADDR'];
  11.  
  12.    
  13.     $sql = "INSERT INTO bts_comentarios (nombre, titulo, comentario, comentarioip, hora) VALUES ('$name', '$title', '$comment', '$ip', now())";
  14.     $result = mysql_query($sql, $link);
  15.    
  16. }
  17. ?>
  18. <html><head>
  19. <link type="text/css" href="../css/style.css" rel="stylesheet">
  20. </head><body>
  21. <div class="content">
  22.     <div class="principal">
  23.         <div class="contenedor">
  24.         <div class="formulario">
  25.             <h2 class="nombre-user">Cuenta el chisme</h2>
  26.             <span class="calificap">Califica</span>
  27.                 <form name="comentario" method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  28.                 <span class="tit">Nombre:</span><br/>
  29.                 <input type="text" class="cajanom" id="name" name="name" size="40" /><br/><br/>
  30.                 <span class="tit">Titulo del chisme:</span><br/>
  31.                 <input type="text" class="cajatit" id="title" name="title" size="40" /><br/><br/>
  32.                 <span class="tit">Tu chisme:</span><br/>
  33.                 <textarea name="comment" class="cajatxt" id="comment" rows="6" cols="65"></textarea>
  34.                 <br/><br/>
  35.                 <input type="submit" name="submit" class="btn-default" value="Envia tu Chisme" />
  36.                 </form>
  37.         </div><!-- #formulario -->
  38.         <div class="clear"></div>
  39.         <div id="newmessage">
  40.         <h2 class="nombre-user">Los Chismes</h2> <br />
  41.         <?php
  42.          include ("recuperar.php");
  43.          $con = new conexion();
  44.          $con-> recuperarDatos();
  45.          ?>
  46.         </div>
  47.        
  48.     </div><!-- #contenedor -->
  49. <?php include('../sidebar.php');?>
  50.  
  51. </div><!-- #principal -->
  52. </div><!-- #content -->
  53. <div class="clear"></div>
  54. <?php include('../footer.php');?></body></html>

Este es el código de conexión del formulario a la base de datos config.php:
Código PHP:
Ver original
  1. <?php
  2. $servername='localhost:3306';
  3. $dbusername='root';  //*****Debe cambiarlo*****//
  4. $dbpassword='';  //*****Debe cambiarlo*****//
  5. $dbname='test';  //*****Debe cambiarlo*****//
  6.  
  7.  
  8. connecttodb($servername,$dbname,$dbusername,$dbpassword);
  9. function connecttodb($servername,$dbname,$dbuser,$dbpassword){
  10.     global $link;
  11.     $link=mysql_connect ("$servername","$dbuser","$dbpassword");
  12.     if(!$link){die("En este momento no se puede conectar con la base de datos");}
  13.     mysql_select_db("$dbname",$link) or die ("No se puede conectar con la base de datos".mysql_error());
  14.     }
  15. ?>

Y este es el código que muestra la información y comentarios en la página capturar.php:
Código PHP:
Ver original
  1. <?php
  2. class conexion{
  3.     function recuperarDatos(){
  4.        
  5. $servername='localhost:3306';
  6. $dbusername='root';  //*****Debe cambiarlo*****//
  7. $dbpassword='';  //*****Debe cambiarlo*****//
  8. $dbname='test';  //*****Debe cambiarlo*****//
  9.  
  10. connecttodb($servername,$dbname,$dbusername,$dbpassword);
  11. $query = "SELECT nombre, titulo, comentario, hora FROM bts_comentarios order by id desc";
  12. $resultado = mysql_query($query);
  13.  
  14. while ($fila = mysql_fetch_array($resultado)) {
  15.     echo "$fila[titulo] <br> ";
  16.     echo "$fila[nombre] <br> ";
  17.     echo "$fila[hora] <br> ";
  18.     echo "$fila[comentario] <br> ";
  19.     }
  20.     }
  21. }
  22. ?>

Mi duda es, puedo agregarle un estilo de mi hoja de estilos o directamente en el PHP capturar para que se aprecie de una manera más elegante y no los comentarios puestos como una lista cualquiera o tengo qué modificar algún dato?

Agradezco tu atención y me ha servido de forma asombrosa lo que me has comentado, bastante buena la información.

Saludos!!
  #6 (permalink)  
Antiguo 13/10/2014, 15:38
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
Respuesta: Sección de comentarios con PHP y MySQL

Por supuesto, desde PHP puedes mandar cualquier impresión HTML (y mucho más).

En tu caso puedes implementar tu css algo así (y aprovecho para corregirte algo):

echo '<p class="tuclaseparaTITULOScss">'.$fila[titulo].'</p>';
echo '<p class="tuclaseparaNOMBREScss">'.$fila[nombre].'</p>';
echo '<p class="tuclaseparaHORAcss">'.$fila[hora].'</p>';
echo '<p class="tuclaseparaCOMENTARIOScss">'.$fila[comentario].'</p>';

Nota que class="nombreclase" es opcional, es decir, te puedes basar en lo que ves en un archivo HTML común, puedes tener <p>texto</p>, en tu caso sería <p>Titulo</p>, aqui puedes agregar un estilo, por medio de una clase o bien ID (tendrías que leer más sobre CSS), en este ejemplo es por medio de clase y por eso pongo por ejemplo <p class="titulo">Titulo</p>.

La corrección que le hago (según mi criterio) es que las variables en php no es necesario que las metas entre comillas (no está del todo mal, en la referencia así la usan como tú, pero en lo personal prefiero no hacerlo), lo que creo que se recomienda es concatenar, y lo puedes hacer con un simple punto como recién hice: "texto".$variable."texto", también puedes jugar con comillas dobles o sencillas.

Trata de leer más sobre el comando echo de php, con él puedes imprimir cualquier código HTML como acabo de hacer.

Espero que esto te ayude, suerte y saludos.
  #7 (permalink)  
Antiguo 13/10/2014, 17:15
 
Fecha de Ingreso: octubre-2014
Ubicación: Distrito Federal
Mensajes: 8
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Sección de comentarios con PHP y MySQL

Estuve revisando sobre el tema Mcruzmx y resultó que también hay otro modo de realizar esta operación, de hecho la realicé así y funcionó correctamente.

Te agradezco infinitamente tu apoyo, tus consejos me han sido muy útiles y ahora que entiendo más php me doy cuenta que es sencillo y noble sólo es cuestión de darle su lugar adecuado y de esta manera nos responderá sin usar librerías.

Te dejo el código para que también dispongas de él:

Código PHP:
Ver original
  1. while ($fila = mysql_fetch_array($resultado)) {
  2.     echo "<span class=\"titulo\">$fila[titulo]</span> <br>" ;
  3.     echo "<span class=\"nombre\">$fila[nombre]</span> <br>";
  4.     echo "<span class=\"datecom\">$fila[hora]</span> <br> ";
  5.     echo "<span class=\"comentariotxt\">$fila[comentario]</span> <br> ";
  6.     }
  7.     }
  8. }

Muchas gracias por tu entero apoyo!!
  #8 (permalink)  
Antiguo 13/10/2014, 18:56
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
Respuesta: Sección de comentarios con PHP y MySQL

No te preocupes, mientras se pueda ayudar aqui estamos.

Solo te comento, trata de usar las etiquetas que más correspondan, lee para que es "Span" y para que es "P". Sobre las diagonales, las usas cuando usas comillas dentro de comillas, como "este es un \"ejemplo\" de comillas", pero también lo puedes poner como "este es un 'ejemplo' de comillas" o 'este es un "ejemplo" de comillas", tienen unas pequeñas diferencias, que si esas cadenas las imprimes las veras.

Te recomiendo también que trates de llevar un estándar, revisa http://validator.w3.org/ para que valides tu código.

Etiqueta P
http://www.w3schools.com/tags/tag_p.asp

Etiqueta Span
http://www.w3schools.com/tags/tag_span.asp

Etiqueta BR
http://www.w3schools.com/tags/tag_br.asp

BR vs P
http://stackoverflow.com/questions/1...to-use-p-vs-br

Saludos.

Última edición por Mcruzmx; 13/10/2014 a las 19:01 Razón: ampliar información

Etiquetas: comentarios, fecha, formulario, html, mysql, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:40.