PDA

Ver la Versión Completa : Duda con SQL



kbzajunior
08/04/2007, 22:00
Muy buenas peña!!

Haber si por este foro ( normalmente visito solo el de N2 ) me aclarais un poco el tema. Estoy acabando un modulo de informatica, y como proyecto,me ha tocado crear unos scripts para insertar y cosultar datos mediante apache + php + sql.

Es como una aplicacion, para insertar a nuevos alumnos ( de el centro en el que estudio ) y otro script, para, consultar datos a la BdD mediante un formulario.

Pues bien, ahy va mi pregunta.

El tema de insertar datos en la BdD lo tengo 100% hecho, ahora me queda el de consultar.

Mi idea es -> [Only registered and activated users can see links] con un formulario, selecionar la edad de X alumno, un apellido de X alumno, una localidad, y por ultimo un curso, ahora RECOJER ESOS DATOS DE ESE FORMULARIO, y pasarlos a una sentencia SQL para que consulte a la BdD que la tengo montada en localhost.

Me habeis entendido cual es la idea final?

Espero no dar mucho la bara pero.. por mucho que intento pensar, nose me ocurre como hacer eso.

Un saludo, y muchisimas gracias.

Bender034
09/04/2007, 11:46
Esos datos los tienes recogidos en variables. De la misma forma que has hecho la consulta para insertar, haz otra para consultar.

Si tenias las variables de la forma var_apellido, var_localidad, var_edad, tu has hecho:

insert into tabla (apellido, localidad, edad) values (var_apellido, var_localidad, var_edad)

Pues la consulta seria igual:

select * from tabla where apellido = var_apellido and localidad = var_localidad etc, lo que te haga falta.

Si no es esto lo que quieres, entonces no he entendido la pregunta
:)

kbzajunior
09/04/2007, 14:40
Buenas, primero, gracias por contestar.

Te cuento.
Supongamos, que SOLO quiero recojer los apellidos, para no liar tanto el hilo del foro.
En el script de insertar datos, tengo esto -> Apellidos: <input type='text' name='apellidos'>

Bien, en el <form name="form1" action="script_consultas.php" method="post">, de modo que, cuando le das al boton BUSCAR ( el de la imagen que puse arriba ), llame al script "script_consultas.php".

¿ Que tengo en el script consultas ? esto ->
[Only registered and activated users can see links]
$v0=$_POST['apellidos']; // recoje datos del input
mysql_select_db($base,$c);
mysql_query("select * from $tabla where 'apellidos' = $v0;",$c);

Bien conectar, conecta perfecto a la BdD, el problema esta en la sentencia SQL.
Te cuento, si le quito el where para que quede asi -> select * from $tabla; me dice que bien que consulta realizada correctamente, el problema esta cuando le pongo el where.. que se ve que ALGO NO CUADRA.

Ahora, te pongo todos los scripts que usé para crear las tablas, insertar datos etc.

Script crear_table -> lo dice el nombre, crea la tabla con los campos que quiero y con el formato que quiero. ( lo lo he usado una vez para crear la tabla, ya que para crear no lo he hecho con phpmyadmin, sino por codigo )
Script consultar -> aqui no hay nada de php ni sql, solo html y los inputs con los names.
Script visor -> es que el realmente inserta los datos con el insert into, y a continuacion, muestra un mensaje diciendo, Datos metidos correctamente.
Aqui estan los scripts, haber en que fallo [Only registered and activated users can see links]


PD : Respecto a los errores que me da el SQL, es el 1054, y el tipico que dice que revise el manual de sql, por mas que miro el codigo....:(, nose que se me puede escapar, y OJO, decir que para acer el script de insertar datos, me funciona y lo manejo de fabula, pero este de hacer una consulta... parezco medio tonto :S.

Un saludo, y perdona por el toston.

Bender034
09/04/2007, 18:07
Error: 1054 SQLSTATE: 42S22 (ER_BAD_FIELD_ERROR)
Mensaje: La columna '%s' en %s es desconocidaTiene toda la pinta de que no esta cogiendo bien el nombre del campo de la tabla está mal. :confused1:

En el script que has puesto, no viene la consulta que te falla, al menos yo no la veo. Ese error 1054 es de mysql, que supongo que será el motor que estas usando.

No estoy muy puesto en php, pero parece que el error va por ahi.

Decoderz
10/04/2007, 23:46
[Only registered and activated users can see links]
$v0=$_POST['apellidos']; // recoje datos del input
mysql_select_db($base,$c);
mysql_query("select * from $tabla where apellidos' = $v0;",$c);



Esto esta mal es asi
mysql_query("select * from tabla where apellidos like '". $v0 ."';",$c);

1.- El like se utiliza para los nombres y funciona mejor que el =, el = emplealo para numeros. Por lo tanto y como solicitas un apellido utiliza like

2.- Otro fallo si metes la variable a saco no te la interpreta, la soluciones es ponerle ". $aquilavariable ." asi te deberia funcionar, sino te va asi pon el codigo y la base de datos, sino lo sabes poner aqui pegame un toque y te ayudo

3.- Fijate en esto select * from $tabla sobra el $ de tabla estas haciendo una consulta a una tabla no pasando una varible creo yo, en tal caso si quieres pasar una variable lo mismo del paso 2

Asi te tiene que funcionar, sino pon el codigo que asi trabajmos mejor

Saludos

Bender034
11/04/2007, 07:16
Si, me imagino que es algo de la comillas, para que recoja bien los nombres de las variables y de las columnas de la tabla. ya digo que no estoy muy puesto en la sintaxis del php, yo utilizo Delhpi, aunque la forma de actuar es la misma para todos lo lenguajes.

Solo decir una cosa. La clausula like, se emplea cuando quieres comparar patrones de busqueda. Por ejemplo like 's%', te devolverá todos los que empiezan por s.

Si pones like 'variable', te devolverá el que coincide con lo que has puesto, pero no por que la columna sea alfanumerica. Es decir que poniendo = 'variable0, debe de funcionar exactamente igual.

Tambien es perfectamente posible, pasar como variable el nombre de una tabla, tanto por variables, como por macros. Siempre y cuando se pongan bien las comillas, claro.

Lo mejor para esto, es depurar, y parar el interprete en la linea de la consulta, y ver realmente , como es la consulta que has construido.

Decoderz
11/04/2007, 23:24
Si, me imagino que es algo de la comillas, para que recoja bien los nombres de las variables y de las columnas de la tabla. ya digo que no estoy muy puesto en la sintaxis del php, yo utilizo Delhpi, aunque la forma de actuar es la misma para todos lo lenguajes.

Solo decir una cosa. La clausula like, se emplea cuando quieres comparar patrones de busqueda. Por ejemplo like 's%', te devolverá todos los que empiezan por s.

Si pones like 'variable', te devolverá el que coincide con lo que has puesto, pero no por que la columna sea alfanumerica. Es decir que poniendo = 'variable0, debe de funcionar exactamente igual.

Tambien es perfectamente posible, pasar como variable el nombre de una tabla, tanto por variables, como por macros. Siempre y cuando se pongan bien las comillas, claro.

Lo mejor para esto, es depurar, y parar el interprete en la linea de la consulta, y ver realmente , como es la consulta que has construido.


Buenas observaciones, funcionar funciona igual que like que con =.

Lo que tambien puedes hacer es asignarle la variable a la consulta de mysql y poner echo $varibable; para ver que consulta hace, en php no se puede parar el interprete para ver lo que contiene.

Saludos

Bender034
12/04/2007, 07:03
Lo que tambien puedes hacer es asignarle la variable a la consulta de mysql y poner echo $varibable; para ver que consulta hace, en php no se puede parar el interprete para ver lo que contiene.

Saludos

Efectivamente. Si el editor que usas para escribir php, no te deja poner puntos de ruptura, haz eso, asigna una variable a la consulta y muestrala en pantalla.

Bueno , a ver que nos cuenta, si lo ha solucionado