Monthly Archive for March, 2009

Una classe per la gestione di database mysql

Questa classe segnalata e realizzata da Flaz è utilissima per la gestione di database mysql. Il post illustra tutta una serie di esempi per un pratico e corretto utilizzo.

Gestione della connessione MySQL in PHP: la mia classe

Alternativa all’ header PHP

A volte utilizzando l'espressione

PHP:
  1. if ( isset($_POST['Submit']) && $_POST['Submit'] == "Inserisci" ){
  2.     $GoTo = "paginaPHP.php";
  3.     header(sprintf("Location: %s", $GoTo));
  4. }

può capitare di vedersi un errore del tipo:

HEADER ALREADY SENT

Una soluzione veloce e molto efficace potrebbe essere quella di utilizzare il tag meta di html

PHP:
  1. <?php
  2. //blocco condizionale
  3. if ( isset( $_POST['Submit'] ) && $_POST['Submit']== "Inserisci" ){
  4. ?>
  5.  
  6. <META HTTP-EQUIV="REFRESH" CONTENT="2; URL=http://www.sitoweb.it">
  7.  
  8. <?php
  9. }
  10. ?>

Generalizzare mysql_escape_string

Con le nuove versioni di php è stato prima deprecato e poi eliminato il parametro Magic Quotes. Questo parametro, quando impostato su ON, aggiungeva automaticamente il carattere escape - \ - ove necessario nei dati in arrivo via post, get o cookie.
Più semplicemente, se da una pagina all'altra mandavi una variabile, da aggiungere su database mysql, di questo tipo:

PHP:
  1. $var="L'uno per l'altro, con l'altro, contro l'altro";

il contenuto della variabile veniva automaticamente convertito in:
"L\'uno per l\'altro, con l\'altro, contro l\'altro".
Con il Magic Quotes impostato su OFF, o assente, ovviamente questo non succede più e ciò significa che questa operazione va fatta fare di volta in volta, altrimenti, per intenderci, la query di inserimento su database restituisce un warning o tronca la stringa al primo apice (se non ricordo male).
Per ovviare a questa cosa si usa la funzione mysql_escape_string($unescaped_string) in questo modo:

PHP:
  1. $var = mysql_escape_string($var)

Fatto questo la variabile può tranquillamente essere utilizzata.
Quindi...
Se devi scrivere un codice ex-novo nessun problema.
Ma...
Il problema nasce quando hai un codice già scritto da trasferire su un server che non prevede le Magic Quotes. Dovresti prendere una ad una tutte le variabili che interessano inserimenti/aggiornamenti su database e "mysql_escape_string-arle".
In alternativa come fare?
Un metodo potrebbe essere quello di includere all'inizio di ogni file php (magari sfruttando un'inclusione già esistente) il seguente piccolo script:

PHP:
  1. foreach ($_POST as $key => $value)
  2. $$key = mysql_escape_string($value);

In questo modo tutte le variabili passate in POST verranno "mysql_escape_string-ate" in automatico.