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í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.