Ver Mensaje Individual
  #8 (permalink)  
Antiguo 07/01/2010, 19:32
Avatar de mauro770
mauro770
 
Fecha de Ingreso: mayo-2009
Mensajes: 109
Antigüedad: 15 años
Puntos: 1
Respuesta: ctype_alpha ñ y tildes

que tal cesar ...
estube viendo tu tema ...

Código PHP:
$nombres =$_POST['nombres'];

function 
val_car($i,$esp 1){
if(
$esp 1){
$i_val preg_replace("/[^a-zA-Z\sñÑáéíóúÁÉÍÓÚ]/"""$i);
if(
$i !== $i_val){
return 
false;
}else{return 
true;}
}
if(
$esp 2){
$i_val preg_replace("/[^0-9]/"""$i);
if(
$i !== $i_val){
return 
false;
}else{return 
true;}
}
}

$val_a val_car($nombres,1);

if(
$val_a == false){
echo 
utf8_encode('ERROR: Tu nombre no puede llevar números.');
die ();

asi como esta aqui, php empieza a leer el script y encuentra que $_POST['nombres'] tiene un valor NULL por que en ningun momento enviaste valores por medio de un formulario; entonces $nombres = NULL; en el momento de hacer el llamado de la funcion val_car($_nombres,1); le estamos pasando este valor que en realidad no puede ser tratado por preg_replace(); ya que NULL no es una cadena string si no que es un booleano por eso produce un conflicto en la funcion dejando a $val_a = NULL/FALSE;. entonces una vez sabiendo esto vamos a la otra parte :
hasta ahora $val_a = NULL/FALSE;.

Código PHP:
if($val_a == false){//comprueba si el falso o no , y como ya sabemos si lo es.
echo utf8_encode('ERROR: Tu nombre no puede llevar números.');// aqui imprimes que te da error por que $val_a =FALSE
die (); // aqui cortas el script y el resto de la ejecucion de la pagina es por ello que no alcanzavas a ver el
// input para poder probar realmente el script.


esto lo solucionas facil, solo le dices a PHP realice todo lo que tu quieras siempre y cuando exista el array $_POST['enviar'] que lo invocas al apretar el boton "enviar", entonces en ese monento envias el formulario y $_POST['nombres'] ya tiene un valor para poder ser tratado por val_car.

entonces el codigo quedaria asi(lo modifique para que ocupe menos espacio) :

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<?php 
function val_car($i,$esp 1){
if(
$esp == 1){$permitido "/[^a-zA-Z\sñÑáéíóúÁÉÍÓÚ]/" ;}
if(
$esp == 2){$permitido "/[^0-9]/" ;}
$i_val preg_replace($permitido""$i);
if(
$i !== $i_val){
return 
false;
}else{return 
true;}
}
if(isset(
$_POST['enviar'])){// aca le decimos que prosiga siempre hallan pulsado el boton enviar
$nombres =$_POST['nombres'];
$val_a val_car($nombres,1);
if(
$val_a == false){
echo 
utf8_encode('ERROR: Tu nombre no puede llevar números.');
die ();
}  
if(
$val_a == true){echo utf8_encode('NO HA SURGIDO NIGUN ERROR');}  
}
?> 
<form id="form1" name="form1" method="post" action="">
  <label>
  <input type="text" name="nombres" id="nombres" />
  </label>
  <label>
  <input type="submit" name="enviar" id="enviar" value="Enviar" />
  </label>
</form>
</body>
</html>
espero que te sirva. cualquier cosa comentas.
saludos.