Manejar valores de un SELECT con PHP y REGEX.
Hoy traigo un artículo algo especial. Algo que me ha tocado vivir de primera mano y que me tuvo en jaque ciertas horas.
Como bien sabemos, mediante PHP podemos trabajar con los datos de nuestros formularios: campos de texto, textarea, botones, etc etc… para trabajar con ellos según nos convenga.
Voy a plantearos un escenario más específico.
Pasar el id y el tipo de categoría de un formulario para poder trabajarlos desde PHP y poder realizar una inserción en base de datos. Pero esos datos , vienen de un bucle donde se muestra el tipo de categoria a seleccionar. Así que sólo podría coger el tipo de categoría pero no el id. ¿O si?.
Estando condicionado por dicho bucle, necesitaba pasar los 2 valores del select SI O SI. Así que manos a la obra:
<select name="tipoP"> <?php $query = "select * from tipoproducto"; $data = $producto->prepare($query); $data->execute(); while($row=$data->fetch(PDO::FETCH_ASSOC)){ $tipoProducto=$row['tipoProducto']; if($row['tipoProducto'] == " ") echo 'sin valor'; else echo '<option value="'.$row['tipoProducto'], $row['idTipo'].'">'.$row['tipoProducto'].'</option>'; }//while ?> </select>
Dentro del bucle, pasamos el tipo producto y el id en el mismo option.
Ruedas Chinas23 <— Esto sería como llegaría a nuestro script.
¿Y ahora qué?. Pues vamos a procesar esa cadena.
He comentado que quería por una parte el tipo de categoria: ‘Ruedas Chinas’ y por otro el id: 23.
$split_str= $_POST["tipoP"]; //Aqui va nuestro minichorizillo Ruedas Chinas23
Vamos a darle amor con unas funciones muy molonas de PHP: intval, strval y preg replace.
//Separamos la cadena mediant id y tipo producto, respectivamente $idTipo = intval(preg_replace('/[^0-9]+/', '', $split_str)); //Añadimos espacio en blanco para categorías de mas de un palabra $tipoCategoria = strval(preg_replace('/[^a-z A-Z áéíóúÁÉÍÓÚñÑ.]+/iu', ' ', $split_str));
Y ya está!. Ya tenemos nuestras variables por separado y listas para ser insertadas o lo que se necesite.
Esto es un código rápido y sencillo para todos. Es mejorable, pero no entra en este mini tutorial.
¡A picar con cabeza!.