29
Feb
Postato in PHP by admin |
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… »
10
Feb
Postato in PHP by admin |
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 ?
4
Dec
Postato in PHP by admin |
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… »
24
Nov
Postato in PHP by admin |
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>
24
Jul
Postato in PHP by admin |
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>
20
Apr
Postato in PHP by admin |
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/
12
Mar
Postato in PHP by admin |
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:@dominio.it>user@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' => 'a',
'e' => 'e',
'i' => 'i',
'o' => 'o',
'u' => 'u',
'@' => '@'
);
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>