Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Post mysqli

Estas en el tema de Post mysqli en el foro de PHP en Foros del Web. Hola, me sale este error Notice: Undefined index: nombres in D:\xampp\htdocs\personas\ingresar_persona.php on line 11 Notice: Undefined index: apellidos in D:\xampp\htdocs\personas\ingresar_persona.php on line 12 Notice: Undefined ...
  #1 (permalink)  
Antiguo 17/09/2013, 13:10
 
Fecha de Ingreso: noviembre-2004
Ubicación: Medellín
Mensajes: 121
Antigüedad: 20 años, 1 mes
Puntos: 1
Busqueda Post mysqli

Hola, me sale este error
Notice: Undefined index: nombres in D:\xampp\htdocs\personas\ingresar_persona.php on line 11

Notice: Undefined index: apellidos in D:\xampp\htdocs\personas\ingresar_persona.php on line 12

Notice: Undefined variable: documento in D:\xampp\htdocs\personas\ingresar_persona.php on line 14

Este es el código
<?php
$bd = new mysqli("localhost", "root", "00127", "bd_personas");
if ($bd->connect_errno)
die("Error, no se pudo conectar: ".$bd->connect_error);

$documento = $_POST["docDeIdentidad"];
$nombres = $_POST["nombres"];
$apellidos = $_POST["apellidos"];

$query = "INSERT INTO tbl_personas (cedula, nombres, apellidos) VALUES ('" . mysqli_real_escape_string($bd, $documento) . "', '" . mysqli_real_escape_string($bd, $nombres) . "', '" . mysqli_real_escape_string($bd, $apellidos) . "')";
$bd->query($query);

echo "Nuevo registro \n";

$bd->close();


?>


Y el código del formulario que envía los datos
<FORM id="contacto" name="contacto" action="ingresar_persona.php" method="POST">
<label>Nombres:</label><br>
<input type=”text” name=”nombres id="nombres"”><br>
<label>Apellidos:</label><br>
<input type=”text” name=”apellidos id="apellidos"”><br>
<label>Documento de identidad:</label><br>
<input type=”text” name=”docDeIdentidad” id="docDeIdentidad"><br><br>
<input type="submit" name="Submit" value="Enviar"/> <input type="button" name="Limpiar" value="Limpiar"/>
</form>

Debe ser un error muy común cuando uno está empezando, por favor alguien que pueda decirme.
  #2 (permalink)  
Antiguo 17/09/2013, 13:18
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 17 años, 5 meses
Puntos: 194
Respuesta: Post mysqli

Puedes hacer un var_dump( $_POST); para darte cuenta fácilmente del problema.

Tienes mal las comillas en los inputs

name=”nombres id="nombres"”

name="nombres" id="nombres"
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #3 (permalink)  
Antiguo 17/09/2013, 14:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Post mysqli

Cita:
Iniciado por yonerflash Ver Mensaje
Debe ser un error muy común cuando uno está empezando, por favor alguien que pueda decirme.
Desde luego, debes tener en cuenta lo siguiente cuando trabajas con variables externas:

1. Ninguna variable externa existe de la nada, debe tener un origen, la URL, request o un formulario normal
2. En tu caso estás usando un formulario de tipo post, por consecuencia dichas variables $_POST sólo estarán presentes al enviar el formulario y no antes
3. Tu problema radica en que no tienes una estructura de control para aquellas situaciones donde todavía no se haya enviado el formulario
Código PHP:
Ver original
  1. if ( ! empty($_POST)) { // si POST no está vacio
  2.  // entonces acá va todo el código que hace uso de $_POST
  3. }

¿Se entiende?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 18/09/2013, 12:59
 
Fecha de Ingreso: noviembre-2004
Ubicación: Medellín
Mensajes: 121
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Post mysqli

Hice los arreglos... sale Null
No sé por qué.
  #5 (permalink)  
Antiguo 18/09/2013, 13:00
 
Fecha de Ingreso: noviembre-2004
Ubicación: Medellín
Mensajes: 121
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Post mysqli

Lo del control de lo que se entra pienso hacerlo después.
  #6 (permalink)  
Antiguo 18/09/2013, 13:02
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 13 años, 3 meses
Puntos: 397
Respuesta: Post mysqli

Cita:
Iniciado por yonerflash Ver Mensaje
Lo del control de lo que se entra pienso hacerlo después.
Si no creas esa estructura de control difícilmente solucionaras el problema de manera eficaz

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #7 (permalink)  
Antiguo 18/09/2013, 13:06
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 2 meses
Puntos: 175
Respuesta: Post mysqli

Si estas ejecutando ese código en el mismo lugar que tu formulario, es obvio que te va a salir ese error, ya que de entrada tu script esta recibiendo variables, incluso sin haberse enviado ninguna...

si no pones la estructura de control if($_POST) o la que te parezca adecuada, te seguirá saliendo el mismo error eternamente por los siglos de los siglos . Amén...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #8 (permalink)  
Antiguo 18/09/2013, 13:09
 
Fecha de Ingreso: noviembre-2004
Ubicación: Medellín
Mensajes: 121
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Post mysqli

Las comillas estaban raras, las cambie y ahora sale
string(1) "7" string(6) "dafdsf" string(6) "sdfads"
En la base de datos el primer campo debe ser int, así que creo que lo que falta es convertirlo no?
  #9 (permalink)  
Antiguo 18/09/2013, 13:16
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 2 meses
Puntos: 175
Respuesta: Post mysqli

no necesariamente, pero si es int implica que tu número de documento es una variable numérica entera, sin decimales... que en este caso da igual si es varchar o int porque no vas a hacer matemáticas con ella... pero si vas a ser estricto, debería ser INT

Sigue sin funcionar? o ya esta ok?
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #10 (permalink)  
Antiguo 19/09/2013, 22:19
 
Fecha de Ingreso: noviembre-2004
Ubicación: Medellín
Mensajes: 121
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Post mysqli

No muestra mensajes de error, pero en la base de datos no graba nada
$bd = new mysqli("localhost", "root", "00127", "bd_personas");
if ($bd->connect_errno)
die("Error, no se pudo conectar: ".$bd->connect_error);

if ( ! empty($_POST)) {
$documento = ($_POST["docDeIdentidad"]);
$documento = (int)$documento;
$documento = var_dump($documento);
$nombres = var_dump($_POST["nombres"]);
$apellidos = var_dump($_POST["apellidos"]);
}

$query = "INSERT INTO tbl_personas VALUES ('$documento', '$nombres', '$apellidos')";
$bd->query($query);

echo "Nuevo registro \n";

$bd->close();
  #11 (permalink)  
Antiguo 19/09/2013, 22:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Post mysqli

¿Por qué estás usando var_dump() en la asignación de variables?

Eso a simple vista es lo peor que puedes hacer, no me extraña que tu código no sirva, ¿si sabes lo que hace dicha función o no?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 20/09/2013, 09:50
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Post mysqli

Cita:
Iniciado por yonerflash Ver Mensaje
No muestra mensajes de error, pero en la base de datos no graba nada
$bd = new mysqli("localhost", "root", "00127", "bd_personas");
if ($bd->connect_errno)
die("Error, no se pudo conectar: ".$bd->connect_error);

if ( ! empty($_POST)) {
$documento = ($_POST["docDeIdentidad"]);
$documento = (int)$documento;
$documento = var_dump($documento);
$nombres = var_dump($_POST["nombres"]);
$apellidos = var_dump($_POST["apellidos"]);
}

$query = "INSERT INTO tbl_personas VALUES ('$documento', '$nombres', '$apellidos')";
$bd->query($query);

echo "Nuevo registro \n";

$bd->close();
var_dump vuelca el contenido de una variable, se utiliza generalmente para visualizar la información pero nunca para asignar contenido. Le estás pasando valores incorrectos a tu DB y por eso nunca te hace las inserciones. Otra cosa es que estás ingresando el $_POST['variable'] dentro de paréntesis. Por qué?
Y además hay un error en la consulta ya que estás poniendo las variables donde debería ir el nombre de los campos y nunca le asignas el valor a esos campos tampoco, y por último el VALUES va después de indicar los nombres de los campos y no antes.

Te recomiendo que chequees el contenido de cada uno de los valores que estás tomando con la función isset en lugar de hacer un genérico de $_POST, ya que si llega cualquier información en uno de los campos pero no en los otros, tu if lo tomaría como válido. Acá te paso cómo debería estar el código:

Código PHP:
<?php
$bd 
= new mysqli("localhost""root""00127""bd_personas");
if (
$bd->connect_errno)    
    die(
"Error, no se pudo conectar: ".$bd->connect_error);

$documento = ( isset( $_POST"docDeIdentidad" ] ) ) ? $_POST"docDeIdentidad" ] : false;
$nombres = ( isset( $_POST"nombres" ] ) ) ? $_POST"nombres" ] : false;
$apellidos = ( isset( $_POST"apellidos" ] ) ) ? $_POST"apellidos" ] : false;
    
$query "INSERT INTO tbl_personas (DOCUMENTO, NOMBRE, APELLIDO) VALUES "// Acá va el nombre de las columnas y no el contenido en sí
$query .= "( '$documento', '$nombres', '$apellidos' )"// Recién acá asignas los valores que corresponden (lo hice en dos veces para comentarlo, vos lo podés hacer de una sola vez ^^ )

$bd->query($query);

echo 
"Nuevo registro \n";

$bd->close();
?>
Una recomendación cuando quieras ver por qué no se graba nada en la base de datos! Después de generar tu query hacé simplemente un echo del mismo a ver qué está guardando:

Código PHP:
<?php
$query 
"INSERT INTO tbl_personas (DOCUMENTO, NOMBRE, APELLIDO)VALUES ( '$documento', '$nombres', '$apellidos' )";

echo 
$query;
?>

Última edición por Mariuch; 20/09/2013 a las 10:00
  #13 (permalink)  
Antiguo 26/09/2013, 11:21
 
Fecha de Ingreso: noviembre-2004
Ubicación: Medellín
Mensajes: 121
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Post mysqli

Hice lo que me dijo Mariuch y funciona
<?php
$bd = new mysqli("localhost", "root", "00127", "bd_personas");
if ($bd->connect_errno)
die("Error, no se pudo conectar: ".$bd->connect_error);

$documento = ( isset( $_POST[ "docDeIdentidad" ] ) ) ? $_POST[ "docDeIdentidad" ] : false;
$nombres = ( isset( $_POST[ "nombres" ] ) ) ? $_POST[ "nombres" ] : false;
$apellidos = ( isset( $_POST[ "apellidos" ] ) ) ? $_POST[ "apellidos" ] : false;


$query = "INSERT INTO tbl_personas (cedula, nombres, apellidos)VALUES ('$documento', '$nombres', '$apellidos')";
$bd->query($query);

echo $query;
echo "Nuevo registro \n";

$bd->close();


?>

Etiquetas: formulario, mysql, mysqli, post, registro, variable
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 14:25.