$sql = mysql_query("CREATE TABLE $tabella (`nd` int( 3 ) not NULL default '0') TYPE = MYISAM;",$db);
if (!$sql) echo "<p align=left>c'è stato un errore tecnico; segnala al webmaster il messaggio seguente: <br>".$_SERVER['PHP_SELF']." ".__LINE__."<br>";
[ /php ]
Ho pensato di sostituire $tabella=mysql_escape_string($tabella) con $tabella=md5($tabella), ma non è il massimo della vita.
Io posso consigliarti di sostituire l'apice con un altro carattere, ad esempio l'underscore (_). Così eviti anche eventuali future incompatibilità (come è stato per esempio con le accentate).
Il consiglio di Debug è senza dubbio il più saggio.
Oltretutto, almeno per quel che mi immagino, mysql_escape_string lo usi appunto (il nome stesso lo dice "string") quando in una query vuoi assicurarti che caratteri come l'apice saranno correttamente "escapati" o "becslesciati" ( \' al posto di ' ) ma questo all'interno di espressioni STRINGA.
Non so se mi sono spiegato, cioè usi:
$str = mysql_escape_string($str);
quando il valore di $str sarà comunque piazzato all'interno di apici per esprimere valori stringa nella query, quindi:
$query = "SELECT * FROM nometabella WHERE campo='$str' AND ...";
vedi? il valore di $str va a finire tra apici e mysql_escape_string assicura che nel valore non ci siano apici che possano chiudere anzitempo la stringa creando un errore di sintassi sql.
Detto questo, secondo me non ha senso mysql_escape_string per il nome di una tabella, perché è un nome e non una stringa.
Poi possiamo anche investigare...
magari utilizzando quegli apicetti diagonali (che phpmyadmin usa sempre per evitare conflitti con le keyword sql) vediamo... ma non sarei tanto speranzoso.
Quindi così al volo convertirei in underscore _ come detto prima.
Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)
si, ero giunto anch'io a questa conclusione. Il fatto è che il nome della tabella coincide con un cognome, e nei cognomi a volte l'apostrofo c'è. Però ho deciso di imporre l'eliminazione di caratteri pericolosi all'utente, altrimenti tutto il codice dovrebbe essere fatto con estrema attenzione e questo mi complica troppo la vita.
Comunque grazie lo stesso.
Ultima cosa: sono corretti i tag che ho usato per racchiudere il codice nel messaggio? (in altri messaggi mi ero preso delle sgridate)
Ultima modifica di imcamo : 17-07-2006 alle ore 20.51.17
Potresti "risolvere" creando una tabella (se non esiste già) per gli utenti dove dedichi un campo al nome della tabella corrispondente.
Per esempio, per l'utente Gabriele d'Annunzio: