miércoles, 24 de octubre de 2012

TRANSACCIONES MYSQL CON PHP



La transacciones en mysql ¿qué son? ¿cómo se utilizan? ¿para qué sirven?. Estas son las cuestiones que voy a intentar explicar de la manera más simple posible.
¿Qué son las transacciones?
Una
 transacción es un conjunto de operaciones SQL que se ejecutan como un único bloque, es decir, si falla una operación fallan todas. Es una unidad única de trabajo. Si una transacción tiene éxito, todas las modificaciones de los datos realizadas durante la transacción se confirman y se convierten en una parte permanente de la base de datos. Si una transacción encuentra errores y debe cancelarse o revertirse, se borran todas las modificaciones de los datos.
¿Para qué sirven?
Un
 ejemplo de transacción puede ser una transferencia bancaria… Quitamos saldo a una cuenta y lo añadimos en otra. Si no somos capaces de abonar el dinero en la cuenta de destino, no podemos quitarlo de la cuenta de origen. Como este ejemplo seguro que en vuestra carrera os cruzareis con otros muchos similares en los que tener nociones de cómo manejar esta herramienta os puede resultar realmente útil.
Por último pero no menos importante vamos a ver cómo podemos utilizar esta herramienta con el lenguaje favorito de este blog …PHP
¿Cómo se utilizan con PHP?
En principio php no realiza ninguna función dentro de las transacciones. La única cuestión real que tiene importancia dentro de tu código php es que realice las querys de manera ordenada hacia MySQL.  Para trabajar con transacciones con php y mysql es importante tener en cuenta:
1.     Que tu base de datos tenga soporte para base de datos innodb.
2.     Las transacciones sólo son soportadas sólo para las tablas tipo innodb, así que necesitamos crear las tablas o modificarlas con éste tipo. Ante la pregunta … ¿Cómo me aseguro que mis tablas sean innodb? Ejecutando la siguiente query en tu base de datos : ALTER TABLE tutabla ENGINE = INNODB;
Y ahora un ejemplo básico con código php
<?php
$servidor="TuHost";
$base_de_datos="TuBaseDeDatos";
$usuario="TuUsuario";
$pass="TuPassword";
$dbh = mysql_connect($servidor,$usuario,$pass);
mysql_select_db($base_de_datos,$dbh);
$sql = "SET AUTOCOMMIT=0;";
$resultado = mysql_query($sql, $dbh);
$sql = "BEGIN;";
$resultado = mysql_query($sql, $dbh);
$sql = "SELECT * FROM primera; ";
$resultado = mysql_query($sql, $dbh);
$sql = "INSERT INTO `segunda` (`id`, `descripcion`) VALUES ('', 'Otro
valor');";
$resultado = mysql_query($sql, $dbh);
$sql = "INSERT INTO `primera` (`id`, `ripcion`) VALUES (´´, ´Otro valor´);";
$resultado = mysql_query($sql, $dbh);
if ($resultado) {
echo 'OK';
echo '';
$sql = "COMMIT";
$resultado = mysql_query($sql, $dbh);
}
else
{
echo 'MAL';
echo '
';
echo 'SE EJECUTA EL ROOLBACK';
echo '
';
$sql = "ROLLBACK;";
$resultado = mysql_query($sql, $dbh);
}
?>

sábado, 8 de septiembre de 2012

Base de datos a usar


/*
SQLyog Enterprise - MySQL GUI v8.12
MySQL - 5.1.41 : Database - bd_formulario
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

CREATE DATABASE /*!32312 IF NOT EXISTS*/`bd_formulario` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `bd_formulario`;

/*Table structure for table `tbl_datos` */

DROP TABLE IF EXISTS `tbl_datos`;

CREATE TABLE `tbl_datos` (
  `cod_formulario` int(4) NOT NULL AUTO_INCREMENT,
  `nombres` varchar(50) DEFAULT NULL,
  `apellidos` varchar(50) DEFAULT NULL,
  `telefono` varchar(9) DEFAULT NULL,
  `provincia` varchar(50) DEFAULT NULL,
  `canton` varchar(50) DEFAULT NULL,
  `parroquia` varchar(50) DEFAULT NULL,
  `direccion` varchar(50) DEFAULT NULL,
  `edad` varchar(3) DEFAULT NULL,
  `mail` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`cod_formulario`)
) ENGINE=MyISAM AUTO_INCREMENT=113 DEFAULT CHARSET=latin1;

/*Data for the table `tbl_datos` */

insert  into `tbl_datos`(`cod_formulario`,`nombres`,`apellidos`,`telefono`,`provincia`,`canton`,`parroquia`,`direccion`,`edad`,`mail`) values (1,'xe','xe','xe','xe','xe','xe','xe','xe','xe'),(2,'xe','xe','xe','AZUAY','BUENA FE','xe','xe','xe','xe'),(3,'xe','xe','xe','AZUAY','BUENA FE','xe','xe','xe','xe'),(51,'','','','','','','','',''),(112,'ing harry','saltos','092536726','LOS RIOS','BABAHOYO','nnnn','nnnn','nnn','nnn');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

prueba de un formulario


<html>
<head>
<title>Formularios registro</title>
</head>
<body>
<?php


/*conexion con base de datos bd_formulario*/
require("conexion.php");


/*
POST.- Oculta los valores que pasamos de una página a otra, esto lo hace más seguro.
GET.-  consigue los datos a través de la URL
*/


echo"<form name='formulario' method='post' action='index.php'>";
echo'
<table width="200" border="1">
  <tr>
    <td>NOMBRES:</td>
    <td><input type="text" name="nombres"></td>
  </tr>
  <tr>
    <td>APELLIDOS:</td>
    <td><input type="text" name="apellidos"></td>
  </tr>
  <tr>
    <td>TELEFONO</td>
    <td><input type="text" name="telefono"></td>
  </tr>
  <tr>
    <td>PROVINCIA:</td>
    <td>
<select name=provincia>";
<option>ELIJA PROVINCIA</option>";
<option>AZUAY</option>";
<option>BOLIVAR</option>";
<option>CANAR</option>";
<option>CARCHI</option>";
<option>COTOPAXI</option>";
<option>CHIMBORAZO</option>";
<option>EL ORO</option>";
<option>ESMERALDAS</option>";
<option>GALAPAGOS</option>";
<option>GUAYAS</option>";
<option>IMBABURA</option>";
<option>LOJA</option>";
<option>LOS RIOS</option>";
<option>MANABI</option>";
<option>MORONA SANTIAGO</option>";
<option>NAPO</option>";
<option>ORELLANA</option>";
<option>PASTAZA</option>";
<option>PICHINCHA</option>";
<option>SANTA ELENA</option>";
<option>SANTO DOMINGO DE LOS TSACHILAS</option>
<option>SUCUMBIOS</option>
<option>TUNGURAHUA</option>
<option>ZAMORA CHINCHIPE</option>
</select>
  </td>
  </tr>
  <tr>
    <td>CANTON:</td>
    <td>
<select name=canton>";
<option>ELIJA CANTON</option>
<option>BABA</option>
<option>BABAHOYO</option>
<option>BUENA FE</option>
<option>MOCACHE</option>
<option>MONTALVO</option>
<option>PALENQUE</option>
<option>PUEBLOVIEJO</option>
<option>QUEVEDO</option>
<option>QUINSALOMA</option>
<option>URDANETA</option>
<option>VALENCIA</option>
<option>VENTANAS</option>
<option>VINCES</option>
</select></td>
  </tr>
  <tr>
    <td>PARROQUIA:</td>
    <td><input type="text" name="parroquia"></td>
  </tr>
  <tr>
    <td>DIRECCION:</td>
    <td><input type="text" name="direccion"></td>
  </tr>
  <tr>
    <td>EDAD:</td>
    <td><input type="text" name="edad"></td>
  </tr>
  <tr>
    <td>E-MAIL:</td>
    <td><input type="text" name="mail"></td>
  </tr>
  <tr>
    <td colspan="2"><center><input type=submit value="Guardar" name=Submit></center></td>
  </tr>
</table>
';


echo"</form>";

$result = mysql_query("Insert Into tbl_datos (nombres, apellidos, telefono, provincia, canton, parroquia, direccion, edad, mail)
values ('$nombres', '$apellidos', '$telefono', '$provincia', '$canton', '$parroquia', '$direccion', '$edad', '$mail')", $link);
$result = mysql_query($result);


//Nota: el codigo de la tabla esta como autonumerio por eso no se incluye en el insert....


?>
</body>
</html>

conexion a base de datos mysql


<?php
       $link = mysql_connect("localhost", "root","");
               mysql_select_db("bd_formulario", $link);
?>

sábado, 1 de septiembre de 2012

OpenCV biblioteca libre que permite visión artificial


OpenCV es una biblioteca libre que permite visión artificial originalmente fue desarrollada por Intel.

Desde su primera aparición en versión alfa en enero de 1999, se la ha utilizado en infinidad de aplicaciones, desde sistemas de seguridad con detección de movimiento, hasta aplicaciones de control de procesos donde se requiere reconocimiento de objetos, esto se debe a que su publicación se da bajo licencia BSD, que permite que sea usada libremente para propósitos comerciales y de investigación con las condiciones en ella expresadas.

Open CV es multiplataforma, existiendo versiones para GNU/Linux, Mac OS X y Windows. Contiene más de 500 funciones que abarcan una gran gama de áreas en el proceso de visión, como reconocimiento de objetos (reconocimiento facial), calibración de cámaras, visión estereo y visión robótica.

El proyecto pretende proporcionar un entorno de desarrollo fácil de utilizar y altamente eficiente. Esto se ha logrado, realizando su programación en código C y C++ optimizados, aprovechando además las capacidades que proveen los procesadores multi núcleo. OpenCV puede además utilizar el sistema de primitivas de rendimiento integradas de Intel, un conjunto de rutinas de bajo nivel específicas para procesadores Intel


(fuente: Wikipedia)

Un ejemplo sencillo:
http://www.youtube.com/watch?v=iyOJNhhtd6I

sábado, 25 de febrero de 2012

Envio de datos a un servidor web utilizando vb.net y recibir respuesta


Muchas veces es necesario enviar datos de una aplicación a un sitio web para diferentes actividades, 

las solicitudes se envían desde una aplicación a un identificador URI concreto, como una página Web de un servidor. El identificador URI determina la clase descendiente adecuada que se debe crear a partir de una lista de descendientes de WebRequest registrados para la aplicación. Los descendientes de WebRequest suelen registrarse para controlar un protocolo específico, como HTTP o FTP, pero se pueden registrar para controlar una solicitud a un servidor específico o una ruta de acceso en éste.

Para programar esto se necesita algo como lo que les e puesto a continuación  


ES NECESARIO PARA ESTO :

Un formulario









En VB.NET
IMPORTAR ESTAS LIBRERIAS:
Imports System.Net, System.Net.Sockets
Imports System.Web
Imports System.IO
Imports System.Text

  
EN EL BOTON PROGRAMAR ESTO:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
      ‘// con esto llamo a la function usarPHP, donde le envió como parámetro: el url, el tipo POST, y las variables  nombre  edad  
     
      Dim resultadohtml As String = usarPHP("http://localhost/socket/prueba.php", "POST", "nombre=" & TextBox1.Text & "&edad=38 ")
   
     ‘// con esto muestro mel resultado en la caja de texto grande
       TextBox2.Text = resultadohtml

End Sub

LA FUNCION usarPHP ES LA SIGUIENTE
‘// esta función recibe los parámetros antes mencionados  el url, el tipo POST, y las variables  nombre  edad  llegan en cadena a la variable data
Public Function usarPHP(ByVal url As String, ByVal method As String, ByVal data As String)
        Try
            ‘//creamos la forma como se enviara los datos, en este caso “POST”
            Dim request As System.Net.WebRequest = System.Net.WebRequest.Create(url)
            request.Method = method

            ‘//variable para tomar los datos del parámetro data que llega a la funcion
            Dim postData = data

            ‘//arreglo de bytes codificados con UTF8 para enviar los datos
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
            request.ContentType = "application/x-www-form-urlencoded"
            request.ContentLength = byteArray.Length
            Dim dataStream As Stream = request.GetRequestStream()
            dataStream.Write(byteArray, 0, byteArray.Length)
            dataStream.Close()

            ‘//con esto manejamos las respuestas del servidor
            Dim response As WebResponse = request.GetResponse()
            dataStream = response.GetResponseStream()
            Dim reader As New StreamReader(dataStream)
            Dim responseFromServer As String = reader.ReadToEnd()
            reader.Close()
            dataStream.Close()
            response.Close()
            Return (responseFromServer)
        Catch ex As Exception
            Dim error1 As String = ErrorToString()
            If error1 = "Direccion Invalida!!: el formato no ha sido determinado." Then
                MsgBox("ERROR! Debe de tener  http:// antes de la URL")
            Else
                MsgBox(error1)
            End If
            Return ("ERROR")
        End Try
    End Function

EN EL SERVIDOR WEB DEBERIA DE TENER LO SIGUIENTE
Tener una página http://localhost/socket/prueba.php ; el PHP  debería tener lo siguiente 
<?PHP
echo $_REQUEST["nombre"];
echo $_REQUEST["edad"];
?>

viernes, 17 de febrero de 2012

Envio de datos utilizando la clase WebRequest


Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

        Public Shared Sub Main()
            ' Create a request using a URL that can receive a post. 
            Dim request As WebRequest = WebRequest.Create("http://www.contoso.com/PostAccepter.aspx ")
            ' Set the Method property of the request to POST.
            request.Method = "POST"
            ' Create POST data and convert it to a byte array.
            Dim postData As String = "This is a test that posts this string to a Web server."
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
            ' Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded"
            ' Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length
            ' Get the request stream.
            Dim dataStream As Stream = request.GetRequestStream()
            ' Write the data to the request stream.
            dataStream.Write(byteArray, 0, byteArray.Length)
            ' Close the Stream object.
            dataStream.Close()
            ' Get the response.
            Dim response As WebResponse = request.GetResponse()
            ' Display the status.
            Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
            ' Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream()
            ' Open the stream using a StreamReader for easy access.
            Dim reader As New StreamReader(dataStream)
            ' Read the content.
            Dim responseFromServer As String = reader.ReadToEnd()
            ' Display the content.
            Console.WriteLine(responseFromServer)
            ' Clean up the streams.
            reader.Close()
            dataStream.Close()
            response.Close()
        End Sub
    End Class
End Namespace