Despues de intentar varias cosas y al ver que ninguna tubo resultado es mi deber postear mi problema en el foro ;-)
El problema es este:
Tengo un formulario "newclient.html" con action="validform.php"; que toma los datos del cliente y los inserta en la tabla 'clientlist' pero el problema es que cuando inserta los registros, los ingresa vacios, es decir.. Al registrar al cliente con ID 1 el nombre, apellido, bla bla bla.. estan en blanco, aunque el formulario haya sido llenado correctamente.
<form id="form1" name="form1" method="get" action="validform.php">
<table width="253" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="82">name ::</td>
<td width="165"><label>
<input type="text" name="name" id="name" />
</label></td>
</tr>
<tr>
<td>surname ::</td>
<td><label>
<input type="text" name="last_name" id="last_name" />
</label></td>
</tr>
<tr>
<td><p>gender ::</p></td>
<td><label>
<select name="gender" size="1" id="gender">
<option selected="selected">male</option>
<option>female</option>
<option>shemale</option>
</select>
</label></td>
</tr>
<tr>
<td>birthdate ::</td>
<td><label>
<input type="text" name="birthdate" id="birthdate" />
</label></td>
</tr>
<tr>
<td><p>mail ::</p></td>
<td><label>
<input type="text" name="mail" id="mail" />
</label></td>
</tr>
<tr>
<td>phone ::</td>
<td><label>
<input type="text" name="phone" id="phone" />
</label></td>
</tr>
<tr>
<td>emergency ::</td>
<td><label>
<input type="text" name="emerg_phone" id="emerg_phone" />
</label></td>
</tr>
<tr>
<td>cc_num ::</td>
<td><label>
<input type="text" name="cc_info" id="cc_info" />
</label></td>
</tr>
<tr>
<td> </td>
<td><label>
cvc:
<input type="text" name="cvc" id="cvc" />
</label>
<label>
<br />
exp:
<input type="text" name="exp" id="exp" />
</label></td>
</tr>
<tr>
<td>comments ::</td>
<td><label>
<textarea name="comments" id="comments" cols="25" rows="3"></textarea>
</label></td>
</tr>
<tr>
<td> </td>
<td><label>
<input type="submit" name="send" id="send" value="Enviar" />
</label></td>
</tr>
</table>
</form>
*El formulario es muy simple porque lo rehice y es de prueba
en "validform.php" tengo:
<?php
include("validdb.php");
$link=Conectarse();
$no=$_GET["ID"];
$name=$_GET["name"];
$last_name=$_GET["last_name"];
$phone=$_GET["phone"];
$emerg_phone=$_GET["emerg_phone"];
$mail=$_GET["mail"];
$gender=$_GET["gender"];
$birthdate=$_GET["birthdate"];
$cc_info=$_GET["cc_info"];
$cvc=$_GET["cvc"];
$exp=$_GET["exp"];
$comments=$_GET["comments"];
mysql_query("insert into clientlist (ID,name,last_name,phone,emerg_phone,mail,gender,birthdate,cc_info,cvc,exp,comments) values ('$no','$name','$last_name','$phone','$emerg_phone','$mail','$gender','$birthdate','$cc_info','$cvc','$exp','$comments')",$link) or die(mysql_error());
header('Location: clientlist.php')
?>
El codigo en validdb.php es completamente correcto, tanto lo es que ingresa los campos vacios a la db.
Como dato: Todo este proceso funcionaba a la perfeccion, pero cuando agrege un campo a la tabla en clientlist.php para Borrar los registros -que tambien funciono perfectamente- desde ahi empeze a tener problemas con la insercion de registros.
Aunque lo mas raro -para mi- fue que hasta intente cambiando de servidor y el problema persiste.
<?php
include("validdb.php");
$link=Conectarse();
$result=mysql_query("select * from clientlist",$link) or die(mysql_error());
?>
<table height="36" border=1 align="center" cellpadding=0 cellspacing=0>
<tr>
<td width="12" height="14" bgcolor="#FFCC00"><b> # </b></td>
<td width="49" bgcolor="#FF6600"><b> Name</b></td>
<td width="46" bgcolor="#FFCC00"><b>Last Name</b></td>
<td width="50" bgcolor="#FF6600"><b>Phone</b></td>
<td width="64" bgcolor="#FFCC00"><b>Emerg Phone</b></td>
<td width="40" bgcolor="#FF6600"><b>Email</b></td>
<td width="41" bgcolor="#FFCC00"><b>Gender</b></td>
<td width="58" bgcolor="#FF6600"><b>Brithdate</b></td>
<td width="99" bgcolor="#FFCC00"><b>CC num</b></td>
<td width="26" bgcolor="#FF6600"><b>CVC</b></td>
<td width="43" bgcolor="#FFCC00"><b>EXP</b></td>
<td width="123" bgcolor="#FF6600"><b>Comments</b></td>
<td width="63" bgcolor="#FFCC00"><b>Delete</b></td>
</tr>
<?php
while($row = mysql_fetch_array($result))
{
printf("<tr><td> %s </td><td> %s </td><td> %s </td><td> %s </td><td> %s </td><td> %s </td><td> %s </td><td> %s </td><td> %s </td><td> %s </td><td> %s </td><td> %s </td><td><a href=\"borra_client.php?id=%d\">Delete</a></td></tr>",$row["ID"],$row["name"],$row["last_name"],$row["phone"],$row["emerg_phone"],$row["mail"],$row["gender"],$row["birthdate"],$row["cc_info"],$row["cvc"],$row["exp"],$row["comments"],$row["ID"]) or die(mysql_error());
}
mysql_free_result($result);
mysql_close($link);
?>
</table>
Espero me puedan hechar una manita; se los agradeceria mucho.
Saludos :D
Esto va en la sección PHP...
Ps mira, el formulario lo envias via POST pero lo recives via GET.... Tambien pueda ser que estes ingresando datos vacio en la base de datos, puedes verificar que TODAS las variables contengan un valor o si no no se ejecuta la consulta...
if(!empty($name) && !empty($last_name)............)
{
//Consulta sel hacia la BD....
.....
...
..
exit;
}else{echo "Faltan campos por llenar";}
si esto es para aprender php+mysql esta bien... si es un trabajo vas a ser owneado porque sos vulnerable a sqli
como ya te dijo yoyahack... estas tomando los datos por donde no debes xD usa $_POST['campo']
si podes aprender/usar mysql o PDO y prepared statements mucho mejor xD yo no usaria el codigo de arriba :P
Creo que habia olvidado fijarme en ese pequeño detalle :( haha pero muchas gracias..
Y esto de verificar que todas las variables tengan un valor, eso lo tengo que poner en validdb.php cierto?
En validform.php
Cita de: Nakp en 18 Febrero 2010, 20:15 PM
si esto es para aprender php+mysql esta bien... si es un trabajo vas a ser owneado porque sos vulnerable a sqli
como ya te dijo yoyahack... estas tomando los datos por donde no debes xD usa $_POST['campo']
si podes aprender/usar mysql o PDO y prepared statements mucho mejor xD yo no usaria el codigo de arriba :P
En realidad mi nivel de mysql es muy basico aun xD
Me podrias dar una idea de como podria ir mejorado el codigo, solo una idea porfavor xD:D
Cita de: yoyahack en 18 Febrero 2010, 20:20 PM
En validform.php
xD Gracias, por eso es bueno preguntar xD
que tal andas con la POO? ;D
tienes 2 opciones (en realidad como 5 xD) usar mysql_real_scape_string() para todos los datos que te pasen y asi no ser vulnerable a sqli O utilizar prepared statements (que viene funcionando un poco diferente) por medio de mysqli o PDO
haz el intento de inyectar en tu codigo... despues agrega esto al principio del script
foreach ($_POST as $key => $value) {
$_POST[$key] = mysql_real_escape_string($value);
}
y vuelve a probar la inyeccion
la 2da opcion sería que leas esto ;-)
http://www.petefreitag.com/item/356.cfm (ejemplo basico)
http://devzone.zend.com/article/686 (ejemplo comparativo entre el metodo tradicional y con prepared statements en mysqli)
http://php.net/manual/en/pdo.prepared-statements.php (procesos almacenados y sentencias preparadas con PDO)
tienes tarea :P
hehe wooow xD muy bien muchisimas gracias :D:D
me gusta la tarea xD
no la de mi escuela, pero la que tenga que ver con los ordenadores me fascina
:D
Muuuuchas gracias xD