Newsgroup: it.comp.www.php
Titolo: Insert su mysql... a questo punto è magia! :(




    Ho già perso mezzo pomeriggio in una situazione assurda...

    Vi spiego



    Sto sviluppando in locale un sito (fortunatamente è ad uso
    personale).

    In questo sito c'è anche una sezione per inserire messaggi che vanno
    archiviati su db.

    Mentre sistemo cose e cosette mi accorgo che l'archiviazione nel db
    dei caratteri speciali (à ò ù...) non va "più" a buon fine e cioè a
    video compaiono i famosi rombi neri con ? bianco e se vado a vedere
    cosa viene archiviato nel db, nella tabella, trovo proprio i
    caratteri specifici e non gli equivalenti che invece avrebbero
    dovuto esserci visto che la stringa da archiviare passa da:

    $testo=addslashes($testo);

    (scrivo "più" perchè fino ad un attimo prima andava regolarmente).



    Non riesco ad individuare il motivo e voi penserete: hai di sicuro
    modificato qualcosa.

    Inutile dirvi che non ho toccato nulla di quella sezione.



    ECCO L'ASSURDO



    Per tagliare la testa al toro, vado a vedere sul  sito online che
    uso per ulteriori test.

    Li una versione più datata (per essere una copia precisa del sito
    che uso in locale mancano poche modifiche) funziona perfettamente.
    Perfetto, penso, guardo le differenze e trovo la magagna.



    Scarico l'intero sito dal web in locale, esporto dal web il db mysql
    via phpmyadmin e lo importo nel mysql locale sempre via phpmyadmin.



    E' tutto identico, ora ho una replica precisa del sito online,
    funzionante, che gira nel mio ambiente di sviluppo locale.



    Risultato: in locale NON VA!!!!!!!!



    E qui penserete, bene, allora è il tuo ambiente di sviluppo che è
    bacato.

    Cambio ambiente di sviluppo, da easyphp passo a wamp e nulla. :/



    A questo punto proprio non so come uscirne e spero che qualcuno di
    voi abbia la bacchetta magica... :(

    Grazie in anticipo.





 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>
Il parser HTML del mio cervello e` momentaneamente impegnato in una 
conversione opposta. Puoi riscrivere in italiano? :)
Bye.

 conversione opposta. Puoi riscrivere in italiano? :)
Chiedo umilmente scusa... :) Ho installato Thunderbird solo ieri e non 
avevo notato che aveva l'HTML abilitato.
Detto questo, provo a riscrivere in "italiano" ma non so se servirà a 
molto... :)
RISCRIVO:


 (scrivo "più" perchè fino ad un attimo prima andava regolarmente).
Hai diversi problemi da risolvere, tutti legati al fatto che 
probabilmente hai fatto il sito parecchi anni fa, o seguendo un manuale 
vecchio.
Il primo e` che usi addslashes per infilare roba in DB. E` caldamente 
sconsigliato. Usa mysql_real_escape_string().
Il secondo e` che non hai impostato un charset, quindi ti becchi il 
default di ogni "pezzo" che usi (S.O., browser, database, webserver, 
ecc.), che, visto il tuo messaggio, e` diverso tra il tuo PC e il server 
su cui girava il sito.
Ci sono diversi thread negli ultimi mesi in questo ng che parlano proprio 
di questo argomento, ma anche in Internet trovi parecchia roba gia` 
pronta (cerca "php mysql utf8" su Google).
Bye.

 pronta (cerca "php mysql utf8" su Google).
Grazie per la risposta.
Ho cercato via google e nei post precedenti; ho letto, e sono rimasto un pň 
confuso.
Attualmente la mia situazione č questa:
La pagina index ha dichiarato:
<meta  http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
L'insert eseguito da una pagina .php richiamata dall'index di cui sopra č 
cosě composto:
<?php
...
include("config/parametri_connessione.php");
mysql_connect("$host", "$username", "$password") or die ("Non riesco a 
selezionare la tabella ");
mysql_select_db("$db_name") or die ("Non riesco a selezionare la tabella");
$testo = $_GET["Testo"];
$testo=addslashes($testo);
$strsql = "insert into mia_tabella(id, testo, priorita) values('', '$testo', 
'1')";
$query = mysql_query($strsql) or die ("Errore: " . mysql_error());
mysql_close();
...
?>
Tutte le tabelle del db, tra cui quella nella quale viene inserita la 
stringa, ha collation latin1_swedish_ci
In fase di lettura la stringa viene semplicemente trattata con:
...
$testo =stripslashes(htmlspecialchars($row["testo"]));
Ora leggendo i post sull'argomento mi "sembra" (lo dico piano) che sia tutto 
corretto (il latin1 si sposa con l'iso-8859-1 etc...)
Sbaglio?