no lo entiendo

mikimiguelon
29 de Diciembre del 2004
Hola q tal, tengo apache, php y mysql en un windows xp, y aunq no estoy muy muy seguro creo q todo funciona bien (lo instale ayer).
El caso es q cuando entro como localhost a la pagina de phpinfo, no hay ningun problema, me aperece el cuadro tipico de informacion del php, pero he intentado ejecutar algun script que tenia hecho en linux y no funciona ninguno, este es un ejemplo:



formulario.html

<html>
<head>
<script type="text/javascript">
<!--
function evalua(formulario)
{
if(formulario.emilio.value=="") {
alert("Completa el e-mail");
return false;
}
}
-->
</script>

</head>
<body>
<form action="arroba.php" method="get" onSubmit="return evalua(this);">
<p><b>E_mail</b>:
<br> <input name="emilio" type="text" size="52">
<input type="submit" value="enviar">
</form>
</body>
</html>



arroba.php

<html>
<body>
<?php
$encontrado=0;
for($i=0;$i<strlen($emilio);$i++){
if($emilio[$i]=="@"){
$encontrado=1;
for ($j=$i;$j<strlen($emilio);$j++)
if ($emilio[$j]==".")
$encontrada=2;
}
}
if($encontrado!=2){
echo"ERROR EN EL MAIL";
}
else{
echo"<b> SU E-MAIL ES : $emilio</b> ";
}
?>
</body>
</html>









pase lo que pase, siempre me dice "ERROR EN EL EMAIL"
en caso de ejecutarlo desde el navegador sin localhost ni nada el resultado es este:

SU E-MAIL ES : $emilio "; } ?>



Alguien sabe que pasa? como pedo arreglarlo?
bueno gracias por todo.

eth0
29 de Diciembre del 2004
Desde hace ya unas cuantas versiones, PHP tiene desactivada la opción register_globals por defecto. Esto previene un agujero de seguridad que permitiría a cualquiera sobreescribir variables simplemente pasándolas por GET.

La forma correcta de acceder a las variables que recibes de un formulario es usar los arrays asociativos $_GET y $_POST. Así que, en lugar de trabajar directamente con $emilio, deberás usar $_GET['emilio'].

mikimiguelon
29 de Diciembre del 2004
Bueno mira, esto si funciona:


<html>
<body>
<?php
$emilio=$_GET['emilio'];
echo"<b> SU E-MAIL ES : $emilio</b> ";
?>
</body>
</html>


pero esto otro no:


<html>
<body>
<?php
$emilio=$_GET['emilio'];
$encontrado=0;
for($i=0;$i<strlen($emilio);$i++){
if($emilio[$i]=="@"){
$encontrado=1;
for ($j=$i;$j<strlen($emilio);$j++)
if ($emilio[$j]==".")
$encontrada=2;
}
}
if($encontrado!=2){
echo"ERROR EN EL MAIL";
}
else{
echo"<b> SU E-MAIL ES : $emilio</b> ";
}
?>
</body>
</html>


siempre sale el mensaje de ERROR EN EL MEAIL, sabes pq puede ser? (teniendo en cuenta que el email esta bien escrito claro)

Jaime Vera
29 de Diciembre del 2004
A mi me parecía todo correcto pero tu estas declarando lo siguiente:
if ($emilio[$j]==".")
$encontrada=2; //$encontrada
}
y como condicion lo siguiente:
if($encontrado!=2){ // $encontrado
echo"ERROR EN EL MAIL";
}
y creo que son dos variables distintas:
$encontrada
$encontrado

Jamás te dará el resultado que quieres pues aunque $encontrada sí sea igual a 2, $encontrado simplemente va en NULL.

SALUDOS!!!! ( jjaimevera )

mikimiguelon
29 de Diciembre del 2004
Eres un crack, jeje. Muchas gracias.
Que fallo mas tonto....

mikimiguelon
29 de Diciembre del 2004
Gracias pero no funciona, ahora es peor :S
si pongo algo sencillo como esto:

<html>
<body>
<?php
echo "$_GET['emilio']";
?>
</body>
</html>


directamente no aparece nada, la pagina en blanco. por si sirve de algo en la barra de direccion aparece esto "http://localhost/php/arroba.php?emilio=ejemplo%40ejemplo.com"

Alguna otra idea?