Os lo pongo a continuación:
Sobre un proyecto nuevo PHP (PracticaPDO), realiza las siguientes tareas:
- Lanza el script practicaPDO.sql
- Crea el siguiente script conexion.php:
<?php
$servidor = 'localhost';
$bd = 'practicapdo';
$usuario = 'root';
$contrasenia = '';
?>
- Agrega el siguiente script index.php que permita crear el siguiente menú que lanzará los scripts de los siguientes apartados:
- Crea el siguiente script consulta-comun.php que visualice todos los registros de la tabla item:
Nota: Para cada apartado de los siguientes, crear un fichero .html que
recoja el argumento o argumentos con los que trabajará el script .php.
- Crea el siguiente script consulta-con-parametros.php que visualice el registro que se le pasa como argumento (6 en el ejemplo).
- Ídem para un script insertar.php que reciba un ítem y lo inserte. A continuación visualizar todos los ítems (en este ejemplo el ítem añadido sería Android)
- Ídem del anterior para un script actualizar.php que reciba un identificador (que deberá existir) y un ítem, y actualice el valor del ítem de la tabla con el nuevo valor recibido (en el ejemplo se recibe el 2 y ASP)
- Ídem del anterior para un script borrar.php que reciba un identificador (que deberá existir) y lo borre (en el ejemplo se recibe el identificador 3)
Estructura del
proyecto:
El código de todos los archivos es bastante extenso, así que lo mejor para no sobrecargar la entrada es ponerlo en modo "spoiler". Para ver todo el código, pulsa en el siguiente botón, y para ocultarlo, vuelve a darle.
ARCHIVO SQL PARA LA BASE DE DATOS
DROP DATABASE IF
EXISTS practicaPDO;
CREATE DATABASE
practicaPDO;
USE practicaPDO;
DROP TABLE IF EXISTS
`items`;
CREATE TABLE `items`
(
`id_item` int(11)
NOT NULL auto_increment,
`item` varchar(40) collate
utf8_unicode_ci NOT NULL,
PRIMARY KEY
(`id_item`)
) ENGINE=MyISAM
DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
AUTO_INCREMENT=7 ;
INSERT INTO `items`
(`id_item`, `item`) VALUES
(1, 'PHP'),
(2, 'Mootools'),
(3, 'Google Maps'),
(4, 'Javascript'),
(5, 'Actionscript'),
(6, 'c#');
ARCHIVO SCREEN.CSS
@font-face{
font-family: "indieFlower";
src: url('../fuentes/IndieFlower.ttf');
}
/* CONFIGURACIÓN
BÁSICA */
*{
margin: 0;
padding: 0;
}
html, body{
height: 100%;
}
body{
background-color: #47555f;
color: #8a9cb8;
font-size: 16px;
font-family: "indieFlower";
}
a{
text-decoration: none;
}
/* FIN CONFIGURACIÓN
BÁSICA */
/* HEADER */
header{
background-color: #303F9F;
color: #FFF;
height: 10%;
}
ul{
text-align: center;
height: 100%;
vertical-align: middle;
line-height: 350%;
}
ul.menu li{
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
display: inline-block;
padding-left: .5%;
padding-right: .5%;
height: 100%;
}
ul.menu li a{
font-size: 1.5em;
color: #FFF;
}
ul.menu li:hover{
background-color: #FFF;
transition-duration: .3s;
background-color: #0a0d1c;
border-bottom: thick solid #4357c2;
}
ul.menu li:hover a{
color: #C5CAE9;
transition-duration: 1s;
}
/* FIN HEADER */
/* CONTENIDO
PRINCIPAL*/
div.contenido{
width: 100%;
height: 90%;
text-align: center;
}
div.contenido img{
margin-top: 15%;
}
table.resultados{
text-align: center;
margin: 0 auto;
width: 50%;
padding-top: 2%;
}
table.resultados tr
td, table.resultados tr th{
min-width: 50%;
}
table.resultados
thead tr{
background-color: #000;
color: #b1c3d2;
}
table.resultados
tbody tr.par{
background-color: #b1d2c3;
color: #1f2023;
}
table.resultados
tbody tr.impar{
background-color: #87a7b6;
color: #1f2023;
}
/* FIN CONTENIDO
PRINCIPAL */
ARCHIVO SUBPAGINAS.CSS
.pedirDatos{
width: 30%;
margin: 0 auto;
padding-top: 5%;
text-align: center;
}
.pedirDatosTitle{
font-size: 2.5em;
}
.pedirDatosInput{
display: inline-block;
width: 60%;
margin: 0 auto;
margin-top: 1%;
font-size: 1.3em;
border-radius: 15px;
text-align: center;
}
.pedirDatosSubmit{
display: inline-block;
margin: 0 auto;
width: 60%;
font-size: 1.3em;
margin-top: 5%;
border: 1px solid #1f2f47;
border-radius: 25px;
transition-duration: .5s;
background-color: #2e466e;
color: #FFF;
box-shadow:inset 0px 0px 15px 3px #23395e;
background:linear-gradient(to bottom,
#2e466e 5%, #415989 100%);
cursor:pointer;
padding:2% 5%;
text-shadow:0px 1px 0px #263666;
}
.pedirDatosSubmit:hover{
width: 100%;
}
.botonRetorno{
display: inline-block;
margin: 0 auto;
text-align: center;
}
ARCHIVO SCRIPTS.JS
function
ajaxFunction() {
var xmlHttp;
try {
xmlHttp=new XMLHttpRequest();
return xmlHttp;
} catch (e) {
try {
xmlHttp=new
ActiveXObject("Msxml2.XMLHTTP");
return xmlHttp;
} catch (e) {
try
{
xmlHttp=new
ActiveXObject("Microsoft.XMLHTTP");
return xmlHttp;
} catch (e) {
alert("Tu navegador no soporta
AJAX!");
return false;
}}}
}
function
Enviar(_pagina,capa) {
var ajax;
ajax = ajaxFunction();
ajax.open("POST", _pagina, true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = function() {
if (ajax.readyState==1){
document.getElementById(capa).innerHTML
= " Aguarde por favor...";
}
if (ajax.readyState == 4) {
document.getElementById(capa).innerHTML=ajax.responseText;
}}
ajax.send(null);
}
ARCHIVO INDEX.PHP
<!DOCTYPE
html>
<!--
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.
-->
<html
lang="es">
<head>
<meta charset="UTF-8">
<title>Consultas
PDO</title>
<link type="text/css"
rel="stylesheet" href="css/screen.css">
<link type="text/css"
rel="stylesheet" href="css/subpaginas.css">
<script
type="text/javascript"
src="js/jquery-1.11.3.js"></script>
<script
type="text/javascript"
src="js/scritps.js"></script>
</head>
<body>
<header>
<ul class="menu">
<li><a
href="javascript:Enviar('comun.php','contenido')">Consulta
común</a></li>
<li><a
href="javascript:Enviar('subpaginas/consultaConParametros.html','contenido')">Consulta
con parámetros</a></li>
<li><a
href="javascript:Enviar('subpaginas/insertar.html','contenido')">Insertar</a></li>
<li><a
href="javascript:Enviar('subpaginas/actualizar.html','contenido')">Actualizar</a></li>
<li><a
href="javascript:Enviar('subpaginas/borrar.html','contenido')">Borrar</a></li>
</ul>
</header>
<div class="contenido"
id="contenido">
<a
href="http://programandoapasitos.blogspot.com"
target="_blank"><img src="img/iconoWeb.PNG"
alt="Programando a pasitos"></a>
</div>
</body>
</html>
ARCHIVO CONEXION.PHP
<?php
$servidor = 'localhost';
$bd = 'practicapdo';
$usuario = 'root';
$password = 'root';
?>
ARCHIVO COMUN.PHP
<!DOCTYPE html>
<!--
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.
-->
<html>
<head>
<meta charset="UTF-8">
<link type="text/css"
rel="stylesheet" href="css/screen.css">
<title></title>
</head>
<body>
<?php
include 'conexion.php';
$contador = 0; // Para clases en
los resultados
try{
// Conexión a la base de datos
$baseDatos = new
PDO("mysql:host=$servidor;dbname=$bd", $usuario, $password);
// Atributo para reportar error
$baseDatos->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Sentencia SQL
$stmt =
$baseDatos->prepare("SELECT * FROM items");
// Ejecutar la consulta
$stmt->execute();
// Imprimir resultados
echo '<table
class="resultados">';
echo '<thead>';
echo '<tr>';
echo '<th>Id</th>';
echo
'<th>Item</th>';
echo '<tr>';
echo '</thead>';
echo '<tbody>';
while ($row =
$stmt->fetch()){
if ($contador % 2 == 0){
echo '<tr
class="par">';
}
else{
echo '<tr
class="impar">';
}
echo '<td>' .
$row['id_item'] . '</td>';
echo '<td>' .
$row['item'] . '</td>';
echo '</tr>';
$contador++;
}
echo '</tbody>';
echo '</table>';
}
catch (PDOException $e) {
echo $e->getMessage();
}
finally {
if ($baseDatos != NULL)
$baseDatos = NULL;
}
?>
</body>
</html>
ARCHIVO ACTUALIZAR.HTML
<!DOCTYPE
html>
<!--
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.
-->
<html>
<head>
<meta charset="UTF-8">
<title>Consultas
PDO</title>
<link type="text/css"
rel="stylesheet" href="../css/subpaginas.css">
</head>
<body>
<div>
<form class="pedirDatos"
action="subpaginas/actualizar.php" method="POST">
<h1
class="pedirDatosTitle">ACTUALIZAR CAMPO</h1>
<input
class="pedirDatosInput" type="text" name="id"
placeholder="Id del lenguaje">
<input class="pedirDatosInput"
type="text" name="lenguaje" placeholder="Nuevo
Lenguaje">
<input
class="pedirDatosSubmit" type="submit"
name="enviar" value="Actualizar">
</form>
</div>
</body>
</html>
ARCHIVO ACTUALIZAR.PHP
<?php
include
'../conexion.php';
/* Función para
capturar los datos pasados */
function
recoge($var){
$tmp = (isset($_REQUEST[$var]))
?
trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
: "";
return $tmp;
}
$identificador = recoge("id");
$lenguaje =
recoge("lenguaje");
$consulta =
"UPDATE items SET item = ? WHERE id_item = ?";
try{
// Conexión a la base de datos
$baseDatos = new
PDO("mysql:host=$servidor;dbname=$bd", $usuario, $password);
// Atributo para reportar error
$baseDatos->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Sentencia SQL
if ($identificador != ""){
$stmt =
$baseDatos->prepare($consulta);
$stmt->execute(array($lenguaje,$identificador));
}
}
catch (PDOException
$e) {
echo $e->getMessage();
}
finally {
if ($baseDatos != NULL)
$baseDatos = NULL;
header('Location:
consultaConParametros.php');
}
ARCHIVO BORRAR.HTML
<!DOCTYPE
html>
<!--
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.
-->
<html>
<head>
<meta charset="UTF-8">
<title>Consultas
PDO</title>
<link type="text/css"
rel="stylesheet" href="../css/subpaginas.css">
</head>
<body>
<div>
<form
class="pedirDatos" action="subpaginas/borrar.php"
method="POST">
<h1
class="pedirDatosTitle">BORRAR REGISTRO</h1>
<input
class="pedirDatosInput" type="text" name="id"
placeholder="Id del lenguaje">
<input
class="pedirDatosInput" type="text"
name="lenguaje" placeholder="Nuevo Lenguaje">
<input
class="pedirDatosSubmit" type="submit" name="enviar"
value="Borrar">
</form>
</div>
</body>
</html>
ARCHIVO BORRAR.PHP
<?php
include
'../conexion.php';
/* Función para
capturar los datos pasados */
function
recoge($var){
$tmp = (isset($_REQUEST[$var]))
? trim(htmlspecialchars($_REQUEST[$var],
ENT_QUOTES, "UTF-8"))
: "";
return $tmp;
}
$identificador =
recoge("id");
$lenguaje =
recoge("lenguaje");
$consulta =
"DELETE FROM items WHERE id_item = ? OR item = ?";
try{
// Conexión a la base de datos
$baseDatos = new
PDO("mysql:host=$servidor;dbname=$bd", $usuario, $password);
// Atributo para reportar error
$baseDatos->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Sentencia SQL
$stmt = $baseDatos->prepare($consulta);
$stmt->execute(array($identificador,$lenguaje));
}
catch (PDOException
$e) {
echo $e->getMessage();
}
finally {
if ($baseDatos != NULL)
$baseDatos = NULL;
header('Location:
consultaConParametros.php');
}
ARCHIVO CONSULTACONPARAMETROS.HTML
<!DOCTYPE
html>
<!--
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.
-->
<html>
<head>
<meta charset="UTF-8">
<title>Consultas
PDO</title>
<link type="text/css"
rel="stylesheet" href="../css/subpaginas.css">
</head>
<body>
<div>
<form
class="pedirDatos"
action="subpaginas/consultaConParametros.php"
method="POST">
<h1
class="pedirDatosTitle">BUSCAR</h1>
<input
class="pedirDatosInput" type="text" name="id"
placeholder="Id del lenguaje">
<input class="pedirDatosInput"
type="text" name="lenguaje" placeholder="Nombre del
lenguaje">
<input
class="pedirDatosSubmit" type="submit"
name="enviar" value="Consultar">
</form>
</div>
</body>
</html>
ARCHIVO CONSULTACONPARAMETROS.PHP
<!DOCTYPE
html>
<!--
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.
-->
<html>
<head>
<meta charset="UTF-8">
<link type="text/css"
rel="stylesheet" href="../css/screen.css">
<link type="text/css"
rel="stylesheet" href="../css/subpaginas.css">
<title></title>
</head>
<body>
<?php
include '../conexion.php';
/* Función para capturar los datos
pasados */
function recoge($var){
$tmp = (isset($_REQUEST[$var]))
?
trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
: "";
return $tmp;
}
$identificador =
recoge("id");
$lenguaje =
recoge("lenguaje");
$consulta = "SELECT * FROM
items WHERE id_item = ? OR item = ?";
$consultaNormal = "SELECT *
FROM items";
$contador = 0; // Para clases en
los resultados
try{
// Conexión a la base de datos
$baseDatos = new
PDO("mysql:host=$servidor;dbname=$bd", $usuario, $password);
// Atributo para reportar error
$baseDatos->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Sentencia SQL
if ($identificador ==
"" && $lenguaje == ""){
$stmt =
$baseDatos->prepare($consultaNormal);
}
else{
$stmt =
$baseDatos->prepare($consulta);
}
// Ejecutar la consulta
$stmt->execute(array($identificador,
$lenguaje));
// Imprimir resultados
echo '<table
class="resultados">';
echo '<thead>';
echo '<tr>';
echo '<th>Id</th>';
echo '<th>Item</th>';
echo '<tr>';
echo '</thead>';
echo '<tbody>';
while ($row =
$stmt->fetch()){
if ($contador % 2 == 0){
echo '<tr
class="par">';
}
else{
echo '<tr
class="impar">';
}
echo '<td>' .
$row['id_item'] . '</td>';
echo '<td>' .
$row['item'] . '</td>';
echo '</tr>';
$contador++;
}
echo '</tbody>';
echo '</table>';
}
catch (PDOException $e) {
echo $e->getMessage();
}
finally {
if ($baseDatos != NULL)
$baseDatos = NULL;
}
?>
<div class="pedirDatos"
action="subpaginas/consultaConParametros.php"
method="POST">
<a
href="../index.php"><input class="pedirDatosSubmit"
type="submit" name="enviar" value="Volver al
inicio"></a>
</div>
</body>
</html>
ARCHIVO INSERTAR.HTML
<!DOCTYPE
html>
<!--
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.
-->
<html>
<head>
<meta charset="UTF-8">
<title>Consultas
PDO</title>
<link type="text/css"
rel="stylesheet" href="../css/subpaginas.css">
</head>
<body>
<div>
<form
class="pedirDatos" action="subpaginas/insertar.php"
method="POST">
<h1
class="pedirDatosTitle">NUEVO REGISTRO</h1>
<input
class="pedirDatosInput" type="text"
name="lenguaje" placeholder="Lenguaje">
<input
class="pedirDatosSubmit" type="submit"
name="enviar" value="Insertar">
</form>
</div>
</body>
</html>
ARCHIVO INSERTAR.PHP
<?php
include
'../conexion.php';
/* Función para
capturar los datos pasados */
function
recoge($var){
$tmp = (isset($_REQUEST[$var]))
?
trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
: "";
return $tmp;
}
$lenguaje =
recoge("lenguaje");
$consulta =
"INSERT INTO items (item) VALUES(?)";
try{
// Conexión a la base de datos
$baseDatos = new
PDO("mysql:host=$servidor;dbname=$bd", $usuario, $password);
// Atributo para reportar error
$baseDatos->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Sentencia SQL
if ($lenguaje != ""){
$stmt =
$baseDatos->prepare($consulta);
$stmt->execute(array($lenguaje));
}
}
catch (PDOException
$e) {
echo $e->getMessage();
}
finally {
if ($baseDatos != NULL)
$baseDatos = NULL;
header('Location:
consultaConParametros.php');
}
vales verga
ResponderEliminar