Usuario:ManuelRomero/PHP/Examen segunda
De WikiEducator
< Usuario:ManuelRomero | PHP
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 xajax |
---|
<?php //cargo la librería de xajax require ('xajax_core/xajax.inc.php'); $ajax = new xajax(); //Si quiero obtener el debug //$ajax->configure('debug', false); //Estas funciones podrán ser invocadas de forma asíncrona desde el cleinte $ajax->register(XAJAX_FUNCTION, 'modificar_html'); //Este método procesará las llamadas que reciba la página //Imporante llamarla antes de que el guión genere ningúna salida. $ajax->processRequest(); //Por si cambiara la ubicación de xajax_js //$ajax->configure('javascript URI','./'); //La librería necesita generar código java script en la página que envíamos al cliente $ajax->printJavascript(); /** * * @param string $nombre nombre insertado en el formulario * @return \xajaxResponse objeto xajax para actualizar la página en el cliente */ function modificar_html($nombre) { $respuesta = new xajaxResponse(); $texto = "Te has conectado como $nombre a las " . date("H-i-s", time()); //Insertamos un nuevo texto en un elemento html $respuesta->assign('datos', 'innerHTML', $texto); //Actualizamos un elemento en la página html $lista = "<li>$nombre</li>"; $respuesta->append('lista', 'innerHTML', $lista); return $respuesta; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Página de ejemplo ajax</title> </head> <script type="text/javascript"> function modificar() { var nombre = document.getElementById('nombre') xajax_modificar_html(nombre.value); } </script> <body> <div id="datos"><h2>No te has conectado hasta ahora</h2></div> <h1>Esta imagen no va a cambiar</h1> <img src="imagen.jpg" /><br /> <form action="javascript:void(null)" method="post" > <label for="nombre">Nombre </label> <input type="text" name="nombre" id="nombre"> <br /> <input type="submit" value="actualizar" onclick= 'modificar();' /> </form> <ol> <div id="lista"></div> </ol> </body> </html> |
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
index.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> |
Regi strarse.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> |
cambioPass.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> |
Acceder.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> |
accededido.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>"; ?> |
funciones.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; } ?> |
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)
cliente.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> |
server.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(); ?> |
servicios.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; } |