Tag Archive for 'array'

Integrare un feed RSS ad un sito php

Le premesse teoriche sono:

  • hai un sito con una sezione che viene aggiornata più o meno regolarmente, ad esempio vengono postate delle notizie, o vengono inseriti dei prodotti
  • vuoi creare un sistema di feed così che gli utenti possano essere a conoscenza degli aggiornamenti senza necessariamente doversi ricordare di visitare il sito
  • decidi di creare il Feed RSS per le notizie

Le premesse tecniche sono:

  • hai un sito sviluppato con php e mysql
  • il database mysql utilizzato si chiama "basedati"
  • la tabella interessata si chiama "news"...
  • ... e contiene i campi "id, titolo, articolo, data_pubblicazione"

Ecco l'esempio, ampiamente perfezionabile, di come creare un Feed.
Crei un unico file e lo chiami ad esempio rss.php, dentro metti:
- una prima funzione che serve per ripulire il testo da eventuali caratteri poco graditi al linguaggio XML... il linguaggio del Feed RSS appunto. Questo riportato è un esempio, è possibile fare meglio ovviamente.

PHP:
  1. function rss_cleaner($text){
  2. $text=utf8_encode(rtrim(ltrim(str_replace(array("’",">","<","\"","\n","\r","\t","<br />","<br>","<BR>","&nbsp;","  ")," ",$text))));
  3. $text=str_replace(array("&"),"e",$text);
  4. return $text;
  5. }

- l'intestazione del Feed

PHP:
  1. header("Content-type: text/xml; charset=utf-8");
  2. echo "<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\n";
  3. echo "<channel>\n";
  4. echo "<title>Il titolo del mio sito</title>\n";
  5. echo "<link>http://www.ilmiosito.com</link>\n";
  6. echo "<description>Una breve descrizione del sito o del feed</description>\n";
  7. echo "<copyright> Copyright 2009 ilmiosito.com </copyright>\n";
  8. echo "<docs>http://blogs.law.harvard.edu/tech/rss</docs>\n";
  9. echo "<managingEditor>managingmail@ilmiosito.com (stefo)</managingEditor>\n";
  10. echo "<webMaster>wmmail@ilmiosito.com (stefo)</webMaster>\n";
  11. echo "<language>IT-it</language>\n";

- ed infine la lettura degli articoli e la stampa sul file

PHP:
  1. $db_host="miohostmysql"; // l'host mysql al quale mi connetto
  2. $db_user="miousermysql"; // il mio utente mysql
  3. $db_pass="miapassmysql"; // la mia password mysql
  4.  
  5. // ora mi connetto e seleziono il database
  6. $connection=mysql_connect($db_host,$db_user,$db_pass);
  7. mysql_select_db($db_db,$connection);
  8.  
  9. // seleziono le ultime 10 notizie pubblicate e le stampo in formato XML con un ciclo while
  10. $query="select * from news ORDER BY ID DESC LIMIT 10";
  11. $result = mysql_query($query);
  12. while($print = mysql_fetch_array($result)) {
  13.  
  14. $titolo=rss_cleaner($print['titolo']);
  15. $articolo=rss_cleaner($print['articolo']);
  16. $id=rss_cleaner($print['ID']);
  17. $data_pubblicazione=$print['data_pubblicazione'];
  18. $data_pubblicazione = strtotime ($data_pubblicazione); // trasformo la data in Unix timestamp
  19. $data_pubblicazione=date(r,$data_pubblicazione); // formatto la data secondo la RFC 822 gradita da XML
  20.  
  21. // parte la stampa
  22. <item>
  23. <title>$titolo</title>
  24. <link>http://www.ilmiosito.com/articolo.php?ID=$id</link>
  25. <guid isPermaLink=\"false\">http://www.ilmiosito.com/articolo.php?ID=$id</guid>
  26. <pubDate>$data_pubblicazione</pubDate>
  27. <description>$articolo</description>
  28. </item>
  29. ";
  30.  
  31. }
  32. </channel>
  33. </rss>
  34. ";

Il Feed a questo punto è pronto, ultimi accorgimenti sono:
- indicare l'esistenza del Feed nelle intestazioni di pagina, prima della chiusura del tag head

PHP:
  1. <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="http://www.ilmiosito.com/rss.php" />
  2. </head>

e controllare la validità del Feed stesso: http://feedvalidator.org/

Recuperare valori da un Array

Un Array è una sorta di variabile che contiene più valori (facendola facile). Un metodo comodo per recuperare i valori di un Array è utilizzare un cliclo for come nell'esempio qui sotto.
La funzione count permette di contare gli elementi dell'array e quindi impostare il ciclo.

PHP:
  1. $stati = array('italia', 'francia', 'spagna', 'olanda', 'belgio');
  2.  
  3. $numero_stati = count($stati);
  4.  
  5. for ($contatore=0; $counter<=$numero_stati; $contatore++) {
  6.     echo $stati[$contatore] . "<br>";
  7. }

Quello che restituisce il ciclo for è l'equivalente di

PHP:
  1. echo $stati[0] . "<br>";
  2. echo $stati[1] . "<br>";
  3. echo $stati[2] . "<br>";
  4. echo $stati[3] . "<br>";
  5. echo $stati[4] . "<br>";

Ovviamente il ciclo for e la funzione count permettono di lavorare su Array dei quali non si conosce a prescindere il numero degli elementi.

Recupero valori da un select multiplo

Creare un campo input select con possibilità di selezione multipla come questo qui a fianco non è un problema, può invece esserlo recuperare tutti i valori che vengono postati.
Optare per una selezione di questo tipo significa voler passare più valori per la stessa variabile, dovrai quindi necessariamente trattarla come array, utilizzando le parentesi quadre "[]" nel nome del select. Nell'esempio qui sotto il select lo chiamo Selezione[] ed invia i valori alla pagina visualizza.php.

HTML:
  1. <title>Seleziona</title>
  2. </head>
  3. <form id="form" name="form" method="post" action="visualizza.php">
  4.   <select name="Selezione[]" size="5" multiple="multiple">
  5.     <option value="Valore1">Opzione 1</option>
  6.     <option value="Valore2">Opzione 2</option>
  7.     <option value="Valore3">Opzione 3</option>
  8.     <option value="Valore4">Opzione 4</option>
  9.     <option value="Valore5">Opzione 5</option>
  10.   </select><br>
  11.   <input type="submit" name="Submit" value="Invia" />
  12. </form>
  13. </body>
  14. </html>

A questo punto nel file visualizza.php con foreach puoi recuperare tutti i valori ed utilizzarli come meglio credi.

PHP:
  1. <?php
  2. $Selezione=$_POST['Selezione'];
  3.  
  4. foreach ($Selezione as $valore) {
  5.     echo "$valore<br>\n";
  6. }
  7. ?>

Prendendo d'esempio sempre l'immagine in alto, il risultato sarà:
Valore2
valore4