Tag Archive for php

Como subir archivos a servidor con PHP

Subir archivos a un servidor web no es nada del otro mundo, de hecho es algo muy sencillo de hacer, y podemos hacerlo utilizando una sencilla forma de HTML y un programa en PHP que guarde el archivo en donde nosotros queramos.

Lo primero que necesitaremos sera el archivo html donde tendremos la forma de subida.

El siguiente codigo representa esta forma. Lo que se tiene que hacer es crear una forma, establecer el parametro de “action” donde especificaremos el script php que guardara nuestro archivo, también el parametro “method” en el cual he seleccionado post, y “enctype”, que basicamente especifica que tipo de datos vamos a subir, esto es necesario.

Forma de subida en html

<!DOCTYPE html>
<html>
	<head>
	</head>
	<body>
		<form action="file.php" method="post" enctype="multipart/form-data">
			<input type="file" name="archivo" id="archivo"></input>
			<input type="submit" value="Subir archivo"></input>
		</form>
	</body>
</html>

 

Recuerden especificar el “name” del archivo, el cual es necesario para poder encontrar el archivo en nuestro script PHP.

Del lado del servidor…

Ahora vamos con el PHP, es la parte mas importante ya que desde aqui accederemos a nuestro archivo y seremos capaces de ver sus propiedades, asi como de guardarlo en una ruta especifica. Para esto tenemos el arreglo bidimensional “$_FILES” donde se puede acceder al archivo y sus propiedades (como ‘error’, ‘name’,’tmp_name’).

Archivo PHP para controlar la subida del archivo

if ($_FILES['archivo']["error"] > 0)
  {
  echo "Error: " . $_FILES['archivo']['error'] . "<br>";
  }
else
  {
  echo "Nombre: " . $_FILES['archivo']['name'] . "<br>";
  echo "Tipo: " . $_FILES['archivo']['type'] . "<br>";
  echo "Tamaño: " . ($_FILES["archivo"]["size"] / 1024) . " kB<br>";
  echo "Carpeta temporal: " . $_FILES['archivo']['tmp_name'];

  /*ahora co la funcion move_uploaded_file lo guardaremos en el destino que queramos*/
   move_uploaded_file($_FILES['archivo']['tmp_name'],
      "subidas/" . $_FILES['archivo']['name']); 

A continuación un pequeño video tutorial de como hacer este ejercicio

Usar PDO en PHP | Parte 2: Hacer consultas

Hola, tercera parte  del tutorial sobre PDO en PHP; como pone en el título, en esta parte os voy a enseñar cómo hacer consultas y así saber todo lo que uno ha de saber acerca de esta manera tan eficiente de manejar bases de datos en PHP. Primero veamos cómo se hace en MySQL y PHP normal, el de toda la vida:

<?php
$conexion = mysql_connect('localhost', 'usuario', 'contraseña') or die('Could not connect: ' . mysql_error());
mysql_select_db('bd', $conexion);
$sql = mysql_query("SELECT * from usuarios");
while($columna = mysql_fetch_array($sql)){
	echo $columna["Nombre"];
}
?>

Todo esto dejando de lado aspectos de seguridad, ya que esto podría ser “hackeable”. En PDO se hace de una manera completamente distinta pero a la vez mucho más segura, haciendo uso de los “prepared statements”, con el fin de que nuestra web sea más difícil de acceder. Se hace de la siguiente manera (aprovechando el código de la parte 1):
Read more

Enviar una peticion http POST desde Android a aplicación web (php)

La comunicación desde aplicaciones en dispositivos mobiles con servidores en la internet, es prácticamente una necesidad, siendo cada vez mas común encontrar este comportamiento en aplicaciones, es necesario comprender como se realiza esta comunicación. Basicamente lo que haremos es enviar una petición POST, muy similar a subir una forma con el metodo post desde un documento HTML a una aplicación en PHP, solamente que lo haremos desde Android, y siendo Android un sistema que utiliza Java, lo haremos utilizando ciertas librerías que nos permiten realizar esta comunicación desde Java.

Codigo de actividad en android que implementa la clase httpHandler

Ejemplo de aplicación sencilla que implemente una comunicación con una aplicación en PHP.

Codigo de clase en Java a implementar en Android para enviar peticiones a servidor web:

En esta clase lo que hacemos es implementar la comunicación, aqui estas todo lo que se necesita para enviar la petición a PHP junto con información.

import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import org.apache.http.util.EntityUtils;

public class httpHandler {

  public String post(String posturl){

	  try {

		  HttpClient httpclient = new DefaultHttpClient();
/*Creamos el objeto de HttpClient que nos permitira conectarnos mediante peticiones http*/
		  HttpPost httppost = new HttpPost(posturl);
/*El objeto HttpPost permite que enviemos una peticion de tipo POST a una URL especificada*/
		  //AÑADIR PARAMETROS
		  List<NameValuePair> params = new ArrayList<NameValuePair>();
		  params.add(new BasicNameValuePair("data","Variable 1"));
		  params.add(new BasicNameValuePair("info","Otro mensaje"));
		/*Una vez añadidos los parametros actualizamos la entidad de httppost, esto quiere decir en pocas palabras anexamos los parametros al objeto para que al enviarse al servidor envien los datos que hemos añadido*/
  httppost.setEntity(new UrlEncodedFormEntity(params));

                  /*Finalmente ejecutamos enviando la info al server*/
		  HttpResponse resp = httpclient.execute(httppost);
		  HttpEntity ent = resp.getEntity();/*y obtenemos una respuesta*/

		  String text = EntityUtils.toString(ent);

		  return text;

	  }
	  catch(Exception e) { return "error";}

	}

}

 

Actividad en Android

En este codigo basicamente tenemos una actividad principal donde usamos una clase httpHandler para enviar una petición al servidor web.

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        httpHandler handler = new httpHandler();
        String txt = handler.post("http://192.168.0.19/app_android/app.php");

        TextView t = (TextView)findViewById(R.id.text1);
        t.setText(txt);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

 

Codigo en PHP:

EL codigo en PHP es lo mas sencillo, unicamente lo que hace es capturar información y regresarla, esta se captura como la “respuesta” desde Android.

<?php

	$dato = $_POST['data'];
	$info = $_POST['info'];
	echo $dato."\n".$info;
?>

 

Si deseas ver el proceso completo de como se creo este software te invito a ver los siguientes video tutoriales, donde implementamos este codigo.

Video tutorial para conectar Android con una aplicación en PHP

parte 1:

parte 2:

parte 3:

Usar PDO en PHP | Introducción

Hola, este va a ser el primero de una serie de tutoriales acerca del uso de PDO para manejar nuestras bases de datos PHP, esto es, hacer consultas para recuperar datos, insertar datos, borrarlos… Todo lo que se puede hacer a través de programación “convencional” en PHP relativo a la conexión con bases de datos se puede hacer también con PDO.

Pero… ¿qué es realmente PDO?

PDO significa exactamente “PHP Data Objects”, como veremos más adelante, se hace uso de la archiconocida programación orientada a objetos para PHP cuando quieres usar PDO. He de decir primero que si quieres usar eso debes tener una versión de PHP superior o igual a la 5.1, pero como creo que veréis lógico, no me voy a entretener ahora en eso.

¿Qué ventajas tiene con respecto a lo convencional?

Esta es una pregunta común y creo que de sencilla respuesta: TODO. Me explico, a través de PDO puedes manejar 12 tipos distintos de bases de datos (Oracle, MySQL, SqLite, etc…), puedes usar parámetros por nombre (ya veremos en futuros tutoriales lo que es) y puedes usar “prepared statements”. Pero lo más importante es la SEGURIDAD que ganas usando este “método”, al usar estas sentencias preparadas, que no son muy distintas a lo que se consigue  a través de MySQL, usando mysql_real_escape_string();, pero que a mi parecer son más fáciles de entender combinadas con los parámetros por nombre.

Sin embargo, como se suele decir, no todo el monte es orégano, o no es oro todo lo que reluce, el rendimiento es un 2,5% peor al conseguido a través de MySQLite, lo que quiere decir que es un 2,5% más lento que este último, algo realmente insignificante, pero esto pretende ser algo objetivo y todo ha de ser dicho.

Sin más habiendo acabado mi primer post, me despido, espero que esto haya sido de utilidad, si ha sido así no dudes comentar.