Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Sistema de tags [TagsCloud]

Estas en el tema de Sistema de tags [TagsCloud] en el foro de PHP en Foros del Web. Hola compañeros de forosdelweb Soy nuevo en la comunidad, tengo tiempo registrado pero apenas activé mi cuenta ayer. Tengo el siguiente problema y me gustaría ...
  #1 (permalink)  
Antiguo 09/11/2013, 13:51
 
Fecha de Ingreso: noviembre-2012
Ubicación: Venezuela
Mensajes: 7
Antigüedad: 12 años, 1 mes
Puntos: 1
Pregunta Sistema de tags [TagsCloud]

Hola compañeros de forosdelweb
Soy nuevo en la comunidad, tengo tiempo registrado pero apenas activé mi cuenta ayer. Tengo el siguiente problema y me gustaría una ayuda de ustedes.
Estoy creando un sistema de tags para mi blog (El cual he creado a puro código). Pero hay algo que me está dando un dolor de cabeza. Les cuento,



Al crear un nuevo artículo tengo un <input> donde inserto tags separados por comas (,). Luego, mediante un explode los separo y los subo uno a uno en la base de datos

Código PHP:
$connect;
$database;
$Titulo $_POST['title'];
$Articulo $_POST['articulo'];
$Tags $_POST['tags'];
$Fecha date('d M,Y');
$Hora date('h:i');
$Wrtier $Me;
if (!empty(
$Titulo) and !empty($Articulo)) {
    
$Etiquetas explode(",",$Tags);
    
$numero=count($Etiquetas);  
    
$i 0
    while(
$i <= $numero) {
            
mysql_query('insert into jtags (tags) values ("'.$Etiquetas[$i].'")');
        
$i++;
    }

Ahí bien, los tags se insertan en la base de datos. El problema está que cuando inserto un tag con el mismo nombre, yo quiero que se sume en la columna frecuencia (+1) Y no que se inserte como nuevo. Aquí un ejemplo.

Así es como me ocurre actualmente:


Y así es como debería ser:


¿Alguien podría ayudarme? Se los agradezco
  #2 (permalink)  
Antiguo 09/11/2013, 14:43
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 9 meses
Puntos: 96
Respuesta: Sistema de tags [TagsCloud]

Tendrias que crear una funcion que verifique que tag existe, en caso de que exista haces un update y si no existe haces un insert
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #3 (permalink)  
Antiguo 09/11/2013, 16:24
 
Fecha de Ingreso: noviembre-2012
Ubicación: Venezuela
Mensajes: 7
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Sistema de tags [TagsCloud]

Cita:
Iniciado por SkAr88 Ver Mensaje
Tendrias que crear una funcion que verifique que tag existe, en caso de que exista haces un update y si no existe haces un insert
Ya lo intenté pero no me funciona :s
  #4 (permalink)  
Antiguo 09/11/2013, 17:54
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: Sistema de tags [TagsCloud]

pues muestra lo que hiciste porque simplemente es como te lo acaban de indicar, buscar si existe, lo haces u update, sino existe haces un insert
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 09/11/2013, 19:57
 
Fecha de Ingreso: noviembre-2012
Ubicación: Venezuela
Mensajes: 7
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Sistema de tags [TagsCloud]

Así es como hice para dar la condición de si existe o no, pero no sirve :(

Código PHP:
Ver original
  1. $connect;
  2. $database;
  3. $Titulo = $_POST['title'];
  4. $Articulo = $_POST['articulo'];
  5. $Tags = $_POST['tags'];
  6. $Fecha = date('d M,Y');
  7. $Hora = date('h:i');
  8. $Wrtier = $Me;
  9. if (!empty($Titulo) and !empty($Articulo)) {
  10.     $Etiquetas = explode(",",$Tags);
  11.     $numero=count($Etiquetas);  
  12.     $i = 0;
  13.     while($i <= $numero) {
  14.         $RevTagsQry=mysql_query("select * from jtags group by tags");
  15.         if($RevTags=mysql_fetch_assoc($RevTagsQry)) {
  16.             if ($Etiquetas[$i] == $RevTags['tags']) {
  17.                 mysql_query('update jtags set frecuencia =(frecuencia+1) where tags="'.$RevTags['tags'].'"');
  18.             } else {   
  19.                 mysql_query('insert into jtags (tags) values ("'.$Etiquetas[$i].'")');
  20.             }
  21.         }
  22.         $i++;
  23.     }
  24. }
  #6 (permalink)  
Antiguo 09/11/2013, 20:01
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: Sistema de tags [TagsCloud]

pues la consulta debería de ser así
Código php:
Ver original
  1. $sql = "SELECT * FROM jtags WHERE tags='" . $RevTags['tags'] . "'" ;
de tal manera que preguntes directamente por el tag que estas intentando ingresar
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 09/11/2013, 20:07
 
Fecha de Ingreso: noviembre-2012
Ubicación: Venezuela
Mensajes: 7
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Sistema de tags [TagsCloud]

Cita:
Iniciado por carlos_belisario Ver Mensaje
pues la consulta debería de ser así
Código php:
Ver original
  1. $sql = "SELECT * FROM jtags WHERE tags='" . $RevTags['tags'] . "'" ;
de tal manera que preguntes directamente por el tag que estas intentando ingresar
Intento y te aviso bro
  #8 (permalink)  
Antiguo 09/11/2013, 21:07
 
Fecha de Ingreso: noviembre-2012
Ubicación: Venezuela
Mensajes: 7
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Sistema de tags [TagsCloud]

No, no funcionó.
De ésta manera hace la función PERO, si el tag no existe no lo inserta como nuevo :(

Código PHP:
Ver original
  1. $connect;
  2. $database;
  3. $Titulo = $_POST['title'];
  4. $Articulo = $_POST['articulo'];
  5. $Tags = $_POST['tags'];
  6. $Fecha = date('d M,Y');
  7. $Hora = date('h:i');
  8. $Wrtier = $Me;
  9. if (!empty($Titulo) and !empty($Articulo)) {
  10.     $Etiquetas = explode(",",$Tags);
  11.     $numero=count($Etiquetas);  
  12.     $i = 0;
  13.     while($i <= $numero) {
  14.         $RevTagsQry=mysql_query("SELECT * FROM jtags WHERE tags='".$Etiquetas[$i]."'");
  15.         if($RevTags=mysql_fetch_assoc($RevTagsQry)) {
  16.             if ($Etiquetas[$i] == $RevTags['tags']) {
  17.                 mysql_query('update jtags set frecuencia =(frecuencia+1) where tags="'.$RevTags['tags'].'"');
  18.             } else {   
  19.                 mysql_query('insert into jtags (tags) values ("'.$Etiquetas[$i].'")');
  20.             }
  21.         }
  22.         $i++;
  23.     }
  24. }
  #9 (permalink)  
Antiguo 13/11/2013, 15:42
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Sistema de tags [TagsCloud]

Te dejo un ejemplo básico, el campo de tags debe ser único (UNIQUE).

Código PHP:
Ver original
  1. <?php
  2.  
  3. $c = mysql_connect('localhost', 'root', '12345');
  4.  
  5. $tags = explode(',', $_POST['tags']);
  6.  
  7. foreach ($tags as $tag) {
  8.     $sql = "INSERT INTO tags (tags, frecuencia) VALUES ('$tag', 1) ON DUPLICATE KEY UPDATE frecuencia = frecuencia+1";
  9.     mysql_query($sql) or die(mysql_error());
  10. }

De esta forma no necesitas consultar ni dar tanta vuelta.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 13/11/2013 a las 19:47 Razón: Aclaración
  #10 (permalink)  
Antiguo 13/11/2013, 19:36
 
Fecha de Ingreso: noviembre-2012
Ubicación: Venezuela
Mensajes: 7
Antigüedad: 12 años, 1 mes
Puntos: 1
De acuerdo Respuesta: Sistema de tags [TagsCloud]

Excelente andresdzphp

Faltó un detalle, colocar la columna tags como índice UNIQUE Ey, ¿Quizá ese era el problema en los intentos anteriores? jajaja. UN MILLON de gracias a todos, en especial a ti andres que me ayudaste finalmente a resolver el problema.

Un saludo
  #11 (permalink)  
Antiguo 13/11/2013, 19:44
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Sistema de tags [TagsCloud]

te dije "el campo de tags debe ser único", pero sirve la aclaración UNIQUE para los que no entiendan. Suerte
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #12 (permalink)  
Antiguo 13/11/2013, 19:59
 
Fecha de Ingreso: noviembre-2012
Ubicación: Venezuela
Mensajes: 7
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Sistema de tags [TagsCloud]

Cierto jajaja :P

Etiquetas: creando, insertado, mysql, sistema, tags
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:10.