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>

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);
}