Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Enviar formulario desde un bucle while

Estas en el tema de Enviar formulario desde un bucle while en el foro de PHP en Foros del Web. Hola a todos, primero quiero decir que no hace mucho que estoy en php, cerca de un mes y tengo muchas dudas. Con el conocimiento ...
  #1 (permalink)  
Antiguo 30/06/2014, 00:17
 
Fecha de Ingreso: febrero-2014
Mensajes: 32
Antigüedad: 10 años, 9 meses
Puntos: 0
Enviar formulario desde un bucle while

Hola a todos, primero quiero decir que no hace mucho que estoy en php, cerca de un mes y tengo muchas dudas. Con el conocimiento que poseo mas o menos me manejo, pero hay cosas que no puedo resolver y antes de postear siempre aquí busco y leo, no encontré nada al respecto que me sirva así que les pido su ayuda.

Bueno empezamos, ¿Qué quiero hacer? Bueno, tengo un sistema de comentarios a noticias donde quiero botones donde calificar a los comentarios con puntos, al estilo "Me gusta/No megusta", pero no logro hacer que el sistema de puntuación funcione. Vamos al código.

Bien, esta primera parte es la que muestra la noticia, perdón por el desorden de el código, yo se que se podría optimizar y hacer de otras formas que desconozco, pero recién empiezo y me podría autocalificar de mal programador, por ahora.

Código PHP:
Ver original
  1. <?
  2. include('acceso_db.php');
  3. if(isset($_GET['noticias']))
  4. {
  5.     if(!empty($_GET['noticias']))  
  6.     {      
  7.         $id_noticia = (int) mysql_real_escape_string($_GET['noticias']);
  8.         $query = "SELECT * FROM noticias2 WHERE id = '".$id_noticia."' ";
  9.         $asd  = mysql_query($query, $cn);
  10. $asd1 = mysql_fetch_array($asd);
  11. ?>
  12.  
  13.             <table style="table-layout: fixed; width: 100%; border: 1px solid rgb(204, 204, 204);" cellpadding="3" cellspacing="0" border="0">
  14.  
  15.                 <tbody>
  16.                     <tr class="txt_1 odd">
  17.                         <td style="padding:15px 25px 3px 15px;" align="center"><h4><?=$asd1['titulo']?></h4>&nbsp;</td>
  18.                     </tr>
  19.                     <tr class="txt_1 even">
  20.                         <?
  21.                         $descri = $asd1['texto'];
  22.                         ?>
  23.                        <td style="word-wrap: break-word; padding:10px 15px 35px 15px;"><? echo $descri; ?></td>
  24.                     </tr>
  25.                <tr class="txt_1 odd">
  26.                <td style="padding:15px 25px 3px 15px;" align="center">Enviado por <b><?=$asd1['autor']?></b>&nbsp;</td>
  27.                 </tr>
  28.                 </tbody>
  29.             </table>
  30. <p style="margin-top:10px;">
  31. <?
  32.     }
  33. }
  34. ?>

Bueno, esta otra parte es la que muestra los comentarios dentro de la tabla, "Comentariosn" Cuya estructura es así

Código SQL:
Ver original
  1. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
  2. SET time_zone = "+00:00";
  3.  
  4. CREATE TABLE `comentariosn` (
  5.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  6.   `id_noticia` INT(10) NOT NULL,
  7.   `autor` VARCHAR(100) NOT NULL,
  8.   `fecha` datetime NOT NULL,
  9.   `comment` text NOT NULL,
  10.   `titulo` VARCHAR(20) NOT NULL,
  11.   `puntost` VARCHAR(50) NOT NULL DEFAULT '0',
  12.   `puntosn` VARCHAR(20) NOT NULL DEFAULT '0',
  13.   `puntosp` VARCHAR(20) NOT NULL DEFAULT '0',
  14.   `ip` VARCHAR(100) NOT NULL,
  15.   PRIMARY KEY (`id`)
  16. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1;



Código PHP:
Ver original
  1. <?
  2.                $usuario = $_SESSION['usuario_nombre'];
  3.         $id_noticia = (int) mysql_real_escape_string($_GET['noticias']);
  4.         $consulta1 = "SELECT * FROM comentariosn WHERE id_noticia = '".$id_noticia."' ORDER BY id DESC limit 15";
  5.         $asdefds  = mysql_query($consulta1, $cn);
  6. while($mostachoca = mysql_fetch_array($asdefds))
  7. {
  8. ?>
  9.          
  10.             <table style="table-layout: fixed; width: 100%; border: 1px solid rgb(204, 204, 204);" cellpadding="3" cellspacing="0" border="0">
  11.  
  12.                 <tbody>
  13.                     <tr class="txt_1 odd">
  14.                         <td style="padding:15px 25px 3px 15px;" align="left">#<?=$mostachoca['id']?>&nbsp;por&nbsp;<b><?=strip_tags($mostachoca['autor'])?>&nbsp;</b>&nbsp;<br><?=$mostachoca['fecha']?></td>
  15.                     </tr>
  16.                     <tr class="txt_1 even">
  17.                         <td style="word-wrap: break-word; padding:10px 15px 35px 15px;" align="left"><?=strip_tags($mostachoca['comment'],'<strong>,<h1>,<p>,<em>,<span>,<sup>,<sub>,<h2>,<h3>,<h4>,<h5>,<h6>,<style>')?></td>
  18.                     </tr>
  19.                 <tr class="txt_1 odd">
  20.                <td style="padding:15px 25px 3px 15px;" align="left"> <form action="votar.php" method="post">
  21.                <input id="idq" name="idq" type="hidden" value="<?=$mostachoca['id']?>"/> <input name="submitp" id="submitp" type="image" src="+.png" border="0">( )&nbsp;<input name="submitn" type="image" src="-.png" border="0">( )
  22.                </form></td>
  23.                 </tbody>
  24.             </table>
  25. <?
  26. }
  27. ?>
  28.  
  29. <div style="text-align:center">
  30.            <h3>Nuevo comentario</h3>
  31.            <form action="" method="post">
  32.             <textarea name="comentario" id="comentario" style="height:200px;width:450px;margin-top:10px;"> </textarea>
  33.             <p style="margin-top:20px;">
  34.             <input type="submit" class="css3button" value="Publicar" name="enviarcomentario" id="enviarcomentario">
  35.             </form>
  36.             </div>

También tengo un formulario donde se envían nuevos comentarios. Si se observa el código se pueden ver dos botones con el name submitp y submitn que son los que quiero que se envíen a mi archivo php llamado votar.php, cuyo código es el siguiente.

Código PHP:
Ver original
  1. <?php
  2. if(isset($_POST['submitp'])) {
  3. $ideq = $_POST['idq'];
  4. $masunpunto = "UPDATE comentariosn SET puntosp = puntosp+'1' WHERE id = '".$idq."'";
  5. mysql_query($masunpunto,$cn);  
  6. }
  7. if(isset($_POST['submitn'])){
  8.     $menosunpunto = "UPDATE comentariosn SET puntosn = puntosn+1 WHERE id = '".$mostachoca['id']."'";
  9. mysql_query($menosunpunto,$cn);
  10. }
  11. ?>

La verdad, no se si lo que hago esta bien o no, lo que se de php es en base algunos tutos y experimentar como lo hago ahora. Gracias de antemano por corregirme y enseñarme. Saludos.
  #2 (permalink)  
Antiguo 30/06/2014, 06:28
Myl
 
Fecha de Ingreso: agosto-2011
Mensajes: 61
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: Enviar formulario desde un bucle while

Hola

Mira, entiendo tu idea de agregar la opcion de 'Me gusta' o 'No me gusta' a los comentarios, pero me parece que te estas complicando mucho.

Yo lo haria así:

Primero crearia una nueva tabla para los votos 'Me gusta'. (Ten en cuenta que es solo un ejemplo simple).

Código PHP:
CREATE TABLE meGusta (
id INT AUTO_INCREMENT NOT NULL,
id_comentario INT NOT NULL,
id_usuario INT NOT NULL,
PRIMARY KEY(id)
); 
Luego, solo imprimes todos los comentarios de una noticia X. Bajo el comentario simplemente creas un enlace a un archivo por ejemplo voto.php?idComentario=X

Y utilizando GET para obtener el id del comentario y $_SESSION para el id del usuario. Podras poblar la tabla. Luego es cosa que hagas las consultas necesarias para mostrar la cantidad de likes que tiene cada comentario.

Saludos.
  #3 (permalink)  
Antiguo 03/07/2014, 19:29
 
Fecha de Ingreso: febrero-2014
Mensajes: 32
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Enviar formulario desde un bucle while

Perdon por respoder tarde, es que no he tenido tiempo para probarlo, pero hoy si le dedique.
Lo solucione como Myl indico, cree una tabla nueva la cual es esta

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `megusta` (
  2.   `id` INT(20) NOT NULL AUTO_INCREMENT,
  3.   `id_comentario` INT(20) NOT NULL,
  4.   `usuario` VARCHAR(20) NOT NULL,
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;

Y envie los valors a traves de GET por un link

Código HTML:
Ver original
  1. <a href="votar.php?votop=<?=$mostachoca['id']?>&us=<?=$usuario?>">Me gusta</a>

Y este es el archivo que recibe dichos valores que es una prueba porque recien lo acabo de hacer, falta terminarlo pero es para que se note la idea

Código PHP:
Ver original
  1. <?php
  2.     session_start();
  3.     include('acceso_db.php');
  4.     if(isset($_SESSION['usuario_nombre'])) {
  5. ?>
  6. <?php
  7. include('acceso_db.php');
  8. if(isset($_GET['votop']) && isset($_GET['us']))
  9. {
  10.     if(!empty($_GET['votop']) && !empty($_GET['us']))
  11.     {
  12.       $usuario = $_SESSION['usuario_nombre'];
  13.       $positivo = (int) mysql_real_escape_string($_GET['votop']);
  14.       $usuarioe = mysql_real_escape_string($_GET['us']);
  15.      
  16.      
  17.       if ($usuario == $usuarioe){
  18.         $consulta1 = "SELECT * FROM megusta WHERE id_comentario = '".$positivo."'";
  19.         $query  = mysql_query($consulta1, $cn);
  20.         $resultado = mysql_fetch_array($query);
  21.         if($resultado['usuario'] == $usuario){
  22.             echo "Usted ya ha votado";
  23.         }else{
  24.         $consulta2 = "SELECT * FROM comentariosn WHERE id = '".$positivo."'";
  25.         $query2  = mysql_query($consulta2, $cn);
  26.         $listadoden = mysql_fetch_array($query2);
  27.         if ($listadoden['id'] == $positivo){
  28.             $nuevovoto = "INSERT INTO megusta SET id_comentario = '".$positivo."', usuario = '".$usuario."' ";
  29.             mysql_query($nuevovoto, $cn);
  30.             $masunpunto = "UPDATE comentariosn SET puntosp = puntosp+'1' WHERE id = '".$positivo."'";
  31.             mysql_query($masunpunto,$cn);
  32.             echo "Voto realizado con exito";
  33.         } else{
  34.         echo "El comentario no existe!";   
  35.         }
  36.         }
  37.       }else{
  38.         echo "Oops algo anda mal!";  
  39.       }
  40.    
  41.    
  42.    
  43.     }
  44. }
  45. ?>
  46. <?php
  47.     }else {
  48.         echo "No hay sesion;
  49.    }
  50. ?>

Y la tabla de los comentarios que almacena las votaciones positivas, negativas y el total

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `comentariosn` (
  2.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `id_noticia` INT(10) NOT NULL,
  4.   `autor` VARCHAR(100) NOT NULL,
  5.   `fecha` datetime NOT NULL,
  6.   `comment` text NOT NULL,
  7.   `titulo` VARCHAR(20) NOT NULL,
  8.   `puntost` VARCHAR(50) NOT NULL DEFAULT '0',
  9.   `puntosn` VARCHAR(20) NOT NULL DEFAULT '0',
  10.   `puntosp` VARCHAR(20) NOT NULL DEFAULT '0',
  11.   `ip` VARCHAR(100) NOT NULL,
  12.   PRIMARY KEY (`id`)
  13. )

Y bueno, eso es todo. Gracias Myl por la ayuda :)

Etiquetas: bucle, fecha, formulario, 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 14:46.