Foros del Web » Programando para Internet » PHP »

Problemas con mysql, llamar maxima id

Estas en el tema de Problemas con mysql, llamar maxima id en el foro de PHP en Foros del Web. hola a todos, bueno mi problema es que necesito que al enviar un formulario se cree un archivo en una carpeta de mi servidor con ...
  #1 (permalink)  
Antiguo 29/01/2009, 13:40
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Problemas con mysql, llamar maxima id

hola a todos, bueno mi problema es que necesito que al enviar un formulario se cree un archivo en una carpeta de mi servidor con los datos que se colocaron en el formulario hasta ahi todo bien, ahora el problema es que los datos que se mostraran son de diferentes id, asi que leyendo por internet me dieron esto: MAX (id) yo lo utilice en mi query asi:

$query="(SELECT * FROM $tablename WHERE id=MAX(id))";

ahora cuando intento abrir la pagina me da un error en mysql_fetch_array(): algo asi:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

le puse un mysql_error() para ver el error y me dice esto: Invalid use of group function

mi pregunta, como hago para solucionar esos errores, o si no como hago para que al crear un archivo nuevo cada uno se coloque una id maxima para diferenciarlos, espero que me alla explicado bien, yo soy muy novato en este asunto asi que espero que me puedan ayudar
  #2 (permalink)  
Antiguo 29/01/2009, 14:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con mysql, llamar maxima id

Mmm prueba esto:
Código SQL:
Ver original
  1. SELECT * FROM tabla WHERE id=LAST_INSERT_ID()

Saludos
  #3 (permalink)  
Antiguo 29/01/2009, 15:03
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problemas con mysql, llamar maxima id

ok eso funciono para quitar el error pero ahora no salen los datos de la base de datos en donde deberian salir dejo aqui el codigo:

Código:
<?php
   $dbname="bd";
   $tablename="tabla";
   $query="SELECT * FROM $tablename WHERE id=LAST_INSERT_ID()";
   $result=mysql_db_query ($dbname, $query, $link);
   while ($row = mysql_fetch_array ($result))
   {
echo "
<table border='1'>
<tr>
<td><img src=\"".$row[8]."\" width='100' heitgh='400' /></td>
<td><table>
<tr>
<td><strong>Titulo:</strong> .$row[1]</td>
</tr>
<tr>
<td><strong>Categoria:</strong> .$row[2]</td>
</tr>
<tr>
<td><strong>Genero:</strong> .$row[3]</td>
</tr>
<tr>
<td><strong>Tamaño:</strong> .$row[4]</td>
</tr>
<tr>
<td><strong>Formato:</strong> .$row[5]</td>
</tr>
<tr>
<td><strong>Año:</strong> .$row[6]</td>
</tr>
<p></p>
</table></td>
<p></p>
<strong>Sinopsis:</strong>
<table borde='1'>
<tr>
<td>$row[7]</td>
</tr>
</table>
<tr>";
no sale nada, y si le coloco al final de ($row = mysql_fetch_array ($result)) un ; sale pero no salen los datos, espero que me puenda ayudar
  #4 (permalink)  
Antiguo 29/01/2009, 15:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con mysql, llamar maxima id

Tema trasladado a PHP.

http://www.forosdelweb.com/f21/funci...-datos-413499/
  #5 (permalink)  
Antiguo 29/01/2009, 15:54
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problemas con mysql, llamar maxima id

Cita:
Iniciado por dragoxx Ver Mensaje
... ahora el problema es que los datos que se mostraran son de diferentes id, ...
... le puse un mysql_error() para ver el error y me dice esto: Invalid use of group function ...
No se a que te refieres con 'mostraran de diferentes id', pero si lo que necesitas es el último registro insertado (lo que se entiende por MAX(id)) entonces ... una función de agregado no se puede usar en la clausula where. (Solamente en la clausula having).

Cita:
Iniciado por GatorV Ver Mensaje
...
Código SQL:
Ver original
  1. SELECT * FROM tabla WHERE id=LAST_INSERT_ID()
...
Aunque está bien usar LAST_INSERT_ID() va a depender de varios factores, principalmente en que conexión se realizó el insert y en cual conexión se obtiene el LAST_INSERT_ID(), principalmente cuando hay mucha concurrencia.

Cita:
Iniciado por dragoxx Ver Mensaje
Código:
<?php
   $query="SELECT * FROM $tablename ORDER BY id DESC LIMIT 1";
Posiblemente usando el orden y el limite.

Saludos,
  #6 (permalink)  
Antiguo 29/01/2009, 16:50
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problemas con mysql, llamar maxima id

bien eso me funciono bien ahora si muestra todo, pero me surgio una duda, yo necesito que al enviar el formulario de datos se cree ese archivo con los datos que agregaron entonces necesitaria como dije que la id cambiara, ahora si yo coloco eso entonces cada vez que se coloquen datos nuevos todos los archivos van a cambiar y no quiero eso si no que los archivos se creen con los datos y se queden con la id de los datos, espero haberme explicado bien
  #7 (permalink)  
Antiguo 29/01/2009, 17:45
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problemas con mysql, llamar maxima id

Cita:
Iniciado por dragoxx Ver Mensaje
... yo necesito que al enviar el formulario de datos se cree ese archivo con los datos que agregaron ...
¿Un archivo? Voy a suponer que estas hablando de un 'registro', 'dupla', 'fila', etc., dentro de una base de datos.

Cita:
Iniciado por dragoxx Ver Mensaje
... entonces necesitaria como dije que la id cambiara, ...
Para que cambie la ID cada vez que insertas un registro en una base de datos, se utiliza el tipo de datos 'integer' y se le asigna la clausula 'auto increment', de esa forma cada vez que insertas un registro, la base de datos automáticamente le asigna un número consecutivo.

(Se puede hacer con programación, pero tiene que estar muy bien planeado o vas a tener problemas de concurrencia, como por ejemplo que el usuario A intente insertar un número consecutivo que ya existe por que lo acaba de insertar el usuario B).

Cita:
Iniciado por dragoxx Ver Mensaje
... ahora si yo coloco eso entonces cada vez que se coloquen datos nuevos todos los archivos van a cambiar y no quiero eso si no que los archivos se creen con los datos y se queden con la id de los datos, espero haberme explicado bien ...
Esa parte no la comprendo completamente
--- aún después de leerla varias veces ---.

Pero posiblemente, cuando insertas un registro en una base de datos, no le asignas el mismo ID a todos los registros. Por ejemplo:

ID -- NOMBRE

1 -- Andres
2 -- Pablo
3 -- Jimena

Cada registro tiene su propio ID, y la instrucción que usé con ORDER BY y LIMIT te busca el último que exista, en este ejemplo el número 3. Si deseas solamente el registro con ID igual a 2 entonces usas la clausula WHERE id = 2.

Ahora que también exista la instrucción UPDATE, que no inserta un nuevo registro, sino actualiza uno que ya exista, en ese caso no cambia el ID sino solamente cambia el Nombre del ejemplo.

Saludos,
  #8 (permalink)  
Antiguo 29/01/2009, 19:42
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problemas con mysql, llamar maxima id

ok voy a replantear lo que quiero hacer y mi problema, yo necesito que cada vez que alguien envie un formulario se cree un archivo php en un directorio y se escriba los datos que colocaron en el formulario, eso planeo yo o creo yo que se haria con fopen y fwrite, pero mi problema es que al insertar datos en una base de datos se va a ir incrimentando la id, entonces para que en el archivo que se va a crear aparezcan los datos concretos de la id que se acaba de insertar si hago eso habria un problema que cuando se inserte otra cosa se va a leer la ultima id y ahi se arruina los demas ya que se van a cambiar a la ultima id y yo necesito que se queden cada uno con su id correspondiente.
es como por ejemplo una forma de que los usuarios coloquen libros y al crearlos si cree una pagina con informacion que acaba de intrucir, algo asi necesito, espero haberme explicado
  #9 (permalink)  
Antiguo 30/01/2009, 00:02
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problemas con mysql, llamar maxima id

Hola,

Ok, vas a crear un archivo en el disco por cada registro de la base de datos. No me puedo imaginar ningún motivo por el cual quieras realizar ese procedimiento de esa forma, pero igualmente me imagino que tendrás tus razones. No sé que puede significar el título 'llamar máxima id' en este contexto que planteas.

Cita:
Iniciado por dragoxx Ver Mensaje
... yo necesito que se queden cada uno con su id correspondiente. ...
Cita:
Iniciado por HackmanC Ver Mensaje
... Si deseas solamente el registro con ID igual a 2 entonces usas la clausula WHERE id = 2. ...
Código:
...
   $query = "SELECT * FROM $tablename WHERE ID = 2";
Espero haber sido de alguna ayuda,
Saludos.

ps:

Normalmente se usa una sola página PHP con una plantilla y se cambia la información pertinente extrayendola de la base de datos; pero supongo que eso ya lo sabes.
  #10 (permalink)  
Antiguo 30/01/2009, 01:16
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problemas con mysql, llamar maxima id

si, yo entiendo lode WHERE id=2, pero eso lo necesito automatico, que se efectue solo, que cuando se envie un formulario se almacenen los datos y en la base de datos y al mismo tiempo con esos datos se cree un archivo en un directorio que yo voy a especificar, es como un usuario agrega un libro como dije anteriormente coloca los datos y al darle enviar se crea automaticamente la pagina con toda la informacion que coloco el usuario, por ejemplo:
un usuario agrega harry potter como libro da todos los datos y se envia un formulario se crearia los datos en la base de datos con id=1, ahora otro usuario manda otro formulario con por ejemplo narnia agrega los datos y se crea otros datos en la base que seria id=2, asi sucesivamente, entonces cada vez que se guarden los datos se cree automaticamente un archivo que especifique los datos que el dio para crearse una pagina con eso

no lo necesito manual, osea no estar cambiando yo que si id=1 id =2 no, q la id cambie a la ultima que se coloque, osea que si la id es 1 al crear otro archivo la id pase en el otro archivo a 2 pero en el primero se quede en 1, eso pero automatico

espero haber sido claro
  #11 (permalink)  
Antiguo 30/01/2009, 05:51
Avatar de vicram10  
Fecha de Ingreso: enero-2009
Ubicación: Asuncion
Mensajes: 326
Antigüedad: 15 años, 3 meses
Puntos: 27
Respuesta: Problemas con mysql, llamar maxima id

yo generalmente cuando desarrollo procedimientos almacenados en SQL

utilizo de la siguiente forma:

Ejemplo: tabla_board del SMF

Código PHP:
select max(id_boardfrom smf_boards 
y el valor resultante seria el maximo valor de esa tabla.

luego es cuestion de asignarle a ese valor maximo una variable

Código PHP:
$valor_maximo //valor que surgio de la consulta 
y a ese valor le aumentas 1

Código PHP:
$valor_nuevo $valor_maximo 
y si por si acaso el valor que trae la consulta es vacio (en este caso es por que ingresara el primer registro )

le expones dentro de una clausula if

Código PHP:
if ($valor_nuevo == )
{
    
$valor_nuevo 1;

bueno esa es la idea.

salu2

espero te sirva
  #12 (permalink)  
Antiguo 30/01/2009, 12:20
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problemas con mysql, llamar maxima id

si esa es buena respuesta, pero hay algo que no saldria pienso yo, si lo que se hace es sumarle +1 a la variable entonces cuando se cree otro archivo sera lo mismo se le sumara +1 tambien pero el primero no quedaria en 3? osea por que es el valor maximo +1 si el valor maximo se trasforma en 2 + 1 = 3 y la id 3 para ese momento no existiria, si me equivoco me gustaria que me corrijieran y me dijeran como saldria entonces.
  #13 (permalink)  
Antiguo 30/01/2009, 13:40
Avatar de vicram10  
Fecha de Ingreso: enero-2009
Ubicación: Asuncion
Mensajes: 326
Antigüedad: 15 años, 3 meses
Puntos: 27
Respuesta: Problemas con mysql, llamar maxima id

Cita:
pero hay algo que no saldria pienso yo, si lo que se hace es sumarle +1 a la variable entonces cuando se cree otro archivo sera lo mismo se le sumara +1 tambien pero el primero no quedaria en 3?
si lo que dices es que

Cita:
1 ---- Pepe
2 ----- Mauro

Id max = 2
Id nuevo = 2+1 =3

1---- Pepe
3 ---- Mauro
3 ----- Antonio
Si te refieres a esto, no... si es otra cosa replantea tu pregunta a fin de entenderte mejor..

salu2

Última edición por vicram10; 30/01/2009 a las 13:47
  #14 (permalink)  
Antiguo 30/01/2009, 19:04
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problemas con mysql, llamar maxima id

osea me refiero a que si se envian por ejemplo 3 formularios se crearan 3 archivos pero como la variable es la id maxima + 1 entonces terminaria con id = 4 por ejemplo:

1.manuel
2.marcos
3.juan
asi envian los datos a la base de datos entonces en los archivos quedarian en 4 por que la maxima id es 3 y se la va a sumar 1 y ademas afectara a todos los archivos, necesito que sean idependientes, que se envie un formulario y el archivo que de con id=1 se envie otro y el archivo se cree con id=2 y se envie otro y el archivo quede con id=3 todo automatico
  #15 (permalink)  
Antiguo 30/01/2009, 22:23
Avatar de vicram10  
Fecha de Ingreso: enero-2009
Ubicación: Asuncion
Mensajes: 326
Antigüedad: 15 años, 3 meses
Puntos: 27
Respuesta: Problemas con mysql, llamar maxima id

y a eso me refiero, entendi tu forma de pensar, y tranquilo..

que esto lo unico que hace es "asignarle" su propio autonumerico para esa tabla

o sea cuando se guarde en la BD se guardara asi como tu lo planteas...

lo unico que hace esa consulta SQL es verificar cual es el ultimo valor para poder sumarle 1 a ese y obtener de esa manera un valor no duplicado (en pocas palabras asegurarte que el valor id nuevo que se cargue ya no este cargado )

salu2
  #16 (permalink)  
Antiguo 31/01/2009, 00:33
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problemas con mysql, llamar maxima id

Hola,

Ooops! Creo que ya comprendí ... el código debería ser algo así :

Código PHP:
<title>Example</title>
<?php
/*
>> script.sql
create database example; use example;
create table example (id integer auto_increment primary key, info varchar(250));
*/
if (isset($_POST['info']) && $_POST['info'] != "") {

    
$username 'root';
    
$password 'pass';

    
$connection mysql_connect("localhost"$username$password) or die();
    
$insert mysql_db_query("example""INSERT INTO example (info) VALUES ('{$_POST['info']}');"$connection);
    
$ultimo mysql_db_query("example""SELECT LAST_INSERT_ID();"$connection);
    
$id mysql_fetch_array($ultimo);
    
mysql_free_result($ultimo);
    
mysql_close($connection);

    
$f fopen("data/{$id[0]}.php""w") or die();
    
fwrite($f'
        <?php
        $connection = mysql_connect("localhost", "' 
$username '", "' $password '") or die();
        $resultado = mysql_db_query("example", "SELECT * FROM example WHERE id = ' 
$id[0] . ';", $connection);
        while($r = mysql_fetch_array($resultado)) {
          echo "{$r[0]}<br>{$r[1]}";
        }
        mysql_free_result($resultado);
        mysql_close($connection);
        ?>
        '
);
    
fclose($f);
}

?>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
  <textarea name="info" id="info" cols="45" rows="5"></textarea>
  <input type="submit" name="Submit" id="Submit" value="Enviar" />
</form>
</body>
Saludos,

Última edición por HackmanC; 31/01/2009 a las 01:16 Razón: Ooops !
  #17 (permalink)  
Antiguo 01/02/2009, 14:24
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problemas con mysql, llamar maxima id

siii, gracias eso funciona es lo que necesitaba, ahora tengo otro problema, en el archivo que se escribe en el echo tengo que tener asi:

Código:
 echo "
<table border='1'>
<tr>
<td><img src=\"".$r[8]."\" width='100' heitgh='400' /></td>
<td><table>
<tr>
<td><strong>Titulo:</strong> $r[1]</td>
</tr>
<tr>
<td><strong>Categoria:</strong> $r[2]</td>
</tr>
<tr>
<td><strong>Genero:</strong> $r[3]</td>
</tr>
<tr>
<td><strong>Tamaño:</strong> $r[4]</td>
</tr>
<tr>
<td><strong>Formato:</strong> $r[5]</td>
</tr>
<tr>
<td><strong>Año:</strong> $r[6]</td>
</tr>
<p></p>
</table></td>
<table border='1'>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
</table>
<table border='0'>
<span><strong>Sinopsis:</strong></span>
<table>
<table border='0'>
<tbody style='text-align: left;'>
<tr>
<td>$r[7]</td>
</tr>
</tbody>
</table>";
para que funcione lo que yo quiero ahora el problema esta en que cuendo entro me lanza este error: Parse error: syntax error, unexpected T_LNUMBER y dice que esta en la linea 34 que es esta:
<table border='1'>

intente cambiar las ' ' por " " y se vio bien me dejo entrar en el formulario se lleno y se envio perfecto ahora cuando abro el archivo q se creo me aparece el mismo error: Parse error: syntax error, unexpected T_LNUMBER, expecting ',' or ';' y dice que es en la linea 7 que es esta:
<table border="1">

como ven si coloco " " en el primero, el q se crea me da ese error y si no lo coloco si no que dejo ' ' el primero me da error, me gustaria saber como hacer para que los dos queden sin ningun error espero que me puedan ayudar y gracias de nuevo por todo
  #18 (permalink)  
Antiguo 01/02/2009, 15:48
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Mensaje Respuesta: Problemas con mysql, llamar maxima id

Hola,

La forma de escribir ' dentro de un String delimitado por ' es \' .
Tendrías que reemplazar todos los ' por \' dentro del String.

COMO: usar las comillas bien

Saludos,

ps:

Sigo insistiendo en que no le encuentro mucho sentido a todo esto .
¿Cual es el motivo por el cual quieres crear un archivo PHP por cada POST del formulario?
  #19 (permalink)  
Antiguo 01/02/2009, 16:58
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problemas con mysql, llamar maxima id

si funciono, gracias
para responder a tu pregunta, estoy trabajando con un programa q se llama joomla 1.5 que te da un prediseño de una pagina php pero al crear articulos este no permite php asi que hay q instalarle un componente para que lea archivos php de afuera asi que necesito ese sistema para poder crear todo mejor.
en el codigo que me diste como seria para que despues de darle a enviar me mande a otra pagina y en esa pagina me diga la id de la tabla que se acaba de crear?, y de nuevo gracias a todos los que respondieron me ayudaron a enterder mcuhas cosas
  #20 (permalink)  
Antiguo 01/02/2009, 20:59
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problemas con mysql, llamar maxima id

Cita:
Iniciado por dragoxx Ver Mensaje
... para responder a tu pregunta, estoy trabajando con un programa q se llama joomla 1.5 que te da un prediseño de una pagina php ...
Ohhh ... bueno, pensé que estabas haciendo algo que se podía solucionar de otra forma más simple. Joomla, lo ví, lo instalé, me gustó y lo borré, así que no sabría si hay una forma más simple.

Cita:
Iniciado por dragoxx Ver Mensaje
... en el codigo que me diste como seria para que despues de darle a enviar me mande a otra pagina y en esa pagina me diga la id de la tabla que se acaba de crear?, ...
Tres opciones que se me ocurren en este instante :

1. Escribir el ID debajo del formulario.

2. Separa el código PHP del HTML en 2 páginas diferentes, el HTML haría el POST hacia la página PHP y en esa página después de insertar y crear el documento, muestras el ID. Por último pones un Link que diga 'regresar'.

3. Guarda el ID en una sesión y usar un Redirect (demasiado complicado y tienes que pensarlo bien, para que no se genere ni un solo byte de datos antes de hacer el Redirect o usar buffers ob_xxx; de otra forma genera error).

Saludos,
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 19:35.