Pagine

mercoledì 22 dicembre 2010

Scrivere, leggere e inserire foto su un file xml da php

Rieccoci a parlare di php e di interazione con i file .xml .Questa volta vorrei creare un form che permetta di inserire testi e foto su una pagina web partendo da un file XML.
Creiamo con il nostro editor preferito un file che chiameremo Inserisci.php e scriviamo:


<HTML>
<BODY>
<?php echo ('<form action="public/insert.php" method="post" name="Ins" ENCTYPE="multipart/form-data">
//insert.php sarà il file che ci permetterà (fra poco) di inserire sia i testi che le foto.
<table align="center" bgcolor=#cccccc border=1>
 <th colspan="2">Inserisci nuova foto</th>
 <tr><td><label>Id Utente</label></td><td><input name="id" type="text" /></td></tr>
 <tr><td><label>Password</label></td><td><input name="pass" type="password" /></td></tr>
 <tr><td>Scegli categoria</td><td><select name="categoria" size="1">');
 $MenuCat=Array ("Gare","Personali","Raduni","Altro");
 foreach ($MenuCat as $k=>$v)
 print ("- <a href='Categorie.php?Categoria=$v'>$v</a><br />");
 print (" <option>$v</option>");
 echo ('</select></td></tr>
 <tr><td><label>Titolo</label></td><td><input name="Tit" type="text" /></td></tr>
 <tr><td><label>Descrizione</label></td><td><textarea name="Des" cols="50" rows="3"></textarea></td></tr>

<tr><td>Foto</td><td><input type="file" name="image" size="40" /></td></tr>
<tr><td colspan="2" align="center"><input name="Vai" type="submit" /></td></tr>
 </table></form>');
 ?>

</BODY>
</HTML>

A questo punto creo il secondo file che chiamerò Insert.php con il seguente codice:

<HTML>
<BODY>
<?php
$Cat= $_REQUEST['categoria'];
 $ID=$_REQUEST['id'];
 $pas=$_REQUEST['pass'];
 $TIT=$_REQUEST['Tit'];
 $MINFOT=$_FILES['image']['name'];//$_REQUEST['MinFot'];
 $DES=$_REQUEST['Des'];
 $FOT=$_FILES['image']['name'];//$_REQUEST['Fot'];
 $LIN=$_REQUEST['Link'];

//miologin e mia password possono ovviamente essere sostituite
if ($ID=="miologin" and $pas =="miapassword") {
 $xml = simplexml_load_file("Categorie.xml");

//Categorie.xml sarà il nostro contenitore
$nuovaCategoria = $xml->addChild($Cat); //crea un elemento <categoria>
 $Tit = $nuovaCategoria->addChild('Tit', $TIT); //inserisce dentro categoria l'attributo<Tit>
 $MinFot = $nuovaCategoria->addChild('MInFot', $MINFOT); //come sopra, però con gli attributi cambiati
 $Des = $nuovaCategoria->addChild('Des', $DES); //come sopra
 $Fot = $nuovaCategoria->addChild('Fot', $FOT);
 $Link=$nuovaCategoria->addchild('Link',$LIN);
 $msg="";
 $f = fopen("Categorie.xml", "w");

//apro il file XML e scrivo
 fwrite($f, $xml->asXML());
 fclose($f); // chiudo il file xml
 echo "<table align='center' border='1' bgcolor=#ffffff><tr><td colspan='2'><strong>Aggiunta con successo nuova foto: </td></tr><tr><td>categoria: </td><td><strong>$Cat</td>><tr><td>Titolo: </td><td><strong>$TIT</td></tr><tr><td>Descrizione: </td><td><strong>$DES</td></tr><tr><td>Foto:</td><td><strong> $FOT</td></tr><tr><td>Miniatura: </td><td><strong>$MINFOT</td></tr><tr><td>Link: </td><td><strong>$LIN</td></tr><tr><td><a href='Inserisci.php' align='center'>Inserisci Altra foto</a></td></tr></table>";}
 elseif ($ID!="miologin") {
 echo ("<h2>non si passa: Hai Sbaglito l'id</h2><a href='Inserisci.php'>Riprova</a>");
 return;
 }
 elseif ($pas!="miapassword"){
 echo ("<h2>non si passa: Hai Sbagliato la passWord !</h2> <a href='Inserisci.php'>Riprova</a>");
 return;
 };

//adesso mi controllo il file
 do {
 if (is_uploaded_file($_FILES['image']['tmp_name'])) {
 // Controllo che il file non superi i KB da me desiderati
 if ($_FILES['image']['size'] > 120000) {
 $msg = "<p>Il file non deve superare i 120 KB!!</p>";
 break;
 }
 // Ottengo le informazioni sull'immagine
 list($width, $height, $type, $attr) = getimagesize($_FILES['image']['tmp_name']);
 // Controllo che le dimensioni (in pixel) non superino 800x800
 if (($width > 800) || ($height > 800)) {
 $msg = "<p>Dimensioni non corrette!!</p>";
 break;
 }
 // Controllo che il file sia in uno dei formati GIF, JPG o PNG
 if (($type!=1) && ($type!=2) && ($type!=3)) {
 $msg = "<p>Formato non corretto!!</p>";
 break;
 }
 // Verifico che sul sul server non esista già un file con lo stesso nome
 // In alternativa potrei dare io un nome che sia funzione della data e dell'ora
 if (file_exists('upload_img/'.$_FILES['image']['name'])) {
 $msg = "<p>File già esistente sul server. Rinominarlo e riprovare.</p>";
 break;
 }
 // Sposto il file nella cartella da me desiderata
 if (!move_uploaded_file($_FILES['image']['tmp_name'],$_FILES['image']['name'])) {
 $msg = "<p>Errore nel caricamento dell'immagine!!</p>";// 'Miniature/.'
 break;
 }
 }
 } while (false);
 echo $msg;
 //per eliminare:
 //unset($xml->$Cat[0]);
 unset($xml[0]);
 ?>

</BODY>
</HTML>

A questo punto, sempre con il mio editor preferito, creo un file xml vuoto.


<?xml version="1.0" encoding="utf-8"?>
 <parent></parent>


Adesso proviamo a lanciare il file inserisci.php sul nostro server compiliamo tutti i campi del form e facciamo clic su invia. Se tutto è andato a buon fine e non ci sono messaggi di errore possiamo provare ad aprire con l'editor il file Categorie.XML dove troveremo i dati che abbiamo caricato. Infine creiamo il file che ci permetterà di vedere il contenuto del file Categorie.XML compreso di miniature delle foto che abbiamo caricato. Creiamo il file Categorie.php:


<HTML>
<BODY>
<?php
$xml = simplexml_load_file("Categorie.xml");
 $Categoria=$_GET['Categoria'];
 echo "<table border=1 bgcolor=#ffffff align=center><tr bgcolor=#cccccc><th>Foto</th><th>Titolo</th><th>Descrizione</th></tr>";
 foreach($xml->$Categoria as $item)
 //echo $item->id." - ".$item->MInFot." - "." <a href = $item->Fot> Foto</a><br/>";
 echo "<tr><td><a href='$item->Fot' title=Clicca per ingrandire target=_blank> <img src='$item->MInFot' width='100' height='100' align='right'/> </a></td><td><strong> $item->Tit</strong></td><td>$item->Des</td></tr>";
 echo "</table>";
 ?>

</BODY>
</HTML>


Ho inserito tutti i file all'interno della stessa cartella sul server, pertanto tutte le foto saranno caricate insieme ai file in un'unica cartella. Basterà creare una cartella dove posizionare Categorie.XML e Insert.php e modificare i percorsi (path) all'interno del codice. Infine sconsiglio un uso così "libertino" di password e id, magari in futuro affronteremo l'argomento in maniera più appropriata.

Nessun commento: