Hilo oficial del PHP

15, 6, 7, 8, 9
Gooler escribió:Declaras $a, $b y $c locales al while así que luego al usarlas en los campos hidden no tienen ningún valor. Decláraras antes del while. En cualquier caso, no sé para qué haces eso, ya que teniendo el idS te puedes traer los demás datos en la consulta que procese al formulario...

Uuummm... me he quedado casi igual [+risas] [tomaaa] $a, $b y $c sí que toman un valor, los de la última entrada en la tabla de la BD (yo tengo una lista en una tabla con tres campos: id, localidad y código postal). Y al hacer el submit del formulario me hace esto:

$insertar = "insert into avisos (idC,nombre,apellidos,calle,poblacion,cpostal,tlf1,tlf2,dni,naviso) values ('$ncliente','$nombre','$apellidos','$domicilio','$sitio','$cpostal','$tlf1','$tlf2','$dni','$naviso')";

y los inserta perfectamente en otra tabla. Los values que inserta los coge del name de cada INPUT del formulario.

Para este último caso creo recordar que había que agrupar primero los resultados, algo del estilo de:
SELECT MAX(idC) FROM avisos GROUP BY idC


(Seguramente no sea exactamente así porque no lo recuerdo bien, pero había que agrupar las cosas de las que querías obtener el máximo)

He probado y sigue igual...

Saludos!
ashitaka escribió:
Gooler escribió:Declaras $a, $b y $c locales al while así que luego al usarlas en los campos hidden no tienen ningún valor. Decláraras antes del while. En cualquier caso, no sé para qué haces eso, ya que teniendo el idS te puedes traer los demás datos en la consulta que procese al formulario...

Uuummm... me he quedado casi igual [+risas] [tomaaa] $a, $b y $c sí que toman un valor, los de la última entrada en la tabla de la BD (yo tengo una lista en una tabla con tres campos: id, localidad y código postal).


Ahh, pensaba que sólo tomaban un valor local. Sí, si se quedan con un valor será el último que salga de la consulta con el while.

Y al hacer el submit del formulario me hace esto:

$insertar = "insert into avisos (idC,nombre,apellidos,calle,poblacion,cpostal,tlf1,tlf2,dni,naviso) values ('$ncliente','$nombre','$apellidos','$domicilio','$sitio','$cpostal','$tlf1','$tlf2','$dni','$naviso')";

y los inserta perfectamente en otra tabla. Los values que inserta los coge del name de cada INPUT del formulario.


Lo que puedes hacer es, con el idS que obtienes del formulario, generar una consulta para obtener la información desde la tabla de lugares y usarlo en ese insert.

En cualquier caso, te vuelvo a decir que la situación ideal es tener una tabla con los clientes y sus datos y otra con los lugares y los suyos, y en la tabla de avisos insertar sólamente el id del cliente y el id del sitio e información referente al propio aviso. Cuando tengas que mostrar el resto de la información la recuperas de sus respectivas tablas.
Gooler escribió:Lo que puedes hacer es, con el idS que obtienes del formulario, generar una consulta para obtener la información desde la tabla de lugares y usarlo en ese insert.

En cualquier caso, te vuelvo a decir que la situación ideal es tener una tabla con los clientes y sus datos y otra con los lugares y los suyos, y en la tabla de avisos insertar sólamente el id del cliente y el id del sitio e información referente al propio aviso. Cuando tengas que mostrar el resto de la información la recuperas de sus respectivas tablas.

Bueno, anoche cuando me acosté le di un par de vueltas a la cabeza antes de quedarme dormido. Acabo de llegar al curro y creo que di con la solución (ay, ¿qué haríamos algunos sin la almohada? jajaj). En vez de pasarle al INSERT la salida del while había que pasarle el valor name del [u]select[/b], y con eso ya saco el código postal en otra consulta.

Por cierto, respecto a lo último que comentas, así es como lo estoy haciendo, con una tabla para los avisos/clientes y con otra para las localidades :D

¿Para lo del SELECT MAX(idC) alguna idea? Ayer estuve buscando un poco más pero no me dio demasiado tiempo a encontrar nada (esta mañana buscaré algo más a fondo).

EDITO: He probado con
$cliente = mysql_query("SELECT idC FROM avisos ORDER BY idC DESC LIMIT 1");

Y he metido un echo $cliente; y me sale un Resource id#4... ni idea [buuuaaaa]

REEDITO: SOLUCIONADO!!!! [Ooooo] Era muy sencillo (es lo que tiene no saber demasiado e ir probando cosas [+risas]).

Para el número de cliente y de aviso:
$consulta = mysql_query("SELECT idC, naviso FROM avisos ORDER BY naviso DESC LIMIT 1"); // Coge el último aviso
$x = mysql_fetch_row($consulta);
$nCliente = $x[0] +1;
$nAviso = $x[1] + 1;

Y para coger el código postal, lo mismo
$y = mysql_query("SELECT cpostal FROM sitios WHERE nombre LIKE '$elegir' LIMIT 1"); // $elegir es la selección en la dropdown box
$z = mysql_fetch_row($y);
$codigop = $z[0];


Saludos!
@ashitaka
Si quieres un autoincremental del Id la sentencia que buscas es:

select coalesce(max(idC),0)+1 from avisos


que por cierto, lo puedes usar directametne en el insert.

Otra solucion es que en la definicion de la tabla avisos, el IdC lo configures como autoincremental, con lo que te ahorras estos tinglados.
Nordal escribió:@ashitaka
Si quieres un autoincremental del Id la sentencia que buscas es:

select coalesce(max(idC),0)+1 from avisos


que por cierto, lo puedes usar directametne en el insert.

Otra solucion es que en la definicion de la tabla avisos, el IdC lo configures como autoincremental, con lo que te ahorras estos tinglados.

Gracias Nordal, probaré y me quito un par de líneas jejeje.

Por cierto, lo tengo todo ya muy bien funcionando, aunque ahora me ha surgido un problemilla :P

Cuando meto los datos del formulario y pulso el botón para guardar los datos en la BD, antes quiero que salga una pantalla con los datos introducidos para tener la posibilidad de volver atrás en caso de error. Hasta ahí va todo bien: si no se selecciona una opción de la dropdown box avisa y sale un botón para volver
if ($_POST['elegir'] == "Elegir...") {

        // mensaje de error y botón para volver atrás a corregir.     

}

y si sí se hace muestra los datos que se han introducido en el formulario. El problema es que al hacer esto (mostrar los datos para confirmarlos) he metido dos botones, uno para guardar definitivamente los datos en la BD y otro para volver a corregir si fuera necesario.

¿Por qué no funcion el botón de guardar?
echo '<input type=submit method=post name=confirmar value="Confirmar y guardar">';

if ($_POST['confirmar']) {

        // insertar datos del formulario en la tabla de la BD

}

Sale Notice: Undefined index: confirmar in ...

Saludos!
404 respuestas
15, 6, 7, 8, 9