PDA

View Full Version : [AYUDA]Codigo php


cyberlock
18-11-2011, 05:00 PM
hola gente,tengo un problema,y como soy novato me cuesta mucho darme cuenta de los errores,les paso a contar:

cree base de datos en phpmyadmin,llamada test,una tabla llamada alumnos
cree codigo php para agregar registros,agrega bien,pero el tema es que cuando apenas ejecuto el codigo php,ya me genera un registro agregado en blanco,mostrandome todos los campos vacios,que son (nombre,apellido,materia) y nota que es el 4to campo,me sale un 0

y no se como resolverlo,si alguien me pueda dar una mano con php se los voy a agradecer

Saludos muchachos:D

PD: les dejo el codigo

<?
$conexion = mysql_connect("localhost", "123", "");
mysql_select_db("test", $conexion);
?>
<FORM action="agregar2.php" method="POST">
<TABLE border="1">
<TR>
<TD>Nombre del alumno</TD>
<TD colspan="2"><INPUT TYPE="text" name="nom" size="12">
</TR>
<TR>
<TD>Apellido del alumno</TD>
<TD><INPUT TYPE="text" name="ape" size="12" >
</TR>
<TR>
<TD>Materia</TD>
<TD colspan="2"><INPUT TYPE="text" name="mat" size="12" >
</TR>
<TR>
<TD>Nota</TD>
<TD colspan="2"><INPUT TYPE="text" name="not" size="2" >
</TR>
<TR>
<TD colspan="3"><CENTER><INPUT type="submit" value="enviar" name="enviar"></CENTER></TD>
</TR>
</TABLE>
</form>
<?

$que = "INSERT INTO alumnos (nombre, apellido, materia , nota ) ";
$que.= "VALUES ('".$_POST['nom']."', '".$_POST['ape']."', '".$_POST['mat']."','".$_POST['not']."') ";
$res = mysql_query($que, $conexion) or die(mysql_error());

?>

juanjo789
18-11-2011, 05:19 PM
fijate si no veo mal que ya de movida cuando ejecuta el codigo ya estas llamando al insert

PD: ahora veo que el insert ademas esta mal armado, le estas diciendo que campos llenar, pero no con que llenar

Fijate que es insert into Tabla (campo1, campo2, campo3, campoetc) values (valor1, valor2, valor3....)

mandrake88
18-11-2011, 08:07 PM
El problema por el cual te agrega una fila en blanco es que se ejecuta el insert cada vez que cargas la pagina, no se si me explico. Cuando ejecutas la pagina por 1ra vez muestra el formulario y ejecuta el insert con datos vacios.

Lo que tenes que hacer es cambiar el action del form, por algo del tipo

<FORM action="agregar2.php?insertar=1" method="POST">

y luego cambias la parte php del final por esto

if($_POST['insertar'] == 1){
$que = "INSERT INTO alumnos (nombre, apellido, materia , nota ) ";
$que.= "VALUES ('".$_POST['nom']."', '".$_POST['ape']."', '".$_POST['mat']."','".$_POST['not']."') ";
$res = mysql_query($que, $conexion) or die(mysql_error());
}

Lo que hize fue agregar un parametro al a URL, para asi poder saber cuando es que se hizo click en el Enviar del formulario.

Consejos aparte:

1) No separes el query de esa forma (usando el =. para concatenar) es poco legible. La idea es que el query se pueda leer de corrido, es una cuestion de prolijidad en el codigo nomas

2) Para las querys usa una variable con un nombre fijo, ej: $sql, o $query, y usa la misma para todas. Si no despues tenes que andar inventando variables a lo loco

La query que estas haciendo deberia quedar asi

$sql = "INSERT INTO alumnos (nombre, apellido, materia , nota ) VALUES ('".$_POST['nom']."', '".$_POST['ape']."', '".$_POST['mat']."','".$_POST['not']."') ";

3) En una aplicacion real no uses los valores del POST directamente en la query sin filtrarlos, si no cualquiera en 5 min te hackea la base de datos. Ya que puede romper la query insertando ciertos caracteres especiales en el formulario, o bien usando un parametro en la URL como hize arriba. Esto es lo que se conoce como SQL Injection.
La idea por ejemplo es que yo en vez de poner una nota en el campo nota, pongo una nota y agrego una comila al final la cual ocuparia el lugar de la comilla que vos pusiste en la query y de ahi puedo seguir metiendo codigo SQL a gusto, podria modificar cualquier campo de la base de datos, o bien directamente borrarte toda la base de datos

Lo mas facil es que te bajes alguna libreria para filtrar los datos que recibis por URL y por parametro. No uses el magic_qoutes del php por que a pesar de que filtra algo, no filtra todo, sigue siendo vulnerable a sql injection

Grabate esto a fuego: TODA informacion que ingreses a una base de datos, tiene que ser filtrada primero, venga de donde venga (un formulario, un parametro por url, etc..). Nunca metas nada en una base de datos, sin antes filtrar los datos.

cyberlock
20-11-2011, 01:08 AM
gracias por los consejos chicos !

saludos