Diferencia entre revisiones de «Usuario:ManuelRomero/PHP/Examen segunda»

De WikiEducator
Saltar a: navegación, buscar
(Página creada con «===Ejercicio de xajax=== *Este ejercicio simplemente tiene que añadir el usuario en una lista y escribir el nombre y fecha del último usuario insertado *Muchos/as os hab...»)
 
 
(3 revisiones intermedias por el mismo usuario no mostrado)
Línea 82: Línea 82:
  
 
}}
 
}}
 +
===Ejercicio de base de datos===
 +
*Es importante leer el enunciado, hay personas que parece que no lo han leído pues no han seguido las especificaciones
 +
*La parte de base de datos se repite continuamente. En este caso he creado un fichero de funciones para las acciones con bases de datos. me refiero a la parte de parametrización prepare ... bind_param ... execute ...
 +
*Siguiendo las especificaciones  se implementan los siguientes ficheros
 +
{{Plegable|hide|index.php|
 +
<source lang=php>
 +
<!DOCTYPE html>
 +
<html>
 +
    <head>
 +
        <meta charset="UTF-8">
 +
        <title></title>
 +
    </head>
 +
    <body>
 +
        <form action="." method="POST">
 +
            <input type="submit" value="Registrarse" name="submit">
 +
            <input type="submit" value="Acceder" name="submit">
 +
        </form>
 +
        <?php
 +
        if (isset($_POST['submit'])) {
 +
          $pagina = $_POST['submit'];
 +
          header("Location:$pagina.php");
 +
        }
 +
        ?>
 +
    </body>
 +
</html>
 +
</source>
 +
}}
 +
{{Plegable|hide|Regi
 +
strarse.php|
 +
<source lang=php>
 +
<?php
 +
if (isset($_POST['resgistrarse'])) {
 +
  require_once ("funciones.php");
 +
 +
    $nombre = $_POST['nombre'];
 +
 +
 +
  //Previamente a crear el usuario verificamos que no exista
 +
  //Si es así procedemos a insertarlo
 +
  if (existe( $nombre))
 +
    echo "El usuario $nombre ya existe, elije otro nombre";
 +
  else {
 +
    $sentencia = "insert into usuario values (?,?,?)";
 +
    //Ejecutamos insertar
 +
    //Este método nos devolverá la password generada o null si no se ha insertado
 +
    //Actuamos en consecuencia redirigiendo según especificaciones
 +
    $pass = insertar( $nombre, $sentencia);
 +
    if ($pass != null) {
 +
      echo "<h2>Se ha creado el usuario con password $pass </h2>";
 +
      header("refresh:5;url=index.php ");
 +
    } else {
 +
      echo "<h2>No se ha podido insertar el usuario $nombre </h2>";
 +
      header("refresh:5;url=index.php ");
 +
    }
 +
  }
 +
}
 +
?>
 +
<html>
 +
    <head>
 +
        <meta charset="UTF-8">
 +
        <title></title>
 +
    </head>
 +
    <body>
 +
        <form action="Registrarse.php" method="POST">
 +
            Nombre
 +
 +
            <input type="text"  name="nombre">
 +
            <input type="submit" value="Registrarse" name="resgistrarse">
 +
        </form>
 +
    </body>
 +
</html>
 +
</source>
 +
}}
 +
{{Plegable|hide|cambioPass.php|
 +
<source lang=php>
 +
<?php
 +
if (isset($_POST['cambiar'])) {
 +
  require_once ("funciones.php");
 +
 +
//Necesito el nombre para poder verificar si son datos correctos
 +
  $nombre = $_POST['nombre'];
 +
  $pass = $_POST['pass'];
 +
  $pass2 = $_POST['pass2'];
 +
 +
  //Las pass han de coincidir
 +
  if ($pass == $pass2) {
 +
    $con = conectarse();
 +
   
 +
    //Tengo en cuneta si actualizo o no e informo de ello
 +
    $ok = actualizar($nombre, $pass);
 +
    if ($ok == true) {
 +
      header("Location:accedido.php?nom=$nombre");
 +
    } else {
 +
      echo "<h1> No se ha podido actualizar la password</h1>";
 +
    }
 +
  } else {
 +
    echo "<h1> Las password no coinciden, han de coincidir</h1>";
 +
  }
 +
}
 +
?>
 +
 +
 +
 +
<html>
 +
    <head>
 +
        <meta charset="UTF-8">
 +
        <title></title>
 +
    </head>
 +
    <body>
 +
        <form action="cambioPass.php" method="POST">
 +
            Nueva Passowrd
 +
            <input type="text"  name="pass">
 +
            Confirmar Nueva Password
 +
            <input type="text"  name="pass2">
 +
            <input type="hidden"  name="nombre" value = "<?php echo $_GET['nom'] ?>" />
 +
 +
            <input type="submit" value="Acutalizar Password" name="cambiar">
 +
 +
        </form>
 +
    </body>
 +
</html>
 +
 +
</source>
 +
}}
 +
{{Plegable|hide|Acceder.php|
 +
<source lang=php>
 +
<?php
 +
if (isset($_POST['acceder'])) {
 +
  require_once ("funciones.php");
 +
 +
  //Conecto a la BD y leo el nombre
 +
  $con = conectarse();
 +
  $nombre = $_POST['nombre'];
 +
  $pass = $_POST['pass'];
 +
 +
 +
 +
  //Previamente a crear el usuario verificamos que no exista
 +
  //Si es así procedemos a insertarlo
 +
  $control = verifica( $nombre, $pass);
 +
 +
  switch ($control) {
 +
    case 0: //Usuario correcto, primer acceso => Cambiar password
 +
      echo "<h2>Por ser el primer acceso vas a cambiar el password</h2>";
 +
      header("refresh:3;url=cambioPass.php?nom=$nombre");
 +
      exit();
 +
 +
      break;
 +
    case 1: //Usuario correcto, segudos accesos => Ya cambió la password
 +
      header("Location:accedido.php?nom=$nombre");
 +
      exit();
 +
      break;
 +
    case -1:
 +
      echo "<h1>Usuario / Password no son correctos</h1>";
 +
      break;
 +
  }
 +
}
 +
?>
 +
<html>
 +
    <head>
 +
        <meta charset="UTF-8">
 +
        <title></title>
 +
    </head>
 +
    <body>
 +
        <form action="Acceder.php" method="POST">
 +
            Nombre
 +
            <input type="text"  name="nombre">
 +
            Password
 +
            <input type="text"  name="pass">
 +
 +
            <input type="submit" value="Acceder" name="acceder">
 +
 +
        </form>
 +
    </body>
 +
</html>
 +
 +
</source>
 +
}}
 +
{{Plegable|hide|accededido.php|
 +
<source lang=php>
 +
<?php
 +
 +
/*
 +
* To change this license header, choose License Headers in Project Properties.
 +
* To change this template file, choose Tools | Templates
 +
* and open the template in the editor.
 +
*/
 +
$nombre = $_GET['nombre'];
 +
echo "<h1>Has accedido como $nombre</h1>";
 +
?>
 +
 +
</source>
 +
}}
 +
{{Plegable|hide|funciones.php|
 +
<source lang=php>
 +
<?php
 +
 +
/**
 +
* Se conecta a la base de datos con los parámetros establecidos
 +
*/
 +
function conectarse() {
 +
  $con = new mysqli("localhost", "root", "root", "usuarios");
 +
  if ($con->connect_errno != 0)
 +
    die("Abortamos la app, no se ha podido conectar Error " . $con->connect_error);
 +
  return $con;
 +
}
 +
 +
/**
 +
*
 +
* @param conexion mysqli $con
 +
* @param string $nombre
 +
* @param type $sentencia
 +
* @return type
 +
*/
 +
function insertar($nombre, $sentencia) {
 +
  $con=  conectarse();
 +
  $pass = genera_password();
 +
  $retorno = null;
 +
 +
  $stmt = $con->stmt_init();
 +
  $stmt = $con->prepare($sentencia);
 +
  $acceso = 0;
 +
  $stmt->bind_param("ssi", $nombre, $pass, $acceso);
 +
  if ($stmt->execute())
 +
    $retorno = $pass;
 +
 +
  $stmt->close();
 +
  return $retorno;
 +
  $con=null;
 +
}
 +
 +
/**
 +
* Generamos una password de 8 caracteres cogidos del código ascii
 +
* Evitamos los 32 primeros, muchos de ellos no imprimibles
 +
* También los 128 últimos por ser extendidos
 +
* @return string
 +
*/
 +
function genera_password() {
 +
  $pass = "";
 +
  for ($i = 0; $i < 8; $i++) {
 +
    $n = rand(33, 128);
 +
    $pass .= chr($n);
 +
  }
 +
  return $pass;
 +
}
 +
 +
/**
 +
*
 +
* Verifica si ese nombre existe en la base de datos con la que estamos trabajanod
 +
* @param string $nombre
 +
* @return boolean true/false según exista o no el nombre
 +
*/
 +
function existe($nombre) {
 +
  $con = conectarse();
 +
  $retorno = false;
 +
  $sentencia = "select * from usuario where nombre = ? ";
 +
  $stmt = $con->prepare($sentencia);
 +
  $stmt->bind_param("s", $nombre);
 +
  $a = $stmt->execute();
 +
  $stmt->store_result();
 +
 +
  if ($stmt->num_rows > 0)
 +
    $retorno = true;
 +
 +
  $stmt->close();
 +
  $con=null;
 +
 +
  return $retorno;
 +
}
 +
 +
/**
 +
* Actualiza la password del usuario con la nueva facilitada
 +
* Además pone en acceso el valor 1 o true que indica que el usuario ya cambió la passwrod
 +
* @param string $nom
 +
* @param string $pass
 +
* @return boolean indica si se ha actualizado  o no
 +
*/
 +
function actualizar($nom, $pass) {
 +
  $con=  conectarse();
 +
  $retorno = false;
 +
  $sentencia = "update usuario set pass = ?, acceso = ? where nombre = ?";
 +
  $stmt = $con->prepare($sentencia);
 +
  $acceso = 1;
 +
  $stmt->bind_param("sis", $pass, $acceso, $nom);
 +
 +
  $a = $stmt->execute();
 +
 +
  if ($stmt->affected_rows == 1)
 +
    $retorno = true;
 +
 +
  return $retorno;
 +
}
 +
 +
 +
/**
 +
* Verifica si el usuario y password existen en la base de datos
 +
* También en caso de que exista verifica si ha cambiado o no la password
 +
* @param type $usuario
 +
* @param type $pass
 +
* @return int retorno  uno de estos valores
 +
* -1 => El usuario/pass no existen en la base de datos
 +
* 0 => El usuario existe pero tiene que cambiar la password
 +
* 1 El usuario existe y ya cambió la password por lo que puede acceder
 +
*/
 +
function verifica( $usuario, $pass) {
 +
  $con = conectarse();
 +
  $sentencia = "select acceso from usuario where nombre =? and pass = ?";
 +
  $stmt = $con->prepare($sentencia);
 +
  $stmt->bind_param("ss", $usuario, $pass);
 +
  $a = $stmt->execute();
 +
  $stmt->store_result();
 +
  $stmt->bind_result($acceso);
 +
  $stmt->fetch();
 +
 +
  if ($stmt->num_rows == 0)
 +
    $retorno = -1;
 +
  else
 +
    $retorno = $acceso;
 +
  return $retorno;
 +
}
 +
 +
?>
 +
 +
</source>
 +
}}
 +
 +
===ejercicio Soap===
 +
*Este ejercicio solo lo han realizado 4 personas
 +
*El resto no lo he tenido en cuenta valorando este porcentaje de forma directa en los otros dos ejericicios (cada ejercicio valía mas)
 +
{{Plegable|hide|cliente.php|
 +
<source lang=php>
 +
 +
 +
<?php
 +
$url = "http://localhost/PhpProject9/server.php";
 +
$uri = "http://localhost/PhpProject9/";
 +
 +
//Iniciamos los objetos client
 +
$cliente = new SoapClient(null, array('location' => $url, 'uri' => $uri));
 +
 +
//Leemos los datos del formulario e invoocamos a los métodos del servicio
 +
if (isset($_POST['convertir'])) {
 +
    $grados = $_POST['temperatura'];
 +
    switch ($_POST['convertir']) {
 +
        case "centigrados":
 +
            $rtdo = $cliente->cen($grados);
 +
            break;
 +
        case "faremheit":
 +
            $rtdo = $cliente->far($grados);
 +
            break;
 +
        case "kelvin":
 +
            $rtdo = $cliente->kel($grados);
 +
            break;
 +
    }
 +
 +
 +
    //    print_r($resultado);
 +
}
 +
?>
 +
<html>
 +
    <head>
 +
    </head>
 +
    <body>
 +
        <form action="cliente.php" method="POST">
 +
            <fieldset style="width:30%">
 +
                <legend>Grados centígrados</legend>
 +
                Grados centígrados: <input type="text" name="temperatura"/>
 +
                <br/>
 +
                <input type="submit" name="convertir" value="centigrados"/>
 +
            </fieldset>
 +
        </form>
 +
        <form action="cliente.php" method="POST">
 +
            <fieldset style="width:30%">
 +
                <legend>Grados farenheit</legend>
 +
                Grados farenheit: <input type="text" name="temperatura"/>
 +
                <br/>
 +
                <input type="submit" name="convertir" value="farenheit"/>
 +
            </fieldset>
 +
        </form>
 +
        <form action="cliente.php" method="POST">
 +
            <fieldset style="width:30%">
 +
                <legend>Grados kelvin </legend>
 +
                Grados kelvin: <input type="text" name="temperatura"/>
 +
                <br/>
 +
                <input type="submit" name="convertir" value="kelvin"/>
 +
            </fieldset>
 +
        </form>
 +
        <?php
 +
        if (isset($resultado)) {
 +
            echo "<h1>RESUTLADO DE COVNERSIÓN</h1>";
 +
            echo "<h2>Centígrados:" . $resultado['c'] . "</h2>";
 +
            echo "<h2>Kelvin " . $resultado['k'] . "</h2>";
 +
            echo "<h2>Farenheit " . $resultado['f'] . "</h2>";
 +
        }
 +
        ?>
 +
 +
    </body>
 +
</html>
 +
</source>}}
 +
 +
{{Plegable|hide|server.php|
 +
<source lang=php>
 +
 +
<?php
 +
 +
require("servicios.php");
 +
 +
$uri = "http://localhost/PhpProject9/";
 +
 +
$server = new SoapServer(null, array('uri' => $uri));
 +
 +
$server->addFunction("cen");
 +
$server->addFunction("far");
 +
$server->addFunction("kel");
 +
 +
$server->handle();
 +
?>
 +
</source>}}
 +
{{Plegable|hide|servicios.php|
 +
<source lang=php>
 +
<?php
 +
 +
//Estas funciones convierten según las fórmulas
 +
//Cualquiera de ellas retorna un array donde se especifican todos los valores
 +
 +
function cen($centigrados) {
 +
 +
    $resultado['c'] = $centigrados;
 +
    $resultado['f'] = ($centigrados * 9 / 5) + 32;
 +
    $resultado['k'] = $centigrados + 273.15;
 +
    return $resultado;
 +
}
 +
 +
function far($farenheit) {
 +
 +
    $resultado['c'] = (f - 32) * 5 / 9;
 +
    $resultado['f'] = $farenheit;
 +
    $resultado['k'] = ($farenheit + 459.67) * 5 / 9;
 +
    return $resultado;
 +
}
 +
 +
function kel($kelvin) {
 +
 +
    $resultado['c'] = $kelvin - 273.15;
 +
    $resultado['f'] = ($kelvin * 9 / 5) - 459.67;
 +
    $resultado['k'] = $kelvin;
 +
    return $resultado;
 +
}
 +
 +
</source>}}

Última revisión de 23:16 25 may 2017

Ejercicio de xajax

  • Este ejercicio simplemente tiene que añadir el usuario en una lista y escribir el nombre y fecha del último usuario insertado
  • Muchos/as os habéis liado con sesiones y otro tema para la lista. No me lo había imaginado esto, no hace falta en absoluto, aunque así también se puede conseguir
  • Os adjunto el código que como veis es bastante sencillo

Ejercicio de base de datos

  • Es importante leer el enunciado, hay personas que parece que no lo han leído pues no han seguido las especificaciones
  • La parte de base de datos se repite continuamente. En este caso he creado un fichero de funciones para las acciones con bases de datos. me refiero a la parte de parametrización prepare ... bind_param ... execute ...
  • Siguiendo las especificaciones se implementan los siguientes ficheros

ejercicio Soap

  • Este ejercicio solo lo han realizado 4 personas
  • El resto no lo he tenido en cuenta valorando este porcentaje de forma directa en los otros dos ejericicios (cada ejercicio valía mas)