Acceso a datos con PDO

Conectar al servidor:

 $server = "localhost";
 $user = "root";
 $password = "";
 $db = "sakila";
 try {
     $conn = new PDO("mysql:host=$server;dbname=$db;charset=UTF8", $user, $password);
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 } catch (Exception $e) {
      echo "Connection failed: " . $e->getMessage();
 }

Ejecutar una consulta de acción (también funcionaría con query):

$sql = "update category set name='$nombre' where category_id=$category_id";
            if ($conn->exec($sql) === true) {...}

Recorrer los registros:

$sql = "select * from category ";
$resul = $conn->query($sql);
if ($resul->rowCount()>0) {
  while ($row = $resul->fetch()) {
...
}
}

Obtener todos los registros de una sola vez:

$sql = "select * from category ";
$resul = $conn->query($sql);
$rows=$resul->fetchAll()

Insertar y obtener el último id:

 $sql = "insert into category (name) values ('" . addslashes($nombre) . "')";
            if ($conn->query($sql) == true) {
                $last_id = $conn->lastInsertId();
                echo "Insertada categoría $nombre con id " . $last_id;
            } else {
                echo "Error " . $conn->error;
            }

Enlazar resultados con variables:

$row = $conn->query('SELECT first_name,last_name from actor');
$row->bindColumn('first_name', $nombre);

$row->bindColumn(2, $apellido);
while ($row->fetch()) {
    print "$nombre $apellido. 
\n";
}

Preparar sentencias y luego pasar valores:

$st = $conn->prepare('INSERT INTO actor (first_name,last_name) VALUES (?,?)');
$st->execute(array('Vito','Corleone'));
$st->execute(array('Juan','Perez'));

$st = $conn->prepare('select * from actor where actor_id>?');
$st->execute(array(50));
print_r($st->fetchAll());

Pasar valores con nombre:

$st = $conn->prepare('select * from actor where first_name like :first_name');
$st->execute(array(':first_name'=>'%z%'));

Enlazar parámetros con variables:

$actores=['juan'=>'perez','ana'=>'pi','rosa'=>'buj'];
$st = $conn->prepare('insert into actor (first_name,last_name) values(:first_name,:last_name)');
$st->bindParam(':first_name', $first_name);
$st->bindparam(':last_name', $last_name);
foreach($actores as $first_name=>$last_name){
$st->execute();
}

Número de filas (Ojo, no funciona en todas las bases de datos):

$resul->rowCount()

Ejecutar con arrays:

 $sentencia = $conn->prepare("INSERT INTO actor( first_name,last_name) VALUES (?,?)");
 $sentencia->execute(array('asd','dsa'));

 $sentencia = $conn->prepare("INSERT INTO actor( first_name,last_name) VALUES (:f,:l)");
 $sentencia->execute(array('f'=>'asd','l'=>'dsa'));

Enlace manual php:

http://php.net/manual/es/pdo.prepared-statements.php

Tutorial de PDO

Un ejemplo:

<body>
        <form action="#">
            País:
            <input type="text" name="pais">
            <input type="submit">
        </form>
        <?php
        $server = "localhost";
        $user = "root";
        $password = "";
        $db = "sakila";
        try {
            $conn = new PDO("mysql:host=$server;dbname=$db;charset=UTF8", $user, $password);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          //Para insertar, recupero el pais de GET y si hay país lo inserto
            $pais = filter_input(INPUT_GET, "pais", FILTER_SANITIZE_MAGIC_QUOTES);
            if (!empty($pais)) {
                $sql = "insert into country (country) values('$pais')";
                if ($conn->exec($sql) > 0) {
                    echo "Registro insertado<br/>";
                }
            }
            $sql = "select * from country ORDER BY COUNTRY_ID DESC";
            $q = $conn->query($sql);
            while ($row = $q->fetch()) {

                echo $row['country_id'] . "-" . $row['country'] . "<br>";
            }
        } catch (Exception $e) {
            echo "Connection failed: " . $e->getMessage();
        }
        ?>
    </body>

Tutoriales Laravel

https://richos.gitbooks.io/laravel-5/content/

https://www.cloudways.com/blog/laravel-tutorials-for-beginners/

https://www.ecodeup.com/category/programacion-con-laravel/

https://laravel-news.com/your-first-laravel-application

https://desarrolloweb.com/manuales/manual-laravel-5.html

Soluciones examen


<?php
//1 Muestra 56
//2
$colores=["Rojo","naranja","amarillo","verde","cian","azul","magenta"];

//3
$res=1;
for($i=1;$i<=12;$i++){
$res*=$i;
}
echo $res;

//4

function inicioFin($cadena){
return substr($cadena,0,1)==substr($cadena,-1);
}
//5
function sumaArray($array){
$suma=0;
foreach($array as $v){
$suma+=$v;
}
return $suma;
}
function sumaArrayPro($array){
return array_sum($array);
}
//6
function invertirCad($array){
$res=[];
foreach($array as $v){
$res[]= strrev($v);
}
return $res;
}

//7
function arrayAleatorio($tam,$min,$max){
$res=[];
for($i=0;$i<$tam;$i++){
$res[]=mt_rand($min,$max);
}
return $res;
}

//8
function finde(){
return date("w")==0 || date("w")==6;
}

//9
function quitar($cadena,$letras){
$cadena= utf8_encode($cadena);
for($i=0;$i<strlen($letras);$i++){
$cadena=
str_replace(substr($letras,$i,1), "", $cadena);
}
return utf8_decode($cadena);
}
function contarConsonantes($cadena){
$cadena= strtolower($cadena);
$c=quitar($cadena,"bcdfghjklmnñpqrstvwxyz");
return strlen($cadena)-strlen($c);
}

function masConsonantes($a,$b){
if (contarConsonantes($a)> contarConsonantes($b)){
return $a;
} else {
return $b;
}
}

Soluciones ejercicios

<?php

//Ejercicio 15
function medio($a,$b,$c){
   $tabla=[$a,$b,$c];
   sort($tabla);
   return $tabla[1];
}
function medio2($a,$b,$c){
    if (($a>=$b && $a<=$c) || 
        ($a>=$c && $a<=$b)){
        return $a;
    }
     if (($b>=$a && $b<=$c) || 
        ($b>=$c && $b<=$a)){
        return $b;
    }
     if (($c>=$b && $c<=$a) || 
        ($c>=$a && $c<=$b)){
        return $c;
    }
}
echo medio2(1,1,3);
echo "<hr>";
echo medio2(3,1,3);
echo "<hr>";
echo medio2(7,1,3);
echo "<hr>";
echo medio2(6,6,3);
echo "<hr>";
echo medio2(1,14,3);
echo "<hr>";
function inicioFin($cadena){
    if(strlen($cadena)<4){
        return $cadena;
    } else {
        $inicio=substr($cadena,0,2);
        $fin=substr($cadena,-2);
        return $inicio.$fin;
    }
}
echo inicioFin("patata");

function masCorta($array){
    $corta=$array[0];
    foreach($array as $v){
        if(strlen($v)<strlen($corta)){
            $corta=$v;
        }
    }
    return $corta;
}

echo masCorta(['hola','que','tal']);

function mezcla($a,$b){
    $c=[];
    foreach($a as $v){
        $c[]=$v;
    }
    foreach($b as $v){
        $c[]=$v;
    }
    return $c;
}
function mezcla2($a,$b){
    return array_merge($a,$b);
}
function quitar($cadena,$letras){
    $cadena= utf8_encode($cadena);
    for($i=0;$i<strlen($letras);$i++){
        $cadena= 
        str_replace(substr($letras,$i,1), "", $cadena);
    }
    return utf8_decode($cadena);
}
function contarConsonantes($cadena){
    $cadena= strtolower($cadena);
    $c=quitar($cadena,"bcdfghjklmnñpqrstvwxyz");
    return strlen($cadena)-strlen($c);
}
//Asumiendo palabra normal
function contarConsonatesNormal($palabra){
    $cont=0;
    for($i=0;$i<strlen($palabra);$i++){
        $letra=substr($palabra,$i,1);
        if ($letra!="a" && $letra!="e"&& $letra!="i" 
            && $letra!="o" && $letra!="u"  ){
            $cont++;
        }
    }
    return $cont++;
}
echo "<hr>";
echo contarConsonantes("cacaípéíü    ..&%/&%/&hudfete");
echo contarConsonatesNormal("cacahuete");


function masConsonantes($cadena){
    $palabras=explode(" ",$cadena);
    $almacen="";
    foreach($palabras as $palabra){
        if(contarConsonantes($palabra)>
                contarConsonantes($almacen)){
            $almacen=$palabra;
        }
    }
    return $almacen;
}
echo "<hr>";
echo masConsonantes("En un lugar de la mancha");
echo "<hr>";
function malditosLunes(){
    $lunes=[];
    $inicio= mktime(0,0,0,1,1,2019);
    for($i=1;$i<=365;$i++){
        $fecha= mktime(0,0,0,1,$i,2019);
      /*  echo date("d-m-Y",$fecha)."<br>";
        echo date("d-m-Y",$inicio)."<br>";*/
        //Otra manera
        $inicio= strtotime("+1day",$inicio);
        if(date("w",$fecha)==1){
            $lunes[]=date("d-m-Y",$fecha);
        }
    }
    return $lunes;
}
print_r(malditosLunes());

Funciones archivos y ejemplos

<?php

$f = fopen("datos.txt", "r");
//recorro el archivo
$lineas=[];
while (!feof($f)) {
    $lineas[] = fgets($f);  
}
fclose($f);
print_r($lineas);
//Abre, lee, lo pasa a array y lo cierra
$otramanera=file("datos.txt");
print_r($otramanera);
//Abre, lee, lo pasa a cadena y lo cierra
$cadena= file_get_contents("datos.txt");
echo $cadena;

$cadena= file_get_contents("https://www.pampling.com/");
echo str_ireplace("camiseta", "cacahuete", $cadena);

$f=fopen("log.txt","a");

fwrite($f,"Log de números\r\n");

for($i=1;$i<=10;$i++){
    fwrite($f,$i."\r\n");
}

fclose($f);

Ejercicio apuntes

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        $carpeta = "archivos/";
        if (isset($_FILES['fichero'])) {
            if (substr($_FILES['fichero']['name'], -4) == ".txt") {
                move_uploaded_file($_FILES['fichero']['tmp_name'], $carpeta . $_FILES['fichero']['name']);
                echo "Archivo subido";
            } else {
                echo "El archivo no es .txt<br>";
            }
        }
        $nombre = filter_input(INPUT_POST, "nombre");
        if (!empty($nombre) && !file_exists($carpeta.$nombre)){
            mkdir($carpeta.$nombre);
        }
        $lista= scandir($carpeta);
        array_shift($lista);
        array_shift($lista);
        $archivos="";
        $carpetas="";
        foreach($lista as $v){
            if (is_dir($carpeta.$v)){
                $carpetas.=$v."<br>";
            } else {
                $archivos.=$v."<br>";
            }
        }
        ?>
        <form method="post" enctype="multipart/form-data">
            Escoge archivo: <input type="file" name="fichero">
            <input type="submit">
        </form>
        <form method="post">
            Introduzca la carpeta: 
            <input type="text" name="nombre">
            <input type="submit">
        </form>
        <table>
            <tr><td>Archivos</td><td>Carpetas</td></tr>
            <tr><td>
                <?=$archivos?>
                </td><td>
                 <?=$carpetas?>
                </td></tr>
        </table>
    </body>
</html>

Ejercicios repaso

Variables

1. Crear dos variables de tipo cadena y mostrarlas concatenadas
2. Crear una variable num que valga 10, restarle 5, multiplicarla por 7, incrementar uno y mostrar el resultado
3. ¿Que nos muestra el siguiente código?

 $a=5;
$b=6; 
echo $b.$a;

Estructuras de control

4. Si tengo una variable $sueldo quiero un código que me imprima por pantalla “ILEGAL” si es menor que el SMI (900€)
5. Tengo las variables $usuario y $password. Poner un código que me imprima “Usuario autorizado” si el usuario es “juan” y el password es “1234”
6. Lo mismo pero que también esté autorizado el usuario “eva” y password “7890” (es decir, que estén autorizados los dos)
7. Crear una página web que nos pida dos números y nos diga si la diferencia entre los dos es mayor que diez o no
Ejemplo: si pongo 4 y 9 me dirá que no. Si pongo 4 y 40 me dirá que sí.
8. Crear una página que me pida un día de la semana y me diga si es festivo (en el caso de sábado y domingo) o no (el resto)

Bucles

9. Crear una página que nos pida un número y nos muestre la tabla de multiplicar de ese número
10. Crear una página que nos muestre la suma de los números entre 1 y 100
11. Crear una página que nos muestre una lista (ul) con los primeros 10 cuadrados (1,4,9,16,…)
12. Crear una página que nos muestre una tabla de 5×5 y que cada celda tenga un valor consecutivo

Funciones

13. Crear una función que le pasemos un nombre y un apellido y nos devuelva el valor concatenado.
14. Crear una función que le pasemos un nombre y nos devuelva “Hola ” y el nombre
15. Crear una función a la que pasemos tres números y nos devuelva el que está en la mitad (ni el más alto ni el más bajo). Si hay algún número que sea igual a otro que nos devuelva ese número.
16. Crear una función a la que le pasemos dos números y nos devuelva true si los dos son pares o impares y false si uno es par y el otro es impar.

Funciones de cadena

17. Crear una función que nos diga cuantas consonantes tiene una palabra.
18. Crear una función a la que le pasemos dos palabras y nos diga cual es la más larga
19. Crear una función a la que le pasemos una frase y nos sustituya la ‘a’ por ‘4’ y la ‘e’ por ‘3’
20. Crear una función a la que le pasemos una cadena y nos devuelva una cadena formada por las dos primeras letras y por las dos últimas letras. Si la longitud de la cadena es menor que cuatro devolver la misma cadena

Funciones de array

21. Crear una función a la que le pasemos un número y nos devuelva un array con los números desde el 1 al número que me pasen.Ejemplo, si le paso un 5 me devuelve [1,2,3,4,5]
22. Crear una función a la que le pasemos un array con cadenas y nos devuelva la cadena más corta
23. Crear una función a la que le pasemos dos arrays y nos devuelva un array con los dos mezclados
24. Crear una función a la que le pasemos una cadena y nos devuelva la palabra con más consonantes

Funciones de fecha

25. Crear una función vencimiento que le pasemos un número de días y nos devuelva la fecha que resultará de sumarle a hoy el número de días que nos pasan.
26. Crear una función que nos devuelva un array con todas las fechas de este año que caen en lunes
27. Crear una función que le pasemos un año y nos diga si es bisiesto o no
28. Crear una función a la que le pasemos un año y un mes y nos devuelva que día de la semana empieza (en texto)

Galería de fotos

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>

            div.polaroid {
                width: 30%;
                background-color: white;
                box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
                margin-bottom: 25px;
                display: inline-block;
               
            }
            .polaroid img{
                width:300px;
                height:300px;
            }
            div.container {
                text-align: center;
                padding: 10px 20px;
            }
        </style>
    </head>
    <body>
        <h1>Galería de imágenes</h1>
        <a href="?borrar=pepe">test</a>
        <form action="?" method="post" enctype="multipart/form-data">
            Selecciona una foto:
            <input type="file" name="foto">
            <input type="submit">

        </form>
        <?php
        $borrar= filter_input(INPUT_GET, "borrar");
        if(!empty($borrar) && file_exists("fotos/".$borrar)){
            unlink("fotos/".$borrar);
        }
        if (isset($_FILES['foto'])) {
            if (strpos($_FILES['foto']['type'], "image") !== false) {
                move_uploaded_file($_FILES['foto']['tmp_name'], "fotos/" . $_FILES['foto']['name']);
                echo "Imagen subida<br>";
            } else {
                echo "Formato de archivo incorrecto. <br>";
            }
        }

        //Ver un listado con los nombres de las imágenes que me han subido en fotos
        $archivos = scandir("fotos");
        array_shift($archivos);
        array_shift($archivos);
        foreach ($archivos as $archivo) {
            ?>
            <div class="polaroid">
                <img src="fotos/<?= $archivo ?>" alt="<?= $archivo ?>" style="width:100%">
                <div class="container">
                    <p><?= $archivo ?> | <a href="?borrar=<?= $archivo ?>">Borrar</a></p>
                </div>
            </div>
           <?php
        }
        ?>
    </body>
</html>