https://tecnovortex.com/la-verdadera-anecdota-del-ingeniero-y-el-dueno-de-la-fabrica/
Autor: Juan Pablo Fuentes
Formador de programación y bases de datos
CRUD actores Sakila
Index.php
<h1>Mantenimiento actores de Sakila</h1> <form> <input type="hidden" name="action" value="insert"> Nombre:<input type="text" name="first_name"> Apellidos:<input type="text" name="last_name"> <input type="submit" class="btn btn-info"> </form> <table class="table"> <tr><td>Id</td><td>Nombre</td><td>Apellidos</td><td>Acciones</td></tr> <?php $server = "localhost"; $user = "root"; $password = ""; $db = "sakila"; $action = filter_input(INPUT_GET, 'action'); $last_name = filter_input(INPUT_GET, 'last_name', FILTER_SANITIZE_STRING); $first_name = filter_input(INPUT_GET, 'first_name', FILTER_SANITIZE_STRING); $actor_id = filter_input(INPUT_GET, 'actor_id', FILTER_VALIDATE_INT); try { $conn = new PDO("mysql:host=$server;dbname=$db", $user, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Acciones sobre la base de datos if ($action == 'insert' && !empty($first_name) && !empty($last_name)) { $sql = "insert into actor (first_name, last_name) values ('$first_name','$last_name')"; $conn->exec($sql); } if ($action == "delete" && !empty($actor_id)) { $sql = "delete from actor where actor_id=$actor_id"; $conn->exec($sql); } if ($action == 'update' && !empty($first_name) && !empty($last_name) && !empty($actor_id)) { $sql = "update actor set first_name='$first_name', last_name='$last_name' where actor_id=$actor_id"; $conn->exec($sql); } $sql = "select * from actor"; $resul = $conn->query($sql); while ($fila = $resul->fetch(PDO::FETCH_ASSOC)) { ?> <tr><td><?= $fila['actor_id'] ?></td> <td><?= $fila['first_name'] ?></td> <td><?= $fila['last_name'] ?></td> <td><a href="?action=delete&actor_id=<?= $fila['actor_id'] ?>">Borrar</a> <a href="update.php?actor_id=<?= $fila['actor_id'] ?>">Editar</a></td></tr> <?php } } catch (Exception $ex) { echo "Ha ocurrido un error<br/>" . $ex->getMessage(); } ?></table>
update.php
<h1>Editar actor</h1> <?php $server = "localhost"; $user = "root"; $password = ""; $db = "sakila"; $actor_id = filter_input(INPUT_GET, 'actor_id', FILTER_VALIDATE_INT); if (!empty($actor_id)) { try { $conn = new PDO("mysql:host=$server;dbname=$db", $user, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "select * from actor where actor_id=$actor_id"; $resul=$conn->query($sql); $fila=$resul->fetch(); } catch (Exception $ex) { echo "Ha ocurrido un error<br/>" . $ex->getMessage(); } } ?> <form action="index.php"> <input type="hidden" name="action" value="update"> <input type="hidden" name="actor_id" value="<?=$actor_id?>"> Nombre:<input type="text" name="first_name" value="<?=$fila['first_name']?>"> Apellidos:<input type="text" name="last_name" value="<?=$fila['last_name']?>"> <input type="submit" class="btn btn-info"> </form>
final.php
<h1>Consulta actores de Sakila</h1> <form> Nombre:<input type="text" name="first_name"> Apellidos:<input type="text" name="last_name"> <input type="submit" class="btn btn-info" value="Buscar"> </form> <table class="table"> <tr><td>Id</td><td>Nombre</td><td>Apellidos</td></tr> <?php $server = "localhost"; $user = "root"; $password = ""; $db = "sakila"; $last_name = filter_input(INPUT_GET, 'last_name', FILTER_SANITIZE_STRING); $first_name = filter_input(INPUT_GET, 'first_name', FILTER_SANITIZE_STRING); try { $conn = new PDO("mysql:host=$server;dbname=$db", $user, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "select * from actor where 1"; if (!empty($first_name)){ $sql.=" and first_name like '%$first_name%'"; } if (!empty($last_name)){ $sql.=" and last_name like '%$last_name%'"; } $resul = $conn->query($sql); while ($fila = $resul->fetch(PDO::FETCH_ASSOC)) { ?> <tr><td><?= $fila['actor_id'] ?></td> <td><?= $fila['first_name'] ?></td> <td><?= $fila['last_name'] ?></td> </tr> <?php } } catch (Exception $ex) { echo "Ha ocurrido un error<br/>" . $ex->getMessage(); } ?></table>
Web scrapping páginas amarillas
<?php function extraeRegexp($cadena, $inicio, $fin) { preg_match_all('#' . $inicio . '(.*?)' . $fin . '#', $cadena, $matches); return $matches[1]; } $total = []; for ($i = 1; $i <= 6; $i++) { $url = "https://www.paginasamarillas.es/search/mascotas-y-tiendas-de-animales/all-ma/barcelona/all-is/barcelona/all-ba/all-pu/all-nc/$i?what=mascotas+y+tiendas+de+animales&where=barcelona&ub=false&qc=true"; $web = file_get_contents($url); $urls = extraeRegexp($web, "<div class=\"envio-consulta\"><a href=\"", "\""); $total = array_merge($total, $urls); } $fichero = fopen("mascotas.csv", "w"); fwrite($fichero, utf8_decode( "Nombre;Categoria;Telefono;Direccion;Cp;Ciudad;Provincia;Web\n")); foreach ($total as $url) { $web = file_get_contents($url); $nombre = extraeRegexp($web, '<h1 itemprop="name">', '</h1>')[0]; $categoria = extraeRegexp($web, '<span class="category">', '</span>')[0]; $telefono = extraeRegexp($web, '<span itemprop="telephone">', '</span>')[0]; $direccion = extraeRegexp($web, '<span itemprop="streetAddress">', '</span>')[0]; $cp = extraeRegexp($web, '<span itemprop="postalCode">', '</span>')[0]; $ciudad = extraeRegexp($web, '<span itemprop="addressLocality">', '</span>')[0]; $provincia = @extraeRegexp($web, '<span class="addressState">', '</span>')[0]; $webaddress = @str_replace("?utm_campaign=paginasamarillas&utm_source=paginasamarillas&utm_medium=referral", "", extraeRegexp($web, 'class="fa icon-link"></i><a href="', '"')[0]); echo $nombre . ";" . $categoria . ";" . $telefono . ";" . $direccion . ";" . $cp . ";" . $ciudad . ";" . $provincia . ";" . $webaddress . "<br/>"; fwrite($fichero, utf8_decode($nombre . ";" . $categoria . ";" . $telefono . ";" . $direccion . ";" . $cp . ";" . $ciudad . ";" . $provincia . ";" . $webaddress . "\n")); } fclose($fichero); ?>
Subir archivos
Subir archivos:
<form method="post" enctype="multipart/form-data"> <input type="file" name="nombre"> <input type="submit"> </form> <?php if (isset($_FILES['nombre'])) { $tipo = explode("/", $_FILES['nombre']['type']); if ($tipo[0] == "image") { $carpeta = "images"; } else { $carpeta = "upload"; } move_uploaded_file($_FILES['nombre']['tmp_name'], "./" . $carpeta . "/" . $_FILES['nombre']['name']); } ?>
Ver contenido carpetas:
<h1>Contenido de upload</h1> <?php $archivos = scandir("upload/"); for ($i = 2; $i < count($archivos); $i++) { ?> <p><a href="upload/<?= $archivos[$i] ?>"><?= $archivos[$i] ?></a> <a href="borrar.php?archivo=upload/<?= $archivos[$i] ?>">Borrar archivo</a> </p> <?php } ?> <h1>Contenido de images</h1> <?php $archivos = scandir("images/"); for ($i = 2; $i < count($archivos); $i++) { ?> <img width="100" src="images/<?= $archivos[$i] ?>"> <a href="borrar.php?archivo=images/<?= $archivos[$i] ?>">Borrar archivo</a> <?php } ?>
Borrar archivo:
<?php $mensaje="Archivo borrado con éxito"; $archivo= filter_input(INPUT_GET, "archivo"); if (file_exists($archivo)){ if(!unlink($archivo)){ $mensaje="ha habido un error borrando el archivo"; } } else { $mensaje="El archivo que ha enviado ($archivo) no existe"; } ?> <h1><?=$mensaje?></h1> <a href="carpetas.php">Volver a carpetas</a>
Php mysql
¡No hay que pestañear!
Web scrapping
//Url a escrapear $url="http://trifulcas.com"; //Archivo para guardar $file="scrap.txt"; $visitadas=[]; $fichero=fopen($file,"w"); scrap($url); fclose($fichero); die(); function scrap($url){ global $visitadas,$fichero; //Guardo la url en visitadas $visitadas[]=$url; //Leo el contenido de la web $web= file_get_contents($url); //Proceso de datos: en este caso simplemente guardo el texto fwrite($fichero,$url); fwrite($fichero,strip_tags($web)); //Busco todos los enlaces de la web preg_match_all("<a href=[\"\'](.+?)[\"\']>", $web, $matches); foreach($matches[1] as $enlace){ //Si son enlaces internos y no han sido visitados llamamos a la función recursivamente if (strpos($enlace,$url)!==false && !in_array($enlace, $visitadas)){ scrap($enlace); } } }
Leer una web y extraer datos
<?php function extrae($cadena, $inicio, $fin) { $pos = strpos($cadena, $inicio); if ($pos === false) { return ""; } $pos2 = strpos($cadena, $fin, $pos + strlen($inicio)); if ($pos2 === false) { return ""; } return substr($cadena, $pos + strlen($inicio), $pos2 - $pos - strlen($inicio)); } function extraeRegexp($cadena, $inicio, $fin) { preg_match_all('#' . $inicio . '(.*?)' . $fin . '#', $cadena, $matches); return $matches[1]; } //Lee archivo y lo mete en un string $datos = file_get_contents("https://www.guiadelocio.com/teatro-y-danza"); $pos = strpos($datos, "item-listado-AB"); $items = []; while ($pos !== false) { $pos2 = strpos($datos, "</div>", $pos); $items[] = substr($datos, $pos, $pos2 - $pos); $pos = strpos($datos, "item-listado-AB", $pos + 1); } $fichero = fopen("teatro.csv", "a"); foreach ($items as $item) { $titulo = strip_tags(extraeRegexp($item, 'alt="', '"')[0]); echo $titulo . "<br/>"; $resto = strip_tags(extraeRegexp($item, '<p class="ubicacion">', '</p>')[0]); echo $resto . "<br/>"; $resto = explode(",", $resto); print_r($resto); fwrite($fichero, utf8_decode(date("d-m-Y") . ";" . $titulo . ";" . $resto[0] . ";" . $resto[1] . "\n")); } fclose($fichero); //echo($datos); ?>
Funciones de ficheros
http://php.net/manual/en/ref.filesystem.php
https://www.w3schools.com/php/php_ref_filesystem.asp
<?php $fichero=fopen("datos.txt","a"); fwrite($fichero,"Lo que quiero que se escriba en el fichero\n"); fwrite($fichero,"otra cosa"); fclose($fichero); $fichero=fopen("tabla.txt","a"); for($i=1;$i<=10;$i++){ fwrite($fichero,$i." x 5 = ".($i*5)."\n"); } fclose($fichero); $fichero=fopen("datos.txt","r"); while(!feof($fichero)){ $linea=fgets($fichero); echo $linea."<br/>"; } fclose($fichero); ?>
Ejercicio equipos
Index:
<h1>Página super guay</h1> Hola, dinos tu nombre para saber como dirigirnos hacia ti: <form action="panel.php"> <input type="text" name="nombre"> <input type="submit"> </form>
Panel:
<?php session_start(); require_once 'librerias.php'; $nombre = filter_input(INPUT_GET, 'nombre', FILTER_SANITIZE_STRING); if (empty($nombre) && !isset($_SESSION['nombre'])) { ?> <h2>No has introducido ningún nombre. Por favor vuelve atrás.</h2> <a href="index.php">Vuelve atrás y pon un nombre ¡hombre!</a> <?php } else { if (!empty($nombre)) { $_SESSION['nombre'] = $nombre; } else { $nombre = $_SESSION['nombre']; } ?> <h1>Hola <?= $nombre ?>, bienvenido a la página superguay</h1> <a href="equipos.php">Introducir equipos</a><br/> <a href="resultados.php">Introducir resultados</a> <?php if (isset($_SESSION['equipos'])) { ?> <a href="resultados.php">Introducir resultados</a> <?php pintaEquipos($_SESSION['equipos']); } if (isset($_SESSION['equipos']) && isset($_SESSION['resultados'])) {?> <a href="resultados.txt">Descargar resultados</a> <?php muestraResultados($_SESSION['equipos'], $_SESSION['resultados']); } } ?>
equipos:
<h1>Introduzca los equipos separados por comas</h1> <form action="guardar_equipos.php"> <input type="text" name="equipos" size="100"> <input type="submit"> </form>
guardar_equipos:
<?php session_start(); require_once 'librerias.php'; // Recuperar los equipos que nos han mandado $equipos = filter_input(INPUT_GET, "equipos"); // Si está vacío poner un aviso y enlace a equipos.php if (empty($equipos)) { ?> <h1>No has mandado equipos, inténtalo de nuevo</h1> <a href="equipos.php">Volver a equipos</a> <?php } else { //Si no está vacío convertir la lista de equipos en un array $tabla = explode(",", $equipos); //guardarlo en la variable de sesión equipos $_SESSION['equipos'] = $tabla; // Y mostrarlo como una tabla HTML pintaEquipos($tabla); } ?> <a href="panel.php">Volver al panel</a>
resultados:
<?php session_start(); require_once 'librerias.php'; if(isset($_SESSION['equipos'])){ pintaResultados($_SESSION['equipos']); } else{ ?> <h1>No hay equipos definidos, vuelva atrás</h1> <a href="panel.php">Volver atrás</a> <?php } ?>
guardar_resultados:
<?php session_start(); require_once 'librerias.php'; // Recuperar los resultados que nos han mandado $resultados = filter_input(INPUT_POST, 'resultado',FILTER_DEFAULT, FILTER_REQUIRE_ARRAY); // Si está vacío poner un aviso y enlace a equipos.php if (empty($resultados)) { ?> <h1>No has mandado resultados, inténtalo de nuevo</h1> <a href="resultados.php">Volver a resultados</a> <?php } else { //guardarlo en la variable de sesión resultados $_SESSION['resultados'] = $resultados; // Y mostrarlo como una tabla HTML muestraResultados($_SESSION['equipos'],$_SESSION['resultados']); guardaResultados($_SESSION['equipos'],$_SESSION['resultados']); } ?> <a href="panel.php">Volver al panel</a>
librerias:
<?php function pintaEquipos($tabla) { ?> <table> <tr><td>Equipos</td></tr> <?php foreach ($tabla as $valor) { ?> <tr><td><?= ucfirst($valor) ?></td></tr> <?php } ?> </table> <?php } function pintaResultados($tabla) { ?> <form action="guardar_resultados.php" method="post"> <table> <tr><td>Resultados</td></tr> <?php for ($i = 0; $i < count($tabla); $i += 2) { ?> <tr><!--<td><?php echo $tabla[$i]; if (isset($tabla[$i + 1])) { echo " - " . $tabla[$i + 1]; } ?></td>--> <td><?= $tabla[$i] . (isset($tabla[$i + 1]) ? " - " . $tabla[$i + 1] : "") ?></td> <td><input type="text" name="resultado[]"></td> </tr> <?php } ?> </table> <input type="submit"> </form> <?php } function muestraResultados($equipos,$resultados) { ?> <table> <tr><td>Resultados</td></tr> <?php for ($i = 0; $i < count($equipos); $i += 2) { ?> <tr> <td><?= $equipos[$i] . (isset($equipos[$i + 1]) ? " - " . $equipos[$i + 1] : "") ?></td> <td><?=$resultados[$i/2]?></td> </tr> <?php } ?> </table> <?php } function guardaResultados($equipos, $resultados, $archivo = "resultados.txt",$tipo="w") { $fichero = fopen($archivo, $tipo); fwrite($fichero, "Resultados\n"); for ($i = 0; $i < count($equipos); $i += 2) { fwrite($fichero, $equipos[$i] . (isset($equipos[$i + 1]) ? " - " . $equipos[$i + 1] : "")); fwrite($fichero, " : ".$resultados[$i / 2] . "\n"); } fclose($fichero); }