Académique Documents
Professionnel Documents
Culture Documents
DESCRIPCIÓN
Este tutorial es para estudiantes de nivel básico e intermedio, desarrolladores de php+mysql. El ejemplo
presentado fue desarrollado con la arquitectura vista->modelo->vista->control (VMVC) y el código en
php, HTML5, JavaScript y CSS incluido, hace parte de las clases de programación orientada a objetos y a
la web orientadas por el autor. Puede tomarse como base e incluirle otras tecnologías como Boostrap
para hacerlo resposive o Ajax y Jquery para mejorar la eficiencia.
2. Ingresar a la plataforma azure y crear una aplicación web en un nuevo grupo de recursos
3. Decidimos nombrar Grp1PHP el grupo de recursos y phptdg el nombre de la instancia, php 7.0,
sistema operativo Windows, región del datacenter, Sur África
4. Revisar y crear
5. Ir al recurso
6. Ingresar a la URL : https://phptdg.azurewebsites.net
ftps://waws-prod-jnb21-001.ftp.azurewebsites.windows.net/site/wwwroot
Contraseña: Yree0dAntqbleoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxJup7wuGtMuZ
10. Ingresar al explorar de archivos de Windows de su equipo y copiar la dirección del protocolo FTP
11. Ingresar las credenciales
phptdg.azurewebsites.net/proyectoClientes/
Diagrama de Secuencia ValidarIngreso
PARTE 2: CREAR UNA BASE DE DATOS MYSQL EN AZURE
8. Click en crear
9. Click en ir al recurso
1. Click en seguridad de la conexión
Click en deshabilitado y guardar. Esto está bien para ambiente de desarrollo, pero se debe activar el
certificado SSL en ambiente de producción
6. Click en Información general
PARTE 3: CREAR Y ADMINISTRAR UNA BASE DE DATOS MYSQL ALOJADA EN AZURE, CON MySQL
Workbench
1. para acceder a la administración de esa base de datos MySQL, puede utilizar cualquier
herramienta. Aquí se va a utilizar mysql workbench
2. click en Database->Manager Server Conection -> click en new
3. Escribir un nombre para la conexión. Para este caso se escribió conMysqlAzure.
Método de conexión estándar TCP/IP. Nombre del servidor copiado de la información general:
serv1mysql.mysql.database.azure.com
Nombre del usuario tomado de la información general: adminmysql@serv1mysql
4. Click en test de conexion
7. Se abre una interface de usuario para administrar la base de datos en MySql Azure
13. La tabla cliente, tiene los campos: codigo, nombre y credito. Click en aplicar
14. Click en aplicar y luego en finalizar
15. Crear la tabla usuario para la validación de ingreso y manejo de sesión
La tabla usuario tiene dos campos: usuario y contraseña y click en aplicar ->aplicar->finalizar
16. Ingresar un registro a la tabla usuario
17. Ahora se regresa a la plataforma azure. Revise las diferentes opciones:
Información general
Registro de Actividad
Seguridad de la conexión
Cadenas de conexión para diferentes lenguajes de programación
Plan de tarifa
Propiedades
PARTE 4: DESARROLLAR UN PEQUEÑO PROYECTO PHP+MYSQL CON ARQUITECTURA
1. Crear una carpeta llamada proyectoClientes, con tres subcarpetas llamadas modelo, vista y
control
<?
class Usuario{
var $nomUsuario;
var $contrasena;
function __construct($nomUsuario,$contrasena){
$this->nomUsuario= $nomUsuario;
$this->contrasena = $contrasena;
}
function getContrasena() {
return $this->contrasena;
}
function setContrasena($contrasena) {
$this->contrasena = $contrasena;
}
function getNomUsuario() {
return $this->nomUsuario;
}
function setNomUsuario($nomUsuario) {
$this->nomUsuario = $nomUsuario;
}
}
?>
Cliente.php
<?php
class Cliente{
var $codigo;
var $nombre;
var $credito;
function __construct($codigo,$nombre,$credito)
{
$this->codigo=$codigo;
$this->nombre=$nombre;
$this->credito=$credito;
}
function setCodigo($codigo) { $this->codigo = $codigo; }
function getCodigo() { return $this->codigo; }
<?php
//$GLOBALS['serv']="localhost";
//$GLOBALS['usua']="root";
//$GLOBALS['pass']="";
//$GLOBALS['bdat']="bdclientes";
$GLOBALS['serv']="serv1mysql.mysql.database.azure.com";
$GLOBALS['usua']="adminmysql@serv1mysql";
$GLOBALS['pass']="***********";
$GLOBALS['bdat']="dbclientes";
?>
ControlCliente.php
<?php
class ControlCliente {
var $objCliente;
function __construct($objCliente){
$this->objCliente=$objCliente;
function guardar(){
$cod=$this->objCliente->getCodigo();
$nom=$this->objCliente->getNombre();
$cre=$this->objCliente->getCredito();
$objConexion = new ControlConexion();
$objConexion->abrirBd($GLOBALS['serv'],$GLOBALS['usua'],$GLOBALS['pass'],$GLOBALS['bdat']);
$comandoSql="INSERT INTO CLIENTE(CODIGO,NOMBRE,CREDITO) VALUES('".$cod."','".$nom."',".$cre.")";
$objConexion->ejecutarComandoSql($comandoSql);
$objConexion->cerrarBd();
}
function modificar(){
$cod=$this->objCliente->getCodigo();
$nom=$this->objCliente->getNombre();
$cre=$this->objCliente->getCredito();
$objConexion = new ControlConexion();
$objConexion->abrirBd($GLOBALS['serv'],$GLOBALS['usua'],$GLOBALS['pass'],$GLOBALS['bdat']);
$comandoSql="UPDATE CLIENTE SET NOMBRE='".$nom."',CREDITO=".$cre." WHERE CODIGO='".$cod."'";
$objConexion->ejecutarComandoSql($comandoSql);
$objConexion->cerrarBd();
}
function borrar(){
$cod=$this->objCliente->getCodigo();
$objConexion = new ControlConexion();
$objConexion->abrirBd($GLOBALS['serv'],$GLOBALS['usua'],$GLOBALS['pass'],$GLOBALS['bdat']);
$comandoSql="DELETE FROM CLIENTE WHERE CODIGO='".$cod."'";
$objConexion->ejecutarComandoSql($comandoSql);
$objConexion->cerrarBd();
}
function consultar(){
$cod=$this->objCliente->getCodigo();
$objConexion = new ControlConexion();
$objConexion->abrirBd($GLOBALS['serv'],$GLOBALS['usua'],$GLOBALS['pass'],$GLOBALS['bdat']);
$comandoSql="SELECT * FROM CLIENTE WHERE CODIGO='".$cod."'";
$recordSet=$objConexion->ejecutarSelect($comandoSql);
$registro = $recordSet->fetch_array(MYSQLI_BOTH);
$this->objCliente->setNombre($registro["nombre"]);
$this->objCliente->setCredito($registro["credito"]);
$objConexion->cerrarBd();
return $this->objCliente;
}
}
?>
ControlUsuario.php
<?
class ControlUsuario{
var $objUsuario;
function __construct($objUsuario){
$this->objUsuario=$objUsuario;
function validarIngreso(){
$esValido=false;
$objUsuario1 = new Usuario('','');
$usu= $this->objUsuario->getNomUsuario();
$con=$this->objUsuario->getContrasena();
$objConexion = new ControlConexion();
try{
$objConexion->abrirBd($GLOBALS['serv'],$GLOBALS['usua'],$GLOBALS['pass'],$GLOBALS['bdat']);
$comandoSql="SELECT * FROM USUARIO WHERE USUARIO='".$usu."' AND CONTRASENA='".$con."'";
$recordSet=$objConexion->ejecutarSelect($comandoSql);
$registro = $recordSet->fetch_array(MYSQLI_BOTH);
$objUsuario1->setNomUsuario($registro['usuario']);
$objUsuario1->setContrasena($registro['contrasena']);
;
}
catch (Exception $e)
{
echo "ERROR ".$e->getMessage()."\n";
}
$objConexion->cerrarBd();
if ($this->objUsuario->getNomUsuario()==$objUsuario1->getNomUsuario() &&
$this->objUsuario->getContrasena()==$objUsuario1->getContrasena() &&
$this->objUsuario->getNomUsuario() != "" &&
$this->objUsuario->getContrasena() != "")
{
$esValido = true;
}
else
{
$esValido = false;
}
return $esValido;
}
}
?>
ControlConexion.php
<?php
class ControlConexion{
var $conn;
function __construct(){
$this->conn=null;
}
function abrirBd($servidor, $usuario, $password,$db){
try {
$this->conn = new mysqli($servidor, $usuario, $password, $db);
if ($this->conn->connect_errno) {
printf("Connect failed: %s\n", $this->conn->connect_error);
exit();
}
}
catch (Exception $e){
echo "ERROR AL CONECTARSE AL SERVIDOR ".$e->getMessage()."\n";
}
function cerrarBd() {
try{
$this->conn->close();
}
catch (Exception $e){
echo "ERROR AL CONECTARSE AL SERVIDOR ".$e->getMessage()."\n";
}
}
function ejecutarComandoSql($sql) {
try {
$this->conn->query($sql);
}
catch (Exception $e) {
echo " NO SE AFECTARON LOS REGISTROS: ". $e->getMessage()."\n";
}
}
function ejecutarSelect($sql) {
try {
$recordSet=$this->conn->query($sql);
}
<?php
session_start();
if($_SESSION['Usu']== null)header('Location: ../index.php');
echo"
<!DOCTYPE html>
<html>
<head>
<style>
.navbar {
overflow: hidden;
background-color: #333;
font-family: Arial, Helvetica, sans-serif;
}
.navbar a {
float: left;
font-size: 16px;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
.navbar a:hover, .dropdown:hover .dropbtn, .dropbtn:focus {
background-color: red;
}
</style>
</head>
<body>
<div class='navbar'>
<a href='#home'>Home</a>
<a href='../vista/cerrarSesion.php''>Cerrar Sesión</a>
<a href='../vista/vistaCliente.php'>Clientes</a>
</div>
<h3>Barra de Menú</h3>
<p>Click en una opción del menú.</p>
</body>
</html>
";
?>
vistaCliente.php
<?php
session_start();
if($_SESSION['Usu']== null)header('Location: ../index.php');
include("../control/configBd.php");
include("../modelo/Cliente.php");
include("../control/ControlCliente.php");
include("../control/ControlConexion.php");
try{
$cod=$_POST["txtCodigo"];
$nom=$_POST["txtNombre"];
$cre=$_POST["txtCredito"];
$bot=$_POST["btn"];
switch ($bot) {
case "Guardar":
$objCliente= new Cliente($cod,$nom,$cre);
$objControlCliente= new ControlCliente($objCliente);
$objCliente=$objControlCliente->guardar();
break;
case "Consultar":
$objCliente= new Cliente($cod,"",0);
$objControlCliente= new ControlCliente($objCliente);
$objCliente=$objControlCliente->consultar();
$nom=$objCliente->getNombre();
$cre=$objCliente->getCredito();
//echo phpinfo();
break;
case "Modificar":
$objCliente= new Cliente($cod,$nom,$cre);
$objControlCliente= new ControlCliente($objCliente);
$objCliente=$objControlCliente->modificar();
break;
case "Borrar":
$objCliente= new Cliente($cod,"",0);
$objControlCliente= new ControlCliente($objCliente);
$objCliente=$objControlCliente->borrar();
break;
}
}
catch (Exception $objExp) {
echo 'Se presentó una excepción: ', $objExp->getMessage(), "\n";
}
echo"
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
</head>
<body>
<form method='post' action='vistaCliente.php'>
<table>
<tr>
<td colspan='2'>Clientes</td>
</tr>
<tr>
<td>Código</td><td><input type='text' name='txtCodigo' value='".$cod."'></td>
</tr>
<tr>
<td>Nombre</td><td><input type='text' name='txtNombre' value='".$nom."'></td>
</tr>
<tr>
<td>Crédito</td><td><input type='text' name='txtCredito' value='".$cre."'></td>
</tr>
</table>
<table>
<tr>
<td><input type='submit' name='btn' value='Guardar'></td>
<td><input type='submit' name='btn' value='Consultar'></td>
<td><input type='submit' name='btn' value='Modificar'></td>
<td><input type='submit' name='btn' value='Borrar'></td>
</tr>
</table>
</form>
</body>
</html>
";
?>
cerrarSesion.php
<?php
session_start();
session_destroy();
header('Location: ../index.php');
?>
index.php
<?php
session_start();
include("control/configBd.php");
include("modelo/Usuario.php");
include("control/ControlUsuario.php");
include("control/ControlConexion.php");
try{
$usu=$_POST["txtUsuario"];
$con=$_POST["txtContrasena"];
$bot=$_POST["btn"];
if($bot=="Ingresar"){
$objUsuario=new Usuario($usu,$con);
$objCtrUsuario =new ControlUsuario($objUsuario);
if($objCtrUsuario->validarIngreso()){
$_SESSION['Usu']= $usu;
$_SESSION['Con']= $con;
header('Location: vista/menu.php');
}
else{
echo "<script>alert('Usuario y/o contraseña incorrectos');</script>";
}
}
}
catch (Exception $objExp) {
echo 'Se presentó una excepción: ', $objExp->getMessage(), "\n";
}
echo "<script>alert('Usuario = invitado Contraseña= invitado');</script>";
echo "
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 70%;
}
td, th {
border: 1px solid #dddddd;
text-align: center;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
</head>
<body>
<form method='post' action='index.php'>
<table>
<tr>
<td colspan='2' >Ingresar</td>
</tr>
<tr>
<td>Usuario</td><td><input type='text' name='txtUsuario'></td>
</tr>
<tr>
<td>Contraseña</td><td><input type='password' name='txtContrasena'></td>
</table>
<table>
<tr>
<td><input type='submit' name='btn' value='Ingresar'></td>
</tr>
</table>
</form>
</body>
</html>
";
?>
6. Ingresar al explorar de archivos de Windows de su equipo y copiar la dirección del protocolo FTP
obtenida en el centro de implementación en la plataforma azure
ftps://waws-prod-jnb21-001.ftp.azurewebsites.windows.net/site/wwwroot
phptdg.azurewebsites.net/proyectoClientes/