Regresar a la página www.ComoCrearTuWeb.com
Resultados 1 al 6 de 6

Tema: crear una zona de comentarios para la web usando JOIN (php)

  1. #1
    Esto empieza a ser un vicio... Habitante Avatar de paxarin
    Fecha de Ingreso
    03 nov, 09
    Ubicación
    Santa cruz de Bezana
    Mensajes
    646
    Poder de Reputación
    15

    crear una zona de comentarios para la web usando JOIN (php)

    Muy buenas.
    Haber os comento mi duda, haber si alguien puede hecharme un cable.
    Quiero hacer en mi web una zona de comentarios, que ya tenia en dos de las páginas. Pero quiero tener estas zonas de comentarios en todas las páginas de la web.
    Hasta ahora lo que hacia es crear dentro de la bbdd tablas distintas para cada sección de la web y funcionaba bien, pero claro si tuviera 100 páginas no voy a crear 100 tablas, no?
    Entonces investigando un poco y leyendo vi que era factible el hacer dos tablas
    1º esta tabla contendria un intContador (ID) y intCategoria.
    En el intCategoria iria las distintas secciones que tendria la web ejemplo (index, servicios, productos, etc.)
    2ª esta tabla tendria los campos intContador y el campo strTexto(aqui se almacenaria el comentario de las personas).
    Hasta aqui todo claro.
    Lei que haciendo uso de JOIN ejemplo:
    SELECT * FROM direcciones. AS dir
    JOIN países AS p ON p.país = dir.pais
    WHERE … cualquier condicion
    podemos relacionar las dos tablas y hacer que mediante esta consulta te mostre los datos que le indiques de las dos tablas.
    Mi duda y es el motivo de este post es como debo de hacer la inserción de los datos para que cuando alguien inserte un comentario a través de la pagina servicios y solo en esa, se vuelque la información del comentario en esa fila de la tabla.
    Y luego como hacer que se muestre ese comentario.
    Espero haberme explicado bien y que alguien me pueda ayudar.
    un saludo

  2. #2
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,043
    Poder de Reputación
    21
    Hola:

    La inserción de los datos es igual que en cualquier otra tabla: INSERT INTO tabla SET columna = valor, columna = valor (o la otra forma INSERT INTO tabla (columnas) VALUES (valores)). La única diferencia es que tendrás que hacer un insert por cada tabla, o sea, dos. La forma de leer la información es lo que cambia :D.

    El problema para mostrar los comentarios sólo de una sección no esta relacionado a cómo insertarlos, sino que es la base de datos la que debe estar bien relacionada.

    Según lo que planteas en tu post, estas serían las tablas:

    Código:
    CREATE TABLE category (
      category_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
      category_name VARCHAR(200) NOT NULL
    ) ENGINE=InnoDB CHARSET=utf8;
    
    CREATE TABLE comments (
      comment_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
      comment TEXT,
      category_id INT(11) UNSIGNED NOT NULL
    ) ENGINE=InnoDB; CHARSET=utf8;
    
    ALTER TABLE comments ADD CONSTRAINT fk_comments_ref_category FOREIGN KEY (category_id) REFERENCES category (category_id) ON UPDATE CASCADE ON DELETE CASCADE;
    Nota: ejecuta en ese orden las consultas, sino no funcionará.

    Esa es la estructura para que funcione correctamente. Ahora, para leer la información, harías esto:

    Código:
    SELECT * FROM category
    LEFT JOIN comments USING (category_id);
    Eso mostrará todos los datos mezclados y sin repetir. Para mostrar sólo los comentarios de una categoría, entonces harás esto:

    Código:
    SELECT * FROM category
    LEFT JOIN comments USING (category_id)
    WHERE category_name = 'nombre_categoría';
    Saludos.

  3. #3
    Esto empieza a ser un vicio... Habitante Avatar de paxarin
    Fecha de Ingreso
    03 nov, 09
    Ubicación
    Santa cruz de Bezana
    Mensajes
    646
    Poder de Reputación
    15
    Cita Iniciado por skaparate Ver Mensaje
    Hola:

    La inserción de los datos es igual que en cualquier otra tabla: INSERT INTO tabla SET columna = valor, columna = valor (o la otra forma INSERT INTO tabla (columnas) VALUES (valores)). La única diferencia es que tendrás que hacer un insert por cada tabla, o sea, dos. La forma de leer la información es lo que cambia :D.

    El problema para mostrar los comentarios sólo de una sección no esta relacionado a cómo insertarlos, sino que es la base de datos la que debe estar bien relacionada.

    Según lo que planteas en tu post, estas serían las tablas:

    Código:
    CREATE TABLE category (
      category_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
      category_name VARCHAR(200) NOT NULL
    ) ENGINE=InnoDB CHARSET=utf8;
    
    CREATE TABLE comments (
      comment_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
      comment TEXT,
      category_id INT(11) UNSIGNED NOT NULL
    ) ENGINE=InnoDB; CHARSET=utf8;
    
    ALTER TABLE comments ADD CONSTRAINT fk_comments_ref_category FOREIGN KEY (category_id) REFERENCES category (category_id) ON UPDATE CASCADE ON DELETE CASCADE;
    Nota: ejecuta en ese orden las consultas, sino no funcionará.

    Esa es la estructura para que funcione correctamente. Ahora, para leer la información, harías esto:

    Código:
    SELECT * FROM category
    LEFT JOIN comments USING (category_id);
    Eso mostrará todos los datos mezclados y sin repetir. Para mostrar sólo los comentarios de una categoría, entonces harás esto:

    Código:
    SELECT * FROM category
    LEFT JOIN comments USING (category_id)
    WHERE category_name = 'nombre_categoría';
    Saludos.
    Buenos dias.
    Antes de nada darte las gracias por la ayuda prestada, de verdad.
    Voy a probarlo ahora mismo haber si por fin me quito de tanta historia para la zona de comentarios.

  4. #4
    Esto empieza a ser un vicio... Habitante Avatar de paxarin
    Fecha de Ingreso
    03 nov, 09
    Ubicación
    Santa cruz de Bezana
    Mensajes
    646
    Poder de Reputación
    15
    Muy buenas esto es lo que estoy intentando hacer para la zona de comentarios de la web tal y como te comete.
    Estructura de tabla para la tabla `tblcategorias`
    Código:
    CREATE TABLE IF NOT EXISTS `tblcategorias` (
      `id` int(10) unsigned NOT NULL,
      `categoria` varchar(30) NOT NULL,
      PRIMARY KEY (`id`)
    ) 
    ENGINE=InnoDB DEFAULT CHARSET=latin1;
    Estructura de tabla para la tabla `tblcomentario`
    Código:
    CREATE TABLE IF NOT EXISTS `tblcomentario` (
      `id` int(10) unsigned NOT NULL,
      `co_categoria` varchar(30) NOT NULL,
      `co_nombre` varchar(20) NOT NULL,
      `co_mail` varchar(100) NOT NULL,
      `co_web` varchar(100) NOT NULL,
      `co_comentario` varchar(200) NOT NULL,
      PRIMARY KEY (`id`)
    ) 
    ENGINE=InnoDB DEFAULT CHARSET=latin1;
    para insertar los datos en la tabla
    Código:
    <form method="post" action="enviar-comentario.php?categoria=gente" id="form1" >
        <input type="text" name="nombre" />
        <input type="text" name="mail" />
        <input type="text" name="web" />
        <input type="text" name="msg" />
        <input type="submit" value="enviar" />
    </form>
    comentario.php
    Código:
    mysql_query("INSERT INTO tblcomentario (co_nombre, co_mail, co_web, co_comentario, co_categoria)
            VALUES ('{$_POST['nombre']}','{$_POST['mail']}','{$_POST['web']}','{$_POST['msg']}','{$_GET['categoria']}')",$conexion);
    		if (mysql_errno($conexion))
    		{
    			echo "No se pudo insertar los datos en la tabla. Error" .mysql_errno() ." - ".mysql_error();
    			mysql_close($conexion);
    		}	else{
    			$conexion;
    			header("location:index.php");
    Y para sacar los comentarios de la sección gente
    Código:
    $rst_oferta=mysql_query("SELECT * FROM tblcategorias LEFT JOIN tblcomentario  WHERE co_categoria = 'gente';",$conexion);
    $num_registros=mysql_num_rows($rst_oferta);
    if ($num_registros==0)
    {
            echo "No hay resultados para mostrar y seguro que ocurrio algo!!";
            mysql_close($conexion);
            exit();
    }
    Y la verdad que no se donde esta el error ya que estuve probando varias cosas pero no consigo sacarlo.
    Si lo que intento es sacar todos los comentarios no hay problema.
    Código:
    $rst_oferta=mysql_query("select co_nombre, co_mail, co_web, co_comentario, co_categoria from tblcomentario join tblcategorias on categoria=co_categoria;",$conexion);
    $num_registros=mysql_num_rows($rst_oferta);
    if ($num_registros==0)
    {
            echo "No existen productos para mostrar";
            mysql_close($conexion);
            exit();
    }
    
    <table border="0" cellpadding="0" cellspacing="0" class="tabla">
                    <tr>
                    	<th>Nombre</td>
                        <th>Email</td>
                        <th>web</td>
                        <th>Comentario</td>
                        <th>Categoria</td>
                    </tr>
                    <?php
                                    while ($fila=mysql_fetch_array($rst_oferta))
                                    {
                    ?>
                    <tr class="modo1">
                    	 <th><?php echo $fila ["co_nombre"];?></td>
                        <th><?php echo $fila ["co_mail"];?></td>
                        <th><?php echo $fila ["co_web"];?></td>
                        <th><?php echo $fila ["co_comentario"];?></td>
                        <th><?php echo $fila ["co_categoria"];?></td>
                    </tr>
                                    <?php
                                    }
                    ?>
                </table>
    Cual es el error?
    Haber si acabo de una vez con esto!!
    Un saludo

  5. #5
    Esto empieza a ser un vicio... Habitante Avatar de spitfire2
    Fecha de Ingreso
    04 sep, 10
    Ubicación
    ARGENTINA...!!!
    Mensajes
    750
    Poder de Reputación
    14
    puede ser porque el action del form envia a enviar-comentario.php y el archivo que inserta el registro se llama comentario.php

  6. #6
    Esto empieza a ser un vicio... Habitante Avatar de paxarin
    Fecha de Ingreso
    03 nov, 09
    Ubicación
    Santa cruz de Bezana
    Mensajes
    646
    Poder de Reputación
    15
    Al final si consegui que funcionara, por suerte que ya me tenia un poco loco este tema.
    Un saludo y gracias por vuestras respuestas.

Temas Similares

  1. Como crear una zona de comentarios en mi web.
    Por paxarin en el foro Foro General
    Respuestas: 0
    Último Mensaje: 23/02/2011, 21:02
  2. Crear Zona Personal para modificar datos
    Por victor5atodogas en el foro Foro General
    Respuestas: 1
    Último Mensaje: 23/11/2010, 22:08
  3. Tutorial para crear web usando MKPortal
    Por KenLego en el foro Tutoriales Varios
    Respuestas: 13
    Último Mensaje: 11/04/2010, 01:42

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •