Foros del Web » Programando para Internet » PHP »

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

Estas en el tema de crear una zona de comentarios para la web usando JOIN (php) en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 03/10/2012, 04:49
Avatar de paxarin  
Fecha de Ingreso: enero-2010
Ubicación: Santander
Mensajes: 413
Antigüedad: 14 años, 9 meses
Puntos: 6
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
__________________
http://www.paxarindesign.es
  #2 (permalink)  
Antiguo 03/10/2012, 04:59
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años, 7 meses
Puntos: 58
Respuesta: crear una zona de comentarios para la web usando JOIN (php)

Si, la corrección que has hecho es correcta. Haces dos tablas relacionadas, una guarda todos los comentarios y la otra las categorias para así saber que comentario corresponde a que categoria.

Pues para hacer el insert es muy simple. Si tienes la tabla categoria:
id_categoria
nombre

Y la comentario algo así:
id_comentario
texto_comentario
id_categoria

Pues el insert lo haces sólo en la tabla comentario, añadiendo el ID de la categoría que le corresponda. No se si me explico.

Luego cuando hagas un select de la tabla comentarios tendras que, como bien dices, unirlo con la otra tabla para así poder añadir el campo nombre y que te salga la categoría correspondiente.

PD: Yo usaría LEFT JOIN para unir ambas tamblas en lugar de join
  #3 (permalink)  
Antiguo 03/10/2012, 05:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: crear una zona de comentarios para la web usando JOIN (php)

Comentarios
intComentario PK
intContador FK
strTexto
idUsuario FK

Te agrego un par de campos a la tabla comentarios su Primari Key (intComentario) y idUsuario para saber quien ha hecho el comentario...

Las FK son las relaciones que debe tener esa tabla referenciando las tablas Secciones y Usuarios, eso nos asegurará que no pueda entrar un comentario sin una sección conocida, ni un usuario que no lo sea.

Te paso los Sql necesarios para hacer lo que pides

INSERT INTO comentarios (intContador,strTexto,idUsuario) VALUES ($intContador,$strTexto,$idUsuario);

Esto insertará en la tabla comentarios un comentario con su sección y su usuario, obviamente estos dos datos los debes obtener de la session, es decir como sabes quien esta logueado ya tienes al usuario y la sección la puedes obtener de un combo con las secciones donde el usuario habrá elegido en que sección quiere escribir o, mas elegante, si el formulario para entrar comentarios esta en todas las secciones no tendràs que preguntar al usuario que sección ya que se asumirá la actual. El identificador del comentario asumo que es autoinc y por tanto el propio motor le dará el valor correcto.

$seccion=X

SELECT strTexto FROM comentarios WHERE intContador=$seccion

Esto te retornará los comentarios de la secció X, otra vez como cargues el valor de la variable $seccion depende de como sea tu web...

Para poder ordenar los comentarios te faltaria un campo fecha por ejemlo....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #4 (permalink)  
Antiguo 05/10/2012, 04:56
Avatar de paxarin  
Fecha de Ingreso: enero-2010
Ubicación: Santander
Mensajes: 413
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: crear una zona de comentarios para la web usando JOIN (php)

`Antes de nada daros las gracias por vuestros comentarios.
Pero estuve intentando hacerlo como bien me explicasteis pero me surguen ahora un par de dudas.
La primera como identifico cada pagina?
Supongo que podria crear una variable para cada una que fuera por ejemplo $seccion= seccion1
Esta la recojeria en una de los campos del formulario.
Teoricamente quedaria reflejado en la bbdd que este comentario es de esta pagina x
pero como le solicito los datos? eso es lo que me pierdo.
Por lo que me comentasteis con esta linea
SELECT strTexto FROM comentarios WHERE intContador=$seccion
deberia de devolvermelos pero por alguna extraña razón no me funciono?
Por que podria haber sido?
Un saludo
__________________
http://www.paxarindesign.es
  #5 (permalink)  
Antiguo 05/10/2012, 06:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: crear una zona de comentarios para la web usando JOIN (php)

Sin ver que has hecho es dificil de saber....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #6 (permalink)  
Antiguo 08/10/2012, 03:07
Avatar de paxarin  
Fecha de Ingreso: enero-2010
Ubicación: Santander
Mensajes: 413
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: crear una zona de comentarios para la web usando JOIN (php)

Cita:
Iniciado por quimfv Ver Mensaje
Sin ver que has hecho es dificil de saber....
Revisare un par de cosas y os mostrare mi codigo.
Un saludo y gracias
__________________
http://www.paxarindesign.es
  #7 (permalink)  
Antiguo 11/10/2012, 04:58
Avatar de paxarin  
Fecha de Ingreso: enero-2010
Ubicación: Santander
Mensajes: 413
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: crear una zona de comentarios para la web usando JOIN (php)

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
__________________
http://www.paxarindesign.es
  #8 (permalink)  
Antiguo 11/10/2012, 07:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: crear una zona de comentarios para la web usando JOIN (php)

a ver primero la relacion entre tablas se hace normalmente por el indicador, no por el literal, es decir en la tabla comentarior debes guardar el ID de categoria no el nombre de la categoria, asi es como se ahorra mucho espacio.

Has mirado en la tabla si el insert ha hecho lo que debe.

Has intentado agregarle a la consulta que te saca TODOS los comentarios un where que restrinja a una categoria.

Código php:
Ver original
  1. mysql_query("INSERT INTO tblcomentario (co_nombre, co_mail, co_web, co_comentario, co_categoria)
  2.        VALUES ('{$_POST['nombre']}','{$_POST['mail']}','{$_POST['web']}','{$_POST['msg']}','{$_GET['categoria']}')",$conexion);

Código php:
Ver original
  1. mysql_query("INSERT INTO tblcomentario (co_nombre, co_mail, co_web, co_comentario, co_categoria)
  2.        VALUES ('".$_POST['nombre']."','".$_POST['mail']."','".$_POST['web']."','".$_POST['msg']."','".$_GET['categoria']."')",$conexion);

{$_POST['nombre']} usas alguna libreria...?

Código MySQL:
Ver original
  1. SELECT * FROM tblcategorias LEFT JOIN tblcomentario  WHERE co_categoria = 'gente';

Para que metes ese left join si lo que quieres son comentarios....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: comentarios, join, tabla, usando, zonas
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 22:08.