blog personale

Archivi di PHP category

Vedo spesso dei siti dove ci sono errori nelle query, specialmente in query di insert.

Il problema è dovuto agli inserimenti di stringhe contenenti caratteri usati come separatori per le query (apici o virgolette).

quindi vengono usati addslashes che sconsiglio fortemente, soprattutto se vogliamo creare applicazioni  web portabili su più server e indipendenti dalla versione mysql e codifiche installate.

Da sapere:

la direttiva magic_quotes di php aggiunge slash ai caratteri apici e virgolette ai dati POST GET e COOKIE, quindi consentirebbe a semplici query di agire correttamente. Sbagliato !! è una impostazione per principianti, poi avrete probabilmente problemi a seconda dei caratteri che usate come separatore nella query e sarete vincolati alla versione di mysql e codifica. Se è abilitata (e lo controllate con get_magic_quotes_gpc() ) , fate uno stripslashes ai dati in POST/GET/COOKIE e processate invece i campi con

mysql_real_escape_string

(PHP 4 >= 4.3.0, PHP 5)
mysql_real_escape_string –  Aggiunge le sequenze di escape ai caratteri speciali in una stringa per l’uso in una istruzione SQL, tenendo conto dell’attuale set di caratteri della connessione.

poi la query la eseguite usando gli apici singoli (non virgolette !) come separatori

$testo = mysql_escape_string($_POST['testo', $conn]);
$q = "INSERT INTO `tab` (`id`, `testo`) VALUES ( ‘3′, ‘$testo’ )";

 

Leggi tutto… »

Con il passaggio alla versione 5, PHP non ha mantenuto la retrocompatibilità su alcuni costrutti e oggetti predefiniti.
 Elenco qua alcune modifiche fatte e come creare una cross-version compatibility

  PHP4 PHP5 soluzione PHP4 & PHP5
costruttori  stesso nome della classe __construct(…)   creare il costruttore con __construct(), quindi creare una funzione con lo stesso nome della classe che chiama __construct() passandogli gli argomenti
cookie  memorizzati in $HTTP_COOKIE_VARS  memorizzati in $_COOKIE

controllare quale dei due contiene il valore con una istr condizionale

$valore = $HTTP_COOKIE_VARS['k'] ? $HTTP_COOKIE_VARS['k'] : $_COOKIE['k'];

       

Altre note: PHP4 non supporta i parametri passati per riferimento con valore di default

qualcuno ha qualche correzione o aggiunta ?

RSS to Mail - script PHP

Non ho trovato un modo semplice per ricevere periodicamente le news RSS via mail.
L’obiettivo è quello di avere ogni giorno nella casella mail le news (non già precedentemnte inviate).

Attraverso le funzioni xml di php5 e md5() ho creato al volo uno scriptino essenziale che sembra funzionare.
Per ogni url dell’array $urls

  • processo la url e ricavo titolo, link e descrizione (testo) delle news della fonte
  • se una news non è già stata inviata (*) la accodo nel body da inviare nella mail e flaggo che la news è stata inviata (*)
  • creo la mail con oggetto=nome fonte, corpo in html. Invio

(*) identificazione coppia (fonte, news) attraverso il controllo di esistenza del file di nome = md5(url) contatenato a md5(titolo) . Questo garnatisce che una news venga inviata una sola volta.

Leggi tutto… »

files & subdirs listing script

Non trovando uno script PHP per creare un visualizzatore dei files e dirs presenti in ogni dir e sottodirs (senza avere lo script in ogni sottodir), ne ho creato uno al volo spartano, lo copio qua sotto (così quando mi serve lo ritrovo :D) e magari può servire (forse) a qualcun’altro. Chiamare lo script "index.php"

<h2><a href="index.php">index</a></h2>
<ul>
<?
$_GET['folder'] = $_GET['folder'] ? $_GET['folder'] : ".";
$h = opendir($_GET['folder']);

while (($file = readdir($h))!=false)
{
 
 $file_path = $_GET['folder'].’/’.$file;
  //
  if (is_dir($file_path))
    print ‘<li><b>[ <a href="?folder='.$file_path.'">'.$file.'</a> ]</b></li>’;
  else
    print ‘<li><a href="’.$file_path.’">’.$file.’</a> (’.round(filesize ($file_path)/1024/1024,2).’ Mb)</li>’;
}
?></ul>

Copio il semplice codice PHP per leggere record da un database e creare una fonte xml RSS.
Tralascio il codice per collegarsi al database e la query. Uso nomi inventati per i campi della tabella del db. Il link della fonte RSS è ovviamente la pagina dove inseriamo il codice (es: fonte_rss.xml.php).
Attenzione alla sintassi xml, il parser xml di mozilla è ad es. molto sensibile ai caratteri di andata a capo.
La prima riga della fonte xml è scritta in tal modo in quanto il tag di apertura xml inizia come il tag di apertura per il codice php e il parser php lo interpreterebbe erroneamente come codice php.

<? print '<'.'?xml version="1.0" ?><rss version="2.0"><channel>'; ?>
<title>
titolo

</title>
<link>
http://www.sito.it
</link><description>
descrizione
</description>
<language>it</language>
<copyright>
autore news
</copyright>

<?
//connessione mysql
while ($row=mysql_fetch_array($result))
{
   $page.='<item><title>'.$row[titolo].'</title>';
   $page.='<description>'.$row[description].'</description><link>'.$row[link].'<link></item>\n' ;

print $page;

?>
</channel>
</rss>

Feed RSS per www.csr.unibo.it

Nel nostro sito del corso di laurea in Scienze dell'informazione di Cesena (http://www.csr.unibo.it) non è ancora presente un feed RSS con gli avvisi (es: spostamento o annullamento lezioni).
Ho rimediato creando uno script php che, con qualche espressione regolare, processa tutte le pagine delle news e tira fuori un xml (aggiornato automaticamente ogni 5 minuti).
Potete aggiungere il link al vostro aggregatore news, segnalatemi eventuali problemi. Con la pagina personalizzata di google ho provato e funziona.

Ecco il link: http://www.elvisciotti.it/csr.xml.php

Oppure http://sprite.csr.unibo.it/feed_csr/ 

Come fare per evitare che gli spider trovino gli indirizzi email che inseriamo nelle pagina web ?
Un'ottima soluzione è sostituire i caratteri con i corrispondenti codici html.
il codice html per linkare la mail user@dominio.it, sostituendo per esempio il carattere "@" con il corrispondente codice html "@", diventa:
<a xhref="mailto:&#064;dominio.it>user&#064;dominio.it"</a>

Possiamo crearci una funzione php che trasforma tutti i caratteri componenti l'indirizzo in codice html. Oppure, per semplicità e per creare ancora più confusione agli spider, possiamo trasformare solo alcuni caratteri (ne basta uno per rendere l'indirizzo mail diverso). Suggerisco di trasformare solo le vocali e la chiocciola, visto che compaiono sparsi in tutti gli indirizzi mail.

ecco la funzione:

function mailmask($email)
{
  $sostituzioni = array('a' => '&#097;',
                    'e' => '&#101;',
                    'i' => '&#105;',
                    'o' => '&#111;',
                    'u' => '&#117;',
                    '@' => '&#064;'
                    );

                    foreach($sostituzioni as $search=>$replace)
                          $email = str_replace($search, $replace , $email); return $email;

}

esempio di utilizzo:
<a xhref="maito:<?=mailmask("user@dominio.it")?>"><?=mailmask("user@dominio.it")?></a>


 

Ultimi post

About Me

Blog tecnico/geek di Elvis. Chi sono ? studente & web developer freelance. Vedi la pagina "about me" per altre info.

scontiphp