Comunidad de diseño web y desarrollo en internet online

¿Por qué no me reconoce la variable?

Citar            
MensajeEscrito el 04 Dic 2013 10:13 pm
Buenas, estoy un poco desesperado con este tema y soy nuevo, así que disculpad si meto la gamba.

Tengo construido un formulario que valida con JavaScript Hasta ahí, más o menos bien. Si el fulano no completa los campos, le salen los errores, y si los completa pasa a la siguiente fase (en esto tuve la ayuda de DriverOP a quién agradezco).

La siguiente fase es la conexión con la base de datos, la conversión de los valores del formulario a variable y la inserción de los mismos en la base de datos. Pero no sucede.

Tengo este formulario:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Página de registro</title>
<link href="estilos.css" rel="stylesheet" type="text/css" media="screen" />
<script>
function enviar()
{
var ok = true;
<!--recogida de variables-->
var name = document.getElementById("nombre").value;
var user = document.getElementById("usuario").value;
var correo = document.getElementById ("email").value;
var posarroba = correo.indexOf("@"); <!--Asignamos a una variable la posicion del carácter-->
var pospunto = correo.lastIndexOf(".");
var contra1 = document.getElementById("pass1").value;
var contra2 = document.getElementById("pass2").value;
var year = document.getElementById("año").selectedIndex;
var day = document.getElementById("dia").selectedIndex;
var month = document.getElementById("mes").selectedIndex;



<!--Validación de los campos del forumalario-->
if (name==null || name == "")
{
document.getElementById("error").innerHTML = "Este campo no puede estar vacio";
ok=false;
}
if (user==null || user == "")
{
document.getElementById("error2").innerHTML = "Este campo no puede estar vacio";
ok=false;
}

if (posarroba<1 || pospunto<posarroba+2 || pospunto+2>=correo.length)
{
document.getElementById("error3").innerHTML = "El correo esta mál escrito";
ok=false;
}

if (contra1.length <= 6)
{
document.getElementById("error4").innerHTML = "Escribe como mínimo seis letras";
ok=false;
}

if (contra1 != contra2)
{
document.getElementById("error5").innerHTML = "Las claves no son iguales";
ok=false;
}

if (year==null || year==0 || month==null || month==0 || day==null || day==0)
{
document.getElementById("error6").innerHTML = "Tienes que escoger una fecha de nacimiento";
ok=false;
}
else
{
window.location.assign("registro_aceptado.php")
}
return ok;
}
</script>

</head>
<body>
<h1 class="titular"> Crea tu usuario </h1>
<form class="formulario" id="registro" onSubmit="return enviar();">
<fieldset>
<legend> *Campos obligatorios </legend>
<div>
Tu nombre:
<input type="text" id="nombre"><p class="fallos" id="error"></p><br />
</div>
<div>
Tu usuario:
<input type="text" name="user" id="usuario"><p class="fallos" id="error2"></p><br />
</div>
<div>
Tu email:
<input type="text" name="ema" id="email"><p class="fallos" id="error3"></p><br /><br />
</div>
<div>
<label for="contraseña">Tu contraseña:</label>
<input type="password" id="pass1"><p class="fallos" id="error4"></p><br />
</div>
<div>
<label for="contraseña2">Vuelve a escribir tu contraseña:</label>
<input type="password" id="pass2"><p class="fallos" id="error5"></p><br />
</div>
<div>
<label for="fecha">Fecha de nacimiento:</label>
<select id="dia">
<option value="">-Día-</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select id="mes">
<option value="">-Mes-</option>
<option value="enero">enero</option>
<option value="febrero">febrero</option>
<option value="marzo">marzo</option>
<option value="abril">abril</option>
<option value="mayo">mayo</option>
<option value="junio">junio</option>
<option value="1">julio</option>
<option value="1">agosto</option>
<option value="1">sepiembre</option>
<option value="1">octubre</option>
<option value="1">noviembre</option>
<option value="1">diciembre</option>
</select>
<select id="año">
<option value="">-Año-</option>
<option value="2000">2000</option>
<option value="1999">1999</option>
<option value="1998">1998</option>
<option value="1997">1997</option>
<option value="1996">1996</option>
<option value="1995">1995</option>
<option value="1994">1994</option>
<option value="1993">1993</option>
<option value="1992">1992</option>
<option value="1991">1991</option>
</select><p class="fallos" id="error6"></p><br />
</div>
<div>
<label for="sexo">¿Cuál es tu sexo?</label><br />
Mujer <input type="radio" id="sexo" value="mujer" checked>
Hombre <input type="radio" id="sexo" value="hombre"><br />
</div>
<input type="reset" value="Borrar">
<button type="submit">¡Registrarme!</button>
</form>

</fieldset>
<br />
</body>
</html>

Y estas son las pruebas que he hecho para insertar los datos (omito la conexión a la base de datos, que funciona y escribo el código sólo con una variable para simplificar)


<?php
$nombre = $_POST['nombre'];
mysql_select_db("registro");
mysql_query("insert into usuarios (nombre,usuario,email,password) VALUES ('$nombre')");
?>
<h1><div align="center">Registro Insertado</div></h1><br/>
<a href="entrada.php">Ir al formulario de entrada</a>
</body>
</html>

ERROR:
Notice: Undefined index: nombre in C:\wamp\www\practicas\proyecto\registro_aceptado.php

¿Qué estoy escribiendo mal?

Y aquí viene otra pregunta: en los campos del formulario, ¿debo utilizar id y name? Esto lo digo porque cuando construí la primera versión del formulario sin validación, utilice name y no id y, en ese caso, si entraban los valores en la tabla sin ningún error. Sin embargo, para que la validación del formulario me funcione tengo que utilizar id. No entiendo por qué.

En cualquier caso, en la versión del formulario con validación, he probado a utilizar name e id al mismo tiempo pero me sigue dando el mismo error.

Agradeceré eternamente un poco de iluminación

Por vmlcano

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 05 Dic 2013 12:32 pm
Los <input> y <select> deben tener el atributo "name" para que puedas leerlos del lado de PHP. El <input> que has destinado para nombre no tiene el atributo "name" y por tanto PHP no crea la variable $_POST['nombre'] que es lo que está diciendo el mensaje de error.

Y esto responde tu pregunta: Puedes prescindir de "id" pero no de "name" a la hora de tratar los campos del formulario del lado del servidor.

Debo advertirte que el código que estás implementando del lado del servidor es altamente inseguro: Debes validar los campos del lado del servidor aún más estrictamente que del lado del cliente porque la verdadera validación es siempre del lado del servidor.

Consejo: Nunca te fíes de los datos que te envía el cliente ;)

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 06 Dic 2013 12:24 pm

DriverOp escribió:

Los <input> y <select> deben tener el atributo "name" para que puedas leerlos del lado de PHP. El <input> que has destinado para nombre no tiene el atributo "name" y por tanto PHP no crea la variable $_POST['nombre'] que es lo que está diciendo el mensaje de error.

Y esto responde tu pregunta: Puedes prescindir de "id" pero no de "name" a la hora de tratar los campos del formulario del lado del servidor.

Debo advertirte que el código que estás implementando del lado del servidor es altamente inseguro: Debes validar los campos del lado del servidor aún más estrictamente que del lado del cliente porque la verdadera validación es siempre del lado del servidor.

Consejo: Nunca te fíes de los datos que te envía el cliente ;)


Entendida la diferencia entre ID y NAME. Ahora bien, no avanzo.

Mi formulario (no lo pongo completo)
<h1 class="titular"> Crea tu usuario </h1>
<form class="formulario" id="registro" method="post" onSubmit="return enviar();">
<fieldset>
<legend> *Campos obligatorios </legend>
<div>
Tu nombre:
<input type="text" name="nombre"><p class="fallos" id="error"></p><br />
</div>


Y me recogida de variable:
<?php
$nombre = $_POST['nombre'];
mysql_select_db("registro");
mysql_query("insert into usuarios (nombre,usuario,email,password) VALUES ('$nombre')");
?>

Aparentemente es todo correcto...¿por qué me sigue dando el mismo error?
Gracias de antemano

Por vmlcano

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Dic 2013 04:21 pm
Prueba esto: Al recibir el formulario en PHP

Código PHP :

echo "<pre>"; print_r($_POST); echo "</pre>";

Te dará una idea de lo que realmente está llegado del formulario.

Aparte: Tiene un error en la sentencia SQL INSERT. Si enumeras un campo, debes darle un valor.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 06 Dic 2013 04:24 pm
Tengo un problema de base mayor.
Pero tiene que ver con JS, voy a hacer la pregunta en el foro de allí.

Por vmlcano

3 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.