Foros del Web » Programando para Internet » PHP »

Obtener id de registro ingresado

Estas en el tema de Obtener id de registro ingresado en el foro de PHP en Foros del Web. Estoy con un sistema de tags, al terminarlo lo voy a subir al foro como aporte ya que no vi ninguno de este tipo, esta ...
  #1 (permalink)  
Antiguo 28/12/2011, 21:23
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Obtener id de registro ingresado

Estoy con un sistema de tags, al terminarlo lo voy a subir al foro como aporte ya que no vi ninguno de este tipo, esta casi terminado, me falta esta ultima parte que no la estoy pudiendo realizar. Bien aqui la duda:

Tengo 3 tablas: tabla tags (guardo el idtag el tag), tabla noticias_tags ( guardo id noticia e id tag) y tabla noticias.

-El sistema funciona ingresando tags en mi tabla Tags (Si el tag que se quiere ingresar ya existe, no se ingresa nuevamente para que cada tag tenga un solo id). Hasta aqui perfecto y asi ingreso mis tags.

Código MySQL:
Ver original
  1. // inserto los tags de registro en la db
  2.        $palabra = $tags;
  3.        $array = explode(", ",$palabra);
  4.        foreach ($array as $tagsimple) {
  5.        $query = "INSERT INTO Tags (Tag) SELECT '$tagsimple' FROM (SELECT NULL) d WHERE NOT EXISTS (SELECT NULL FROM Tags WHERE Tag = '$tagsimple')";
  6.        $result = mysql_query($query, $dbConn) OR die(mysql_error()); }
  7.        die;

-Ahora en mi segunda tabla (tags_noticias) debería insertar el idTag y el idNoticia.
El idNoticia lo obtengo perfectamente. Lo que se me complica es obtener el idTag de la tabla Tags para insertarlo nuevamente con su correspondiente idNoticia.

-Ahora pasando en limpio, lo que debo hacer es, por ejemplo si yo ingreso el tag ventilador, me busque el idTag correspondiente a ventilador en la tabla Tags. Como podria obtener esto? Desde ya muchisimas gracias!
  #2 (permalink)  
Antiguo 28/12/2011, 23:28
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Obtener id de registro ingresado

Código SQL:
Ver original
  1. SELECT idtag FROM tags WHERE tag = 'ventilador'
???
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 29/12/2011, 10:01
Avatar de jolie_girl  
Fecha de Ingreso: agosto-2008
Ubicación: mexico
Mensajes: 346
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: Obtener id de registro ingresado

$id =LAST_INSERT_ID(); busca sobre esto, espero que eso sea
__________________
Solicito colaboradoras para proyecto social media largo plazo. Manda mp
  #4 (permalink)  
Antiguo 29/12/2011, 10:07
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Obtener id de registro ingresado

Mmh no.. ya me lo imagine como debe ser pero no me sale.
Supongo que para ingresar el idtag, lo debo hacer con un foreach y en cada pasada insertar el idtag junto a el idnoticia.
Pero antes de esto debo compararo, si yo ingrese los tags, manzana y banana, necesito que busque en la tabla 1 los registros que contengan banana y manzana y devolverme el id de los mismos en un vector para luego ingresarlos en mi tabla2... alguna sugerencia?
  #5 (permalink)  
Antiguo 29/12/2011, 10:11
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Obtener id de registro ingresado

jolie_girl, no vi tu mensaje, estaba respondiendo y luego lo vi.
Bien.. esa funcion no me sirve, porque como dije en el post, a la hora de ingresar tags en mi tabla1 (Tags) no siempre se ingresan tags, es decir, si el tag ya existe en la db, este será ignorado y no sera ingresado para evitar que un tag este repetido en mi db. Por lo tanto la unica forma sería que cuando un user ingresa los tags, los busque en la tabla tags y me devuelva el id de ese tag ingresado..
  #6 (permalink)  
Antiguo 29/12/2011, 10:22
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Obtener id de registro ingresado

Entonces?

cual era la pregunta? XD

bueno igual ya lo solucionaste
  #7 (permalink)  
Antiguo 29/12/2011, 10:36
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Obtener id de registro ingresado

La pregunta seria como compararlo y obtener el id..
Osea el sistema trabaja ingresando datos en 2 tablas a la vez mediante un input y separados por comas. Primero ingresa los tags en la tabla tags, generando un idTag y guardando la palabra "manzana" o la que se haya ingresado, y evitando repeticiones. Ahora en la tabla2 necesito saber e ingresar el id de manzana que ya esta en la tabla1, es aqui donde estoy trabado...
  #8 (permalink)  
Antiguo 29/12/2011, 10:41
 
Fecha de Ingreso: agosto-2011
Ubicación: Viña del Mar, Chile
Mensajes: 311
Antigüedad: 12 años, 7 meses
Puntos: 50
Respuesta: Obtener id de registro ingresado

Para eso necesitas lo que te indicaban arriba lo de MySQL LAST_INSERT_ID()...revisa esto con insert_id

http://php.net/manual/es/function.mysql-insert-id.php

Saludos
__________________
He aprendido mucho y sigo aprendiendo cada día aquí...así que ayudo cuando puedo para disminuir mi deuda XD..
mi hobby
  #9 (permalink)  
Antiguo 29/12/2011, 10:50
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Obtener id de registro ingresado

Repito, no me sirve el mysql_insert_id. Porque como dije, no siempre se ingresan tags nuevos. Es decir, si el tag que esta ingresando el usuario ya esta ingresado en mi tabla de tags, no se ingresara nuevamente, para evitar repeticiones y tener asi un solo idTag por cada palabra. Ejemplo: Si el tag aviones tiene como idTag valor 1, y luego se ingresaran 200 tags nuevos, y viene otro usuario e ingresa en una noticia el tag aviones, no se generará un nuevo id para aviones, ya que deberia tomar el idTag 1. me explico? Por eso pregunto, hay forma de comparar el tag ingresado, buscarlo en mi tabla de tags comparando las palabras y obtener el idTag correspondiente?
  #10 (permalink)  
Antiguo 29/12/2011, 11:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener id de registro ingresado

Me podrías explicar qué es lo que hacen estos SELECT NULL:
Código MySQL:
Ver original
  1. INSERT INTO Tags (Tag)
  2. SELECT '$tagsimple'
  3.      (SELECT NULL
  4.      FROM Tags
  5.       WHERE Tag = '$tagsimple')
En todos los años que hace que trabajo con MySQL es la primera vez que veo algo así.
¿Cuál es la meta de hacer un FROM (NULL)? Porque ese es el resultado real...

Por otro lado, y volviendo a tu primer post:
Cita:
-Ahora en mi segunda tabla (tags_noticias) debería insertar el idTag y el idNoticia.
El idNoticia lo obtengo perfectamente. Lo que se me complica es obtener el idTag de la tabla Tags para insertarlo nuevamente con su correspondiente idNoticia.
Por el ejemplo que pones en ese post, el idTag debería ser autoincremental, ya que no lo estás poniendo como columna del INSERT ni como dato del subsiguiente SELECT. El tag, por su lado, por lo que parece es un conjunto de textos separados por comas.
Tengo la impresión de que hay algún error en el diseño de tu esquema.
¿Podrías explicar un poco mejor cómo son las tablas y cómo deben quedar los datos en ellas?
Cita:
Repito, no me sirve el mysql_insert_id. Porque como dije, no siempre se ingresan tags nuevos. Es decir, si el tag que esta ingresando el usuario ya esta ingresado en mi tabla de tags, no se ingresara nuevamente, para evitar repeticiones y tener asi un solo idTag por cada palabra. Ejemplo: Si el tag aviones tiene como idTag valor 1, y luego se ingresaran 200 tags nuevos, y viene otro usuario e ingresa en una noticia el tag aviones, no se generará un nuevo id para aviones, ya que deberia tomar el idTag 1. me explico? Por eso pregunto, hay forma de comparar el tag ingresado, buscarlo en mi tabla de tags comparando las palabras y obtener el idTag correspondiente?
No me termina de quedar claro si los tags son palabras únicas por registro, o son conjuntos de palabras en el mismo registro (campos multivaluados).
En el primer caso, no debería haber probelmas para crear una restricción en la tabla para evitarte tantas vueltas. Y averiguar si el tag existe sólo requiere búsquedas FULLTEXT (expresiones regulares).
En el segundo caso, a nivel de base de datos tienes un defecto grave, difícil de resolver sin modificarla. Y en ese caso, la búsqueda se complica, porque una misma expresión puede aparecer en diferentes tags sin necesariamente ser repetciones.

Explicame un poco mejor cómo manejas a nivel de datos los tags.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 29/12/2011, 12:23
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Obtener id de registro ingresado

No hay nada multivaluado.. mira lo tengo asi:
Tengo un sistema de noticias al cual necesito agregarle tags. Para ello hice una relacion de muchos a muchos, siguiendo los consejos de otros posts en este foro.
Para ello cree la tabla tags (contiene tags e idTags) y la tabla tags_noticias (contiene idTag e idNoticia, para saber que tag corresponde a que noticia)

Cuando un usuario agrega una noticia mediante un panel de administracion, tambien agrega los tags de la misma mediante un input separando las palabras por comas y un espacio. Luego mediante un foreach y usando la funcion explode separo el string y lo convierto en un vector, y en cada pasada que hace el foreach ejecuto la query, guardando asi en cada pasado un nuevo registro con un nuevo tag. Aqui solamente tiene la clausula de que, si el tag que estamos ingresando ya existe, no ingresarlo nuevamente en nuestra tabla tags. Este es el paso uno. Esta parte esta funcionando perfectamente y asi ha quedado:

TABLA TAGS
idTag | Tag
1 | manzana
2 | banana
3 | durazno
4 | melon

Ahora el paso 2 sería ingresar inmediatamente al paso anterir los idTags y el idNoticia en la tabla tags_noticias. El idNoticia lo obtengo con mysql_insert_id. Ahora lo que pretendo es obtener en mi tabla tags_noticias los id de los tag que escribio el usuario en el panel cuando inserto la noticia. (pero recordemos que si esta repetido el tag, este no se ingresa). Deberia quedar de esta forma:

TABLA TAGS_NOTICIAS
idTagNot | idTag | idNoticia
1 | 2 | 88
2 | 1 | 88
3 | 4 | 88
  #12 (permalink)  
Antiguo 29/12/2011, 13:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener id de registro ingresado

Bien. Ahora se entiende mejor.
Tu problema es que quieres recuperar los idTag luego de haberlos insertado, y no puedes a priori determinar cuáles inserciones fueron exitosas y cuáles no.
En realidad la solución es simple: El ID generado es accesible dentro del foreach(), por lo que dentro de ese loop es donde debes leer el mysql_insert_id() y luego almacenarlo en algún vector, o simplemente insertarlo a continuación.
Básicamente la idea es que las dos inserciones se realicen en el mismo foreach(), pero la segudna de ellas sea condicional a si mysql_insert_id() devolvió un valor mayor a cero.
Esa sería mas o menos la idea.

Esta sería mi idea, para hacerlo mas o menos simple.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 29/12/2011, 15:03
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Obtener id de registro ingresado

Gracias, me abriste un poco la mente con este mensaje, ahora estoy tratando de hacerlo todo en un solo foreach. Me parece que lo voy a hacer con un select dentro de un insert comparando la palabra y ver si de esa manera me puede devolver el idTag... mas tarde te cuento como fue..
De la forma que dices.. el mysql_insert_id no recuperaria solo los id de los que se insertaron, es decir de los que aun no estaban en la tabla tags?
  #14 (permalink)  
Antiguo 29/12/2011, 18:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener id de registro ingresado

mysql_insert_id() accede a los mismos recursos de la función LAST_INSERT_ID() de MySQL, y esta función sólo puede devolver el último id autonicremental generado por la sentencia INSERT que se acaba de ejecutar. Usado en cualquier otro contexto devuelve cero (0), lo mismo que LAST_INSERT_ID().
En la medida que invoques la función dentro del foreach(), no deberías tener problemas, porque cada vez que la llames sólo devolverá un numero mayor a cero si el INSERT fue exitoso, y en ningún otro caso.
La idea sería:
Código PHP:
Ver original
  1. $palabra = $tags;
  2.        $array = explode(", ",$palabra);
  3.        foreach ($array as $tagsimple)
  4.               {
  5.               $query = "INSERT INTO Tags (Tag) ";
  6.               $query .= "SELECT '$tagsimple' ";
  7.               $query .= "FROM (SELECT NULL) d ";
  8.               $query .= "WHERE NOT EXISTS ";
  9.               $query .= "(SELECT NULL FROM Tags WHERE Tag = '$tagsimple')";
  10.               $result = mysql_query($query, $dbConn) or die(mysql_error());
  11.               if($result)
  12.                             {$nuevoId = mysql_insert_id();
  13.                             $query2 = "INSERT INTO tag_noticias(IdNoticia, IdTag) ";
  14.                             $query2 .="VALUES(".$IdNoticia.",".$nuevoId.")");
  15.                             $result2 = mysql_query($query2, $dbConn) or die(mysql_error());
  16.                             }
  17.               }

Aún hay un tema pendiente, y es qué es exactamente lo que se supone que hace esta parte de tu INSERT, que yo jamás he visto escribir en todos los años que manejo MySQL:
Código MySQL:
Ver original
  1. SELECT '$tagsimple'
  2.      (SELECT NULL
  3.      FROM Tags
  4.       WHERE Tag = '$tagsimple')
Yo personalmente estoy suponiendo que sea lo que sea que esperas, no está bien escrita, porque las operaciones con NULL siempre dan NULL, por lo que no veo claramente qué es lo que debe lograr esa consulta.
¿Podrías aclararme eso?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 29/12/2011, 22:34
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Obtener id de registro ingresado

gnzsoloyo, agradezco mucho tu ayuda pero no me has entendido del todo. Mira, funciona perfecto si el tag que ingresamos no esta en la tabla tags ya que de esta manera genera un id autoincrement nuevo y lo guarda en mi variable con mysql_insert_id y luego lo ingresa en mi tabla tags_noticias. Pero como dije antes, que pasa si cuando alguien ingresa el tag manzana, este ya esta en mi tabla tags, entonces es ignorada la petición de agregar un nuevo id, por lo tanto mysql_insert_id es 0, lo cual esta mal. El mysql_insert_id sirve para obtener el id del ultimo registro ingresado, pero aqui no siempre se ingresa un nuevo registro, ya que si un tag se repite, no se ingresa nuevamente. Me comprendes? es por eso que estoy trabado..
Con respecto a lo del codigo, esta diseñado para que, si uno esta tratando de ingresar un tag que ya existe en la base de datos en el campo Tag, este es ignorado y no lo ingresa. Solo ingresa los tags de la variable $tagsimple que no existan en la db. Puede ser que no este bien escrito, ese codigo lo logre con ayuda de otra persona en este foro que me dijo que se hacia de esa manera..
  #16 (permalink)  
Antiguo 30/12/2011, 03:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener id de registro ingresado

Yo estoy entendiendo perfectamente, pero tu no estás siguiendo la lógica que te propongo en ese código.
Cita:
Pero como dije antes, que pasa si cuando alguien ingresa el tag manzana, este ya esta en mi tabla tags, entonces es ignorada la petición de agregar un nuevo id, por lo tanto mysql_insert_id es 0, lo cual esta mal.
Si te fijas con cuidado, en el código propuesto, si el primer INSERT falla, el resultado es cero y $result devuelve FALSE, por lo que el segundo INSERT no se realiza.
Un result de mysql_query() no sólo es un resultado a nivel de consulta, es TRUE o FALSE si la operación es exitosa. SI falla es FALSE.
En esencia,el If() que te pongo es igual a poner if($nuevoId > 0).
Por otro lado, es muchísimo más simple que si el campo "Tag" de la tabla "tags" va a tener valores únicos, lo definas como UNIQUE. Entonces simplemente la base no te dejará ingresar valores repetidos, y no necesitarás validaciones extrañas.
Cita:
Con respecto a lo del codigo, esta diseñado para que, si uno esta tratando de ingresar un tag que ya existe en la base de datos en el campo Tag, este es ignorado y no lo ingresa. Solo ingresa los tags de la variable $tagsimple que no existan en la db. Puede ser que no este bien escrito, ese codigo lo logre con ayuda de otra persona en este foro que me dijo que se hacia de esa manera..
No sólo no está bien escrito. Ignora reglas básicas como que no puedes consultar e insertar en la tabla al mismo tiempo en la misma sentencia. MySQL no te lo permite.
Por otro lado, como ya te dije, hay formas mucho más simples para asegurar la unicidad de valores, y que no pasan por una consulta. Quien te pasó ese código no conoce mucho de bases de datos.

Sugerencias:
1) Modifica esa tabla y crea un índice UNIQUE sobre la columna "Tag".
2) Elimina toda esa sentencia basura y escribe el insert como:
Código MySQL:
Ver original
  1. INSERT IGNORE INTO Tags (Tag) ...
El IGNORE hará que las inserciones fallidas no generen notificaciones de error. Simplemente no realizará la inserción y devolverá cero como ID.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 30/12/2011 a las 05:40
  #17 (permalink)  
Antiguo 30/12/2011, 11:18
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Obtener id de registro ingresado

Bien.. he cambiado de la tabla Tags el campo tag a unique key, he modificado como me dijiste y quedo de lujo. Tambien me ingresa en la segunda tabla, tags_noticias el id del tag, pero esto solo ocurre cuando ingresamos un registro nuevo en la tabla Tags. Sigo con problemas para extraer el idTag cuando se ha ignorado el insert por estar repetido el tag, esto es lo que te trato de decir. Mira hasta ahora tengo esto, solo falla a la hora de hacer el insert de un tag ignorado, luego del else:

Código MySQL:
Ver original
  1. // inserto los tags de registro en la db  
  2.        $palabra = $tags;
  3.        $array = explode(", ",$palabra);
  4.        foreach ($array as $tagsimple) {
  5.        $query = "INSERT IGNORE INTO Tags (Tag) VALUES ('$tagsimple')";
  6.        $result = mysql_query($query, $dbConn) or die(mysql_error());
  7.        if($result > 0)
  8.        {
  9.        $idTag = mysql_insert_id();
  10.        $query2 = "INSERT INTO tags_noticias (idTag, idNoticia) VALUES ('$idTag','$idNoticia')";
  11.        $result2 = mysql_query($query2, $dbConn) or die(mysql_error());
  12.                             }
  13.                             else
  14.                             {
  15.        $query3 = "INSERT INTO tags_noticias (idTag) SELECT idTag FROM Tags WHERE Tag='$tagsimple'";
  16.        $result3 = mysql_query($query3, $dbConn) or die(mysql_error());
  17.                     }
  18.                     }
  19.        header( 'Location: prueba.php?add=true' );
  20.        die;
  21.        }
  22.        }
  #18 (permalink)  
Antiguo 30/12/2011, 13:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener id de registro ingresado

Bien, tu problema ahora es cómo obtener los idTags que ya existían. Eso es otra cosa, pero que tiene muchas formas diferentes de resolverlo, y en todos los casos se requiere hacer una consulta, porque no hay forma de saber en una misma operación cuál es el id de un o que ya existe al fracasar el INSERT.
Si quieres una sugerencia, considerando que a medida que se vayan ingresando registros, será más probable que sean más los insert que fallen que lo que se hagan, yo realizaría una consulta antes de realizar el primer INSERT y listo.

Mas o menos así:

Código PHP:
Ver original
  1. <?php
  2. $palabra = $tags;
  3.        $array = explode(", ",$palabra);
  4.        foreach ($array as $tagsimple)
  5.            {
  6.            $nuevoId = 0;
  7.            $verificar = "SELECT idTag ";
  8.            $verificar = "FROM Tags ";
  9.            $verificar .= "WHERE Tag = '$tagsimple')";
  10.            $resultVerif = mysql_query(verificar, $dbConn) or die(mysql_error());
  11. //         Verifica si ya existe y si es así, recupera el idTag.
  12.            if($resultVerif){
  13.                $rs = mysql_fetch_assoc($verificar);
  14.                $nuevoId = $rs["idTag"];
  15.                }
  16.            else{
  17. //             Si el idTag no existe, lo inserta.
  18.                $query = "INSERT INTO Tags (Tag) ";
  19.                $query .= "VALUES('$tagsimple')";
  20.                $result = mysql_query($query, $dbConn) or die(mysql_error());
  21.                if($result)
  22. //                   Si lo pudo insertar, lo recupera.
  23.                     {$nuevoId = mysql_insert_id();}
  24.                else{
  25. //                  Acá va alguna condición según haya fracasado el INSERT
  26. //                  por alguna otra razon. En este punto no puede continuar porque
  27. //                  ni es nuevo (no ingresó) ni existe desde antes, porque no se lo
  28. //                  encontró.
  29.                    }
  30.                 }
  31. //          Continúa la ejecución normal, si el valor de nuevoId es mayor a cero.
  32.             $query2 = "INSERT INTO tag_noticias(IdNoticia, IdTag) ";
  33.             $query2 .= "VALUES(".$IdNoticia.",".$nuevoId.")";
  34.             $result2 = mysql_query($query2, $dbConn) or die(mysql_error());
  35.            }
  36. ?>
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 31/12/2011, 13:30
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Obtener id de registro ingresado

Estube probando con el codigo que me pasaste, pero me tira error en $rs = mysql_fetch_assoc($verificar);, por lo que veo por alguna razon no esta obteniendo ningun dato y la variable esta vacia e inserta 0 en la db.

El error es el siguiente:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/prueba.php

Tambien probe con el codigo anterior que teniamos, solamente insertando en el codigo la parte que faltaba de los insert ignorados, pero tampoco hubo caso, ingresa 0, pero sin tirarme error. La verdad nose que es lo que puede estar pasando, ya que probe varias formas de hacer el select del idTag, pero no puedo obtenerlo..
  #20 (permalink)  
Antiguo 31/12/2011, 13:52
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Obtener id de registro ingresado

Lee la línea 10
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies

Última edición por Sourcegeek; 31/12/2011 a las 17:19
  #21 (permalink)  
Antiguo 31/12/2011, 17:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener id de registro ingresado

Cita:
Estube probando con el codigo que me pasaste, pero me tira error en $rs = mysql_fetch_assoc($verificar);, por lo que veo por alguna razon no esta obteniendo ningun dato y la variable esta vacia e inserta 0 en la db.
Eso pasa cuando copias y pegas código sin verificarlo o sin analizarlo con cuidado.
Si lo hubieses hecho, habrías notado que esto:
Código PHP:
Ver original
  1. $rs = mysql_fetch_assoc($verificar);
lo puse mal, que lo que tiene que ir es:
Código PHP:
Ver original
  1. $rs = mysql_fetch_assoc($resultVerif);

Copiar y pegar sin verificar, nunca da bien resultado...

Primera regla de los foros: Que posteemos un código para aplicar en un entorno ajeno, no garantiza que el código esté correctamente escrito.
Verifica siempre el código antes de ejecutarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 31/12/2011, 17:19
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Obtener id de registro ingresado

No era sólo eso

Cita:
Iniciado por Sourcegeek Ver Mensaje
Lee la línea 10
Código PHP:
Ver original
  1. $resultVerif = mysql_query(verificar, $dbConn) or die(mysql_error());
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #23 (permalink)  
Antiguo 31/12/2011, 22:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener id de registro ingresado



Tienes razón, el error es: (secreto) ...

Editado para que busques.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 01/01/2012 a las 07:54
  #24 (permalink)  
Antiguo 31/12/2011, 22:38
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Obtener id de registro ingresado

Shhhhh. No digas! Veamos si él puede solucionarlo. Le toca hacer algo, ¿no?. Edita el mensaje
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #25 (permalink)  
Antiguo 01/01/2012, 04:19
 
Fecha de Ingreso: julio-2010
Mensajes: 197
Antigüedad: 13 años, 9 meses
Puntos: 32
Respuesta: Obtener id de registro ingresado

supondre que lo haces cuando insertas el tag seguido quieres insertar la noticia entonces prueba este codigo

$rs = mysql_query("SELECT MAX(IDtags) AS id FROM 'tablatags'");
if ($row = mysql_fetch_row($rs)) { $id = trim($row[0]); }

eso sacara el ultimo ID que insertaste en las tags y lo podras usar como enlace para las noticias no se si es eso lo que quieres
  #26 (permalink)  
Antiguo 01/01/2012, 06:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener id de registro ingresado

Cita:
Iniciado por jmabreu Ver Mensaje
supondre que lo haces cuando insertas el tag seguido quieres insertar la noticia entonces prueba este codigo

$rs = mysql_query("SELECT MAX(IDtags) AS id FROM 'tablatags'");
if ($row = mysql_fetch_row($rs)) { $id = trim($row[0]); }

eso sacara el ultimo ID que insertaste en las tags y lo podras usar como enlace para las noticias no se si es eso lo que quieres
Eso funcionaría sólo en el contexto de un único usuario. SI hubiese concurrencia no sirve.
Además, ¿Para qué hacer una consulta, cuando ya una función propia de PHP te de vuelve la información precisa de la operación que se acaba de realizar (mysql_insert_id())?
Por cuestiones de performance general, es conveniente no hacer consultas innecesarias.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #27 (permalink)  
Antiguo 01/01/2012, 06:29
 
Fecha de Ingreso: julio-2010
Mensajes: 197
Antigüedad: 13 años, 9 meses
Puntos: 32
Respuesta: Obtener id de registro ingresado

hay algo que no entiendo del tema entonces las el id tags se repite es lo que entendi
  #28 (permalink)  
Antiguo 01/01/2012, 07:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener id de registro ingresado

¿Qué parte exactamente es lo que no entiendes?
Si es por la tabla "tags_noticias", eso es absolutamente necesario, porque representa una relación N:N entre "Tags" y "Noticias" (una noticia puede relacionarse con muchos tags diferentes, y cada tag puede relacionarse con muchas noticias distintas). Es una necesidad del modelo de bases de datos relacionales.
Lo que no puede repetirse en esa tabla es un mismo par de valores (idNoticia, idTag), porque eso representa una única relación específica.

Para profundizar este tema deberías preguntar en el foro de Bases de Datos, ya no se trata de asuntos de PHP, sino de Bases de Datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #29 (permalink)  
Antiguo 01/01/2012, 11:45
 
Fecha de Ingreso: julio-2010
Mensajes: 197
Antigüedad: 13 años, 9 meses
Puntos: 32
Respuesta: Obtener id de registro ingresado

gracias ya lo mire y lo entendi

Etiquetas: comparacion, insert, registro, select, 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




La zona horaria es GMT -6. Ahora son las 15:41.