Hola, tengo un problema que no lo logro resolver utilizando las funciones substring de PHP para extraer de una cadena entera de apellidos, los apellidos individuales por separado, voy a copiar el código:
Este es el HTML
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Prueba formulario PHP</title>
</head>
<body>
<h1>En éste formulario todos los campos son requeridos</h1>
<form action="formulario.php" method="post">
<fieldset> <!--etiqueta para agrupar elementos de un formulario-->
<p> <!-- definir un parrafo-->
<label for="nombre">Nombre: </label>
<input type="text" name="nombre" id="nombre">
<br/> <br/>
<label for="apellidos">Apellidos: </label>
<input type="text" name="apellidos" id="apellidos">
<br/> <br/>
<label for="birthdate">Fecha de nacimiento: </label>
<input type="date" name="birthdate">
<br/> <br/>
<label for="email">Email: </label>
<input type="text" name="email" id="email">
<br/> <br/>
<input type="radio" name="sexo" id="varon" value="Varón">
<label for="varon">Varón: </label>
<br/> <br/>
<input type="radio" name="sexo" id="mujer" value="Mujer">
<label for="mujer">Mujer: </label>
<br/> <br/>
<input type="submit" value="Enviar">
<input type="reset">
</p>
</fieldset>
</form>
</body>
</html>
Y este es el PHP:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sin título</title>
</head>
<body>
<?php $nombre = $_REQUEST['nombre']; $apellidos = $_REQUEST['apellidos']; $birthdate = $_REQUEST['birthdate']; $email = $_REQUEST['email']; $sexo = $_REQUEST['sexo']; $apellido1=""; $apellido2=""; function ExtraeApellido1 ($apellidos) { //funcion para extraer el primer apellido for ($i = 0; $i < $apellidos; $i++) { if ($apellidos[i]==" "){ //si tiene más de un 1 apellido voy a buscar el espacio $apellido1 = substr($apellidos, 0, $i); //extraigo con substring desde la posicion 0 del string apellidos hasta el espacio el primer apellido } } return $apellido1;}function ExtraeApellido2 ($apellidos) { //funcion para extraer el segundo apellido for ($i = 0; $i < $apellidos; $i++) { if ($apellidos[i]==" "){ //si tiene más de un 1 apellido voy a buscar el espacio $apellido2 = substr($apellidos, ($i+1)); //extraigo con substring desde la posicion del espacio +1 hasta el final el segundo apellido } } return $apellido2;}function CalculaEdad( $fecha ) { //funcion para calcular edad a partir de una fecha date tipo yyyy-mm-dd list($Y,$m,$d) = explode("-",$fecha); return( date("md") < $m.$d ? date("Y")-$Y-1 : date("Y")-$Y );}$apellido1 = ExtraeApellido1($apellidos);$apellido2 = ExtraeApellido2($apellidos);$edad = CalculaEdad($birthdate);echo "Tu nombre es " . $nombre . " y tu primer apellido es " . $apellido1 . " y tu segundo apellido " . $apellido2 . " y tienes " . $edad . " años."; ?>
</body>
</html>
El error me da al retornar el valor de las variables $apellido1 y $apellido2, parece ser que no retorna nada
Con apellidos tipo López Martín podrías usar strpos para encontrar la posición del espacio en blanco entre apellidos y luego substr para extraer directamente apellido1 y apellido2
<html>
<head>
<title>Extracion de apellidos</title>
</head>
<body>
<?php//$apellidos="Gutierrez Ayala";//$apellidos="Lopez Martin";$apellidos="Goirigorreketechea Mentxakasubiroguea";$posicion_espacio=strpos($apellidos, " ");$longitud=strlen($apellidos);$apellido1=substr($apellidos,0,$posicion_espacio);$apellido2=substr($apellidos,$posicion_espacio+1,$longitud-$posicion_espacio);echo "Longitud de los apellidos : " . $longitud . "<br>";echo "Posición del espacio : " . $posicion_espacio . "<br>";echo "Apellido1 : #" . $apellido1 . "#<br>";echo "Apellido2 : #" . $apellido2 . "#";?>
</body>
</html>
[code]
El problema son los apellidos compuestos: Lopez de la Huerta Martin de la Fragua ;D