Feb 032013
 

Siamo oggi di fronte all’annosa questione: come fare l’apload di un file usando un sisstema un po’ moderno e intelligente ma facilemente integrabile nei binari gà noti della programmazione php.

La soluzione proporsta prevede l’uso del celebre plugin di jQuery uploadify

Da questo sito scaricheremo i files che ci servono dalla pagina di download, ovvero il plugin, il suo css, un file swf per la realizzazione della prgogress bar e, già che ci siamo, il file php per spostare il file nella cartella di destinazione finale. Il nostro scopo sarà consentire all’utente la scelta e l’upload del file prima e indipendetemente dall’invio del form, gestiremo la risposta per sapere il nome del file caricato.

Partiamo quindi dalle intestazioni del file html:


<link rel="stylesheet" type="text/css" href="uploadify.css" />
<script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
<script src="js/jquery.uploadify.min.js"></script>

Proseguiamo con il form:


<form>
<fieldset>
<legend>File upload</legend>
<label for="file_upload_1">File</label><br>
<input type="hidden" id="file_upload" name="file_upload">
<input type="file" id="file_upload_1" name="file_upload_1"><br><br>
<input type="submit">
</fieldset>
</form>


Useremo il campo nascosto per memorizzare il nome del file così come verrà salvato.

Per attivare il controllo sull’input file procederemo in questo modo:


$(function() {
$("#file_upload_1").uploadify({
height        : 30,
swf           : 'uploadify.swf',
uploader      : 'uploadify.php',
width         : 120,
onUploadSuccess : function(file, data, response) {$('#file_upload').val(data);}
});
});

La maggiorn parte delle informazioni dovrebbero essere evidenti, la parte forse pià interessante è l’onUploadSuccess che scrive nell’input hidden, per il resto sono i percorsi dei due file scaricati.

Per quanto rigarda il file php, il codice è il seguene e l’unica personalizzazione riguarda il path di destinazione dei files, poi lo si potrà personalizzare e integrare con gli opportuni controlli come meglio si crede:


$targetFolder = '/blog/tutorial/upload'; // Relative to the root
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
$targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];

// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);

if (in_array($fileParts['extension'],$fileTypes)) {
move_uploaded_file($tempFile,$targetFile);
echo $_FILES['Filedata']['name'];
} else {
echo 'Invalid file type.';
}
}

L’esempio

Dec 232012
 

Una seconda possibilità per produrre un output JSON è a partire da un oggetto php. Pertanto dichiariamo la classe user con tre proprietà public che verranno valorizzate dalla funzione crea_user() quando istanziamo il nostro oggetto. Una volta istanziato l’oggetto e chiamata la funzione possiamo semplicemente stampare la variabile oggetto con json_encode:


error_reporting(0);
require('include/mysql.inc.php');

class User{
public $id;
public $nome;
public $cognome;
public function __construct($id){
$this->id=$id;
}
public function crea_user(){
$sql='select nome, cognome from utenti where id='.$this->id. ' limit 1';
$fetch=mysql_query($sql);
$row=mysql_fetch_array($fetch, MYSQL_ASSOC);
$this->nome=$row['nome'];
$this->cognome=$row['cognome'];
}
}

$utente=new User(1);
$utente->crea_user();
echo json_encode($utente);

L’esempio

Dec 202012
 

Attualmente uno dei formati più popolari per l’interscambio dei dati è JSON, che abbina l’economia nella quantità dei dati veicolati a una struttura semplice ma efficace.

Vediamo come prelevare dei dati da un database mysql con php e convertirli in un formato JSON. La cosa è straordinariamente semplice dato che possiamo convertire un array nel formato JSON.


error_reporting(0);
 require('include/mysql.inc.php');
 $return_arr=array();
 $sql='select id, nome, cognome from utenti where 1 order by nome';
 $fetch=mysql_query($sql);
 while($row=mysql_fetch_array($fetch, MYSQL_ASSOC)){
 $row_array['myid']=$row['id'];
 $row_array['mynome']=$row['nome'];
 $row_array['mycognome']=$row['cognome'];
 array_push($return_arr,$row_array);
 }
 mysql_close($conn);
 echo json_encode($return_arr);

La porzione di codice fino al ciclo while dovrebbe essere estremamente famigliare a chiunque conosca il php, la prte interessante è la costruzione dell’array associativo usando degli alias per nascondere i nomi dei campi. Una volta creato il nostro array non ci resta che stamparlo con json_encode.

Il risultato