Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: mokoMonster en 18 Febrero 2010, 20:00 pm



Título: Problema al ingresar registros a una Tabla
Publicado por: mokoMonster en 18 Febrero 2010, 20:00 pm
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.
Código:
<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>&nbsp;</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>&nbsp;</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:
Código:
<?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.
Código:
<?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


Título: Re: Problema al ingresar registros a una Tabla
Publicado por: ~ Yoya ~ en 18 Febrero 2010, 20:09 pm
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...

Código
  1. if(!empty($name) && !empty($last_name)............)
  2. {
  3.    //Consulta sel hacia la BD....
  4. .....
  5. ...
  6.  
  7. ..
  8. }else{echo "Faltan campos por llenar";}


Título: Re: Problema al ingresar registros a una Tabla
Publicado por: 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


Título: Re: Problema al ingresar registros a una Tabla
Publicado por: mokoMonster en 18 Febrero 2010, 20:17 pm
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?


Título: Re: Problema al ingresar registros a una Tabla
Publicado por: ~ Yoya ~ en 18 Febrero 2010, 20:20 pm
En validform.php


Título: Re: Problema al ingresar registros a una Tabla
Publicado por: mokoMonster en 18 Febrero 2010, 20:21 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


Título: Re: Problema al ingresar registros a una Tabla
Publicado por: mokoMonster en 18 Febrero 2010, 20:21 pm
En validform.php
xD Gracias, por eso es bueno preguntar xD


Título: Re: Problema al ingresar registros a una Tabla
Publicado por: Nakp en 18 Febrero 2010, 20:30 pm
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

Código
  1. foreach ($_POST as $key => $value) {
  2. $_POST[$key] = mysql_real_escape_string($value);
  3. }

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




Título: Re: Problema al ingresar registros a una Tabla
Publicado por: mokoMonster en 18 Febrero 2010, 22:10 pm
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