PDA

Ver la Versión Completa : Error al tratar de guardar los datos de un formulario


whitesnakevm
08-12-2012, 08:12:47
Hola al indicar lo siguientes .. al ejecutarlo me da error
Notice: Undefined index: txt_rut in C:\wamp\www\Snake\Registro.php on line 14
este es el error

if(isset($_POST["btnguardar"])){

$rut=$_POST["txt_rut"];
$contra=$_POST["txt2"];
$nom=$_POST["txt3"];
$apel=$_POST["txt4"];
$dire=$_POST["txt5"];
$celu=$_POST["txt6"];
$com=$_POST["cbo1"];
$tipo=$_POST["cbo2"];
$insertar="insert into usuarios values('$rut','$contra','$nom','$apel,'$dire',$celu,'$com','$tipo') ";
$sentencia=mysql_query($insertar,$con);
if(!$sentencia){
die("No se pudo Insertar, Existe un Error");
}
}

Saludos gracias

dec
08-12-2012, 12:41:43
Hola,

Antes de acceder al elemento de un array, es menester averiguar si realmente existe dicho elemento. Esto puede hacerse con "isset", algo más o menos así:


if ( isset( $_POST[ 'elemKey' ] ) )
{
// El elemento existe
}


De todas formas, me permito aconsejarte que busques información sobre cómo verificar y filtrar este tipo de variables, "$_POST", "$_GET", etc., pues, se trata de variables "de entrada" que pueden contener datos maliciosos, erróneos, etc. Echa un vistazo al capítulo de la ayuda de PHP: Filtrado de datos (http://php.net/manual/es/book.filter.php).

whitesnakevm
08-12-2012, 16:28:49
Gracias ... y para evitar el uso de estos elementos ... (ya habia encontrado como iniciarlos) de que otra manera puedo escribir esa parte indicada ?

Agradeceria sus ayuda... anoche estuve mas de 6 horas dandole vuelta al asunto, puesto que soy novato y no conozco mucho del tema !!

Saludos.. Gracias

dec
08-12-2012, 17:14:07
Hola,

Si sólo quieres (de momento) asegurar que un elemento determinado exista, puedes utilizar "isset", tal como he puesto en el código de arriba. Debes hacer lo mismo con todos los elementos del Array, pues, el error que obtienes indica eso: que un elemento al que trata de accederse no existe en realidad.

Julián
08-12-2012, 22:46:20
Complementando lo dicho por dec me permito indicar que el "mensaje de error" que citas no es un error, sino un notice. EL php te avisa de errorres, warnings y notices, y en este caso, sólo te está informando que la variable $_POST['txt_rut'] no existe, lo cual no produce ningún error, pues puede deberse simplemente a que no se haya rellenado su input correspondiente en el form.

Si buscas en php.net la funcion error_reporting verás que puedes usarla para que, entre otras cosas, no se te muestren los notices.

Un saludo.

dec
09-12-2012, 16:53:11
Complementando lo dicho por dec me permito indicar que el "mensaje de error" que citas no es un error, sino un notice. EL php te avisa de errorres, warnings y notices, y en este caso, sólo te está informando que la variable $_POST['txt_rut'] no existe, lo cual no produce ningún error, pues puede deberse simplemente a que no se haya rellenado su input correspondiente en el form.

Si buscas en php.net la funcion error_reporting verás que puedes usarla para que, entre otras cosas, no se te muestren los notices.

Un saludo.

Es cierto, y, si no recuerdo mal, en producción, es decir, una vez nuestro sitio web esté publicado, nunca deben mostrarse este tipo de errores o noticias... es decir que los errores se han de tratar de otra forma y no mostrando su correspodiente mensaje.

De todas formas, una "noticia" puede derivar en algo más grave... y al menos este tipo de ellas (comprobar antes de usarlo si existe cierto elemento de un array) es sencilla de solventar...

whitesnakevm
09-12-2012, 19:38:27
como hago eso ? :S

cloayza
11-12-2012, 01:11:10
Puedes utilizar la funcion var_dump, que te imprimira el contenido del vector $_POST. Así puedes ver con que llega al script php.

var_dump($_POST);


if(isset($_POST["btnguardar"])){

$rut=$_POST["txt_rut"];
$contra=$_POST["txt2"];
$nom=$_POST["txt3"];
$apel=$_POST["txt4"];
$dire=$_POST["txt5"];
$celu=$_POST["txt6"];
$com=$_POST["cbo1"];
$tipo=$_POST["cbo2"];
$insertar="insert into usuarios values('$rut','$contra','$nom','$apel,'$dire',$celu,'$com','$tipo') ";
$sentencia=mysql_query($insertar,$con);
if(!$sentencia){
die("No se pudo Insertar, Existe un Error");
}
}

Un abrazo.