Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con formulario...

Estas en el tema de Problema con formulario... en el foro de PHP en Foros del Web. Hola amigos, hace soy completamente novato en mysql y php. Necesito crear un formulario para ingresar los satos en una tabla de mysql, la cual ...
  #1 (permalink)  
Antiguo 07/04/2013, 10:14
 
Fecha de Ingreso: febrero-2013
Mensajes: 11
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta Problema con formulario...

Hola amigos, hace soy completamente novato en mysql y php. Necesito crear un formulario para ingresar los satos en una tabla de mysql, la cual contiene los registros:
nombre
clave
email
celular
posicion
tabla
user_status
fecha

logre armar con info de este foro un formulario asì:
<?php
include('acceso_db.php'); // incluimos el archivo de conexión a la Base de Datos
if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos desde el formulario
// creamos una función que nos parmita validar el email
function comprobar_email($email){
$mail_correcto = 0;
//compruebo unas cosas primeras
if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){
if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) {
//miro si tiene caracter .
if (substr_count($email,".")>= 1){
//obtengo la terminacion del dominio
$term_dom = substr(strrchr ($email, '.'),1);
//compruebo que la terminación del dominio sea correcta
if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ){
//compruebo que lo de antes del dominio sea correcto
$antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1);
$caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1);
if ($caracter_ult != "@" && $caracter_ult != "."){
$mail_correcto = 1;
}
}
}
}
}
if ($mail_correcto)
return 1;
else
return 0;
} // Procedemos a comprobar que los campos del formulario no estén vacíos
$sin_espacios = count_chars($_POST['nombre'], 1);
if(!empty($sin_espacios[32])) { // comprobamos que el campo usuario_nombre no tenga espacios en blanco
echo "El campo <em>nombre</em> no debe contener espacios en blanco. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['nombre'])) { // comprobamos que el campo usuario_nombre no esté vacío
echo "No haz ingresado tu usuario. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['clave'])) { // comprobamos que el campo usuario_clave no esté vacío
echo "No haz ingresado contraseña. <a href='javascript:history.back();'>Reintentar</a>";
}elseif($_POST['clave'] != $_POST['clave_conf']) { // comprobamos que las contraseñas ingresadas coincidan
echo "Las contraseñas ingresadas no coinciden. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(!comprobar_email($_POST['email'])) { // validamos que el email ingresado sea correcto
echo "El email ingresado no es válido. <a href='javascript:history.back();'>Reintentar</a>";
}else {
// "limpiamos" los campos del formulario de posibles códigos maliciosos
$nombre = mysql_real_escape_string($_POST['nombre']);
$clave = mysql_real_escape_string($_POST['clave']);
$email = mysql_real_escape_string($_POST['email']);
$celular = mysql_real_escape_string($_POST['Celular']);
$fecha = mysql_real_escape_string($_POST['fecha']);
$posicion = mysql_real_escape_string($_POST['posicion']);
$tabla = mysql_real_escape_string($_POST['tabla']);
// comprobamos que el usuario ingresado no haya sido registrado antes
$sql = mysql_query("SELECT nombre FROM investors1 WHERE nombre='".$nombre."'");
if(mysql_num_rows($sql) > 0) {
echo "El nombre usuario elegido ya ha sido registrado anteriormente. <a href='javascript:history.back();'>Reintentar</a>";
}else {
$clave = md5($clave); // encriptamos la contraseña ingresada con md5
// ingresamos los datos a la BD
$reg = mysql_query("INSERT INTO investors1 (nombre, clave, email, Celular, posicion, tabla, fecha) VALUES ('".$nombre."', '".$clave."', '".$email."', '".$Celular."', '".$posicion."', '".$tabla."', '".$fecha."', NOW())");
if($reg) {
echo "Datos ingresados correctamente.";
}else {
echo "ha ocurrido un error y no se registraron los datos.";
}
}
}
}else {
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<label>Usuario:</label><br />
<input type="text" name="nombre" maxlength="15" /><br />
<label>Contraseña:</label><br />
<input type="password" name="clave" maxlength="15" /><br />
<label>Confirmar Contraseña:</label><br />
<input type="password" name="clave_conf" maxlength="15" /><br />
<label>Email:</label><br />
<input type="text" name="email" maxlength="30" /><br />
<label>Celular:</label><br />
<input type="text" name="Celular" maxlength="10" /><br />
<label>Posici&oacute;n:</label><br />
<input type="text" name="posicion" maxlength="15" /><br />
<label>Tabla:</label><br />
<input type="text" name="tabla" maxlength="5" /><br />
<input type="submit" name="enviar" value="Registrar" />
<input type="reset" value="Borrar" />
</form>
<?php
}
?>

Pero me vota "ha ocurrido un error y no se registraron los datos."

Les agradezco me ayuden a hallar el error, ya que le he dado vueltas y no logro hallarlo.

Gracias
  #2 (permalink)  
Antiguo 07/04/2013, 10:29
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 4 meses
Puntos: 181
Respuesta: Problema con formulario...

Usa el Highlight para que sea mas facil seguir tu código por favor:

Aun con todo logre ver un problema:

Código PHP:
$celular mysql_real_escape_string($_POST['Celular']);
//aqui defines $celular
$reg mysql_query("INSERT INTO investors1 (nombre, clave, email, Celular, posicion, tabla, fecha) VALUES ('".$nombre."', '".$clave."', '".$email."', '".$Celular."', '".$posicion."', '".$tabla."', '".$fecha."', NOW())"); 
//$Celular no es igual a $celular 
Puede que tenga otros errores pero la manera mas facil de encontrarlos es probando poco a poco que todos los parámetros que mandaste llegaron correctamente (prueba con echo) y no olvides imprimir la consulta para verificar que esta bien escrita.
__________________
Blog de humor http://elcuasatar.net63.net/
  #3 (permalink)  
Antiguo 07/04/2013, 10:57
 
Fecha de Ingreso: febrero-2013
Mensajes: 11
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Problema con formulario...

Realice la corrección de celular por Celular, pero aun me sigue arrojando "ha ocurrido un error y no se registraron los datos."

Por otro parte me podría explicar como probarlo con echo, pues la verdad no tengo idea.

de antemano Gracias.



Código PHP:
Ver original
  1. <?php
  2.     include('acceso_db.php'); // incluimos el archivo de conexión a la Base de Datos
  3.     if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos desde el formulario
  4.         // creamos una función que nos parmita validar el email
  5.         function comprobar_email($email){
  6.     $mail_correcto = 0;
  7.     //compruebo unas cosas primeras
  8.     if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){
  9.          if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) {
  10.              //miro si tiene caracter .
  11.              if (substr_count($email,".")>= 1){
  12.                  //obtengo la terminacion del dominio
  13.                  $term_dom = substr(strrchr ($email, '.'),1);
  14.                  //compruebo que la terminación del dominio sea correcta
  15.                  if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ){
  16.                  //compruebo que lo de antes del dominio sea correcto
  17.                  $antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1);
  18.                  $caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1);
  19.                  if ($caracter_ult != "@" && $caracter_ult != "."){
  20.                      $mail_correcto = 1;
  21.                  }
  22.                  }
  23.              }
  24.          }
  25.     }
  26.     if ($mail_correcto)
  27.          return 1;
  28.     else
  29.          return 0;
  30. }       // Procedemos a comprobar que los campos del formulario no estén vacíos
  31.         $sin_espacios = count_chars($_POST['nombre'], 1);
  32.         if(!empty($sin_espacios[32])) { // comprobamos que el campo usuario_nombre no tenga espacios en blanco
  33.             echo "El campo <em>nombre</em> no debe contener espacios en blanco. <a href='javascript:history.back();'>Reintentar</a>";
  34.         }elseif(empty($_POST['nombre'])) { // comprobamos que el campo usuario_nombre no esté vacío
  35.             echo "No haz ingresado tu usuario. <a href='javascript:history.back();'>Reintentar</a>";
  36.         }elseif(empty($_POST['clave'])) { // comprobamos que el campo usuario_clave no esté vacío
  37.             echo "No haz ingresado contraseña. <a href='javascript:history.back();'>Reintentar</a>";
  38.         }elseif($_POST['clave'] != $_POST['clave_conf']) { // comprobamos que las contraseñas ingresadas coincidan
  39.             echo "Las contraseñas ingresadas no coinciden. <a href='javascript:history.back();'>Reintentar</a>";
  40.         }elseif(!comprobar_email($_POST['email'])) { // validamos que el email ingresado sea correcto
  41.             echo "El email ingresado no es válido. <a href='javascript:history.back();'>Reintentar</a>";
  42.         }else {
  43.             // "limpiamos" los campos del formulario de posibles códigos maliciosos
  44.             $nombre = mysql_real_escape_string($_POST['nombre']);
  45.             $clave = mysql_real_escape_string($_POST['clave']);
  46.             $email = mysql_real_escape_string($_POST['email']);
  47.             $Celular = mysql_real_escape_string($_POST['Celular']);
  48.             $fecha = mysql_real_escape_string($_POST['fecha']);
  49.             $posicion = mysql_real_escape_string($_POST['posicion']);
  50.             $tabla = mysql_real_escape_string($_POST['tabla']);
  51.             // comprobamos que el usuario ingresado no haya sido registrado antes
  52.             $sql = mysql_query("SELECT nombre FROM investors1 WHERE nombre='".$nombre."'");
  53.             if(mysql_num_rows($sql) > 0) {
  54.                 echo "El nombre usuario elegido ya ha sido registrado anteriormente. <a href='javascript:history.back();'>Reintentar</a>";
  55.             }else {
  56.                 $clave = md5($clave); // encriptamos la contraseña ingresada con md5
  57.                 // ingresamos los datos a la BD
  58.                 $reg = mysql_query("INSERT INTO investors1 (nombre, clave, email, Celular, posicion, tabla, fecha) VALUES ('".$nombre."', '".$clave."', '".$email."', '".$Celular."', '".$posicion."', '".$tabla."', '".$fecha."', NOW())");
  59.                  if($reg) {
  60.                     echo "Datos ingresados correctamente.";
  61.                 }else {
  62.                     echo "ha ocurrido un error y no se registraron los datos.";
  63.                 }
  64.             }
  65.         }
  66.     }else {
  67. ?>
  68.     <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
  69.         <label>Usuario:</label><br />
  70.         <input type="text" name="nombre" maxlength="15" /><br />
  71.         <label>Contraseña:</label><br />
  72.         <input type="password" name="clave" maxlength="15" /><br />
  73.         <label>Confirmar Contraseña:</label><br />
  74.         <input type="password" name="clave_conf" maxlength="15" /><br />
  75.         <label>Email:</label><br />
  76.         <input type="text" name="email" maxlength="30" /><br />
  77.         <label>Celular:</label><br />
  78.         <input type="text" name="Celular" maxlength="10" /><br />
  79.         <label>Posici&oacute;n:</label><br />
  80.         <input type="text" name="posicion" maxlength="15" /><br />
  81.         <label>Tabla:</label><br />
  82.         <input type="text" name="tabla" maxlength="5" /><br />  
  83.         <input type="submit" name="enviar" value="Registrar" />
  84.         <input type="reset" value="Borrar" />
  85.     </form>
  86. <?php
  87.     }
  88. ?>
  #4 (permalink)  
Antiguo 07/04/2013, 11:32
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 4 meses
Puntos: 181
Respuesta: Problema con formulario...

Pues tal y como lo supuse tenia mas problemas, solo que lo vi hasta ahora que pusiste el código en color.

¿Que tantos conocimientos tienes de SQL? Cuando vas a realizar una consulta si vas a ingresar 7 datos tienes que pasarle 7 datos, si cuentas tu consulta actual veras que tiene mas datos que registros (8 para ser exactos). El problema lo veo en los dos ultimos $fecha y now(), o le ingresas $fecha o el ingresas now() pero las dos al tiempo no puedes.

Si no conoces muy bien la sintaxis de sql te recomiendo encarecidamente que la estudies porque veo que a todo le pones comillas simples. Para ponerte un ejemplo si la variable celular la definiste como varchar ponerle comillas es valido pero si por ejemplo la pusiste como entero no podria ir entre comillas.

Mi recomendación es que hagas algo asi de sencillo para que detectes errores

Código PHP:
$query="insert into tabla (valor1,valor2) values ('".$value1."','".$value2."')";
echo 
$query
exit(); 
Revisa si lo escribi bien o no pero la idea es que lo adaptes a tu propia consulta (se da por sobreentendido que tu consulta es diferente), la idea es que con ese echo tu imprimas la consulta, la pases por tu motor de bd (supongo que usaras phpmyadmin) y mires el resultado de la consulta. El gestor te indicara que errores tienes y lo puedes ir arreglando. El exit lo unico que hace es terminar el script antes de tiempo para que no se ejecute lo demas. Una vez que arregles tu consulta le puedes quitar el echo y el exit.

p.s. en teoría así debería funcionar, pero por favor sigue mis sugerencias para que puedas verificar si la consulta queda bien realizada o no.

Código PHP:
$reg mysql_query("INSERT INTO investors1 (nombre, clave, email, Celular, posicion, tabla, fecha) VALUES ('".$nombre."','".$clave."','".$email."','".$Celular."','".$posicion."','".$tabla."', '".$fecha."')"
__________________
Blog de humor http://elcuasatar.net63.net/

Última edición por cuasatar; 07/04/2013 a las 11:41
  #5 (permalink)  
Antiguo 07/04/2013, 11:49
 
Fecha de Ingreso: febrero-2013
Mensajes: 11
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Problema con formulario...

Como decía al inicio del tema soy demasiado novato en sql.

Pero finalmente ensayando es que se aprende, y sin duda estos foros son excelentes para ello, pues ahí personas con mucha experiencia como tu, lo cual es muy necesario.

Corregí lo que me dijiste e hice las consultas y me quedo bien.

Gracias por tu ayuda.

Etiquetas: formulario, mysql, php.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:21.