• User Attivo

    Problema campi MySQL contenenti apici. Come scrivere il record?

    Ciao ragazzi 🙂

    Ho realizzato una pagina PHP che legge da un database MySQL tutte le nazioni, regioni, province e città del mondo.

    Ho codificato tutto con UTF-8 (database, tabella, pagina PHP, codifica HTML) e ho pure messo mysql_set_charset('utf8') e anche mysql_query("SET NAMES 'UTF8'")...

    Riesco a leggere tutto correttamente, ma non riesco a scrivere il valore appena letto su un'altra tabella (anch'essa codificata con UTF-8) quando in mezzo al valore appena letto ci sono degli apici.

    Ecco degli esempi:
    'Ayn ad-Dafla
    'Ayn Tīmū?anat

    Ho provato a risolvere la cosa inserendo la funzione $regione=addslashes($regione) ma non cambia nulla.

    Qualcuno sa indicarmi dove sbaglio? :mmm:
    Qualche suggerimento?

    Grazie a tutti :gthi:


  • Super User

    potresti postare la query SQL e l'errore riportato?
    Se sono gli apici, basta l'addslashes.


  • User Attivo

    Io di solito utilizzo la codifica iso-8859-1.

    In ingresso nel DB i dati vengono "strippat" con mysql_real_escape_string.

    In uscita invece effettuo un semplice stripslashes().

    Non incontro nessu problema per quanto riguarda le accentate!


  • User Attivo

    Eccoti accontentato 😄

    Questo è il codice per la lettura del dato:

    
    <meta http-equiv=â??Content-Typeâ?? content=â??text/html; charset="UTF-8" />
    
    <?php
    //Mi collego al database
    $connessione=mysql_connect($host,$user,$password) or die ("Impossibile connettersi al server $host");
    mysql_select_db($database,$connessione) or die ("Errore di connessione al database $database");
    
    //Dico a MySQL quale codifica usare per salvare i dati nel database
    mysql_set_charset('utf8');
    mysql_query("SET NAMES 'UTF8'");
    
    //Prelevo il nome della città
    $citta = "SELECT city FROM cities WHERE country='$nazione' ORDER BY city ASC";
    $result = mysql_query($citta,$connessione);
    while($citta = mysql_fetch_array($result))
    {
     echo "<option value='".$citta[0]."'>".$citta[0]."</option>";
    }
    echo '  </select>';
    ?>
    
    

    ...questo il codice per la scrittura del dato (che si trova in un'altra pagina, il dato arriva tramite POST):

    
    <meta http-equiv=â??Content-Typeâ?? content=â??text/html; charset="UTF-8" />
    
    <?php
    //Mi collego al database
    $connessione=mysql_connect($host,$user,$password) or die ("Impossibile connettersi al server $host");
    mysql_select_db($database,$connessione) or die ("Errore di connessione al database $database");
    
    //Dico a MySQL quale codifica usare per salvare i dati nel database
    mysql_set_charset('utf8');
    mysql_query("SET NAMES 'UTF8'");
    
    $citta = addslashes($citta);
    $citta = mysql_real_escape_string($citta,$db);
    
    //Scrivo la cittÃ* scelta sulla tabella delle ricerche
    $update = mysql_query("UPDATE ricerca SET citta='$citta' WHERE id='$id_utente'");
    
    

    Come vedi ho usato sia addslashes e sia mysql_real_escape_string ma l'errore di salvataggio c'è sempre.

    Insomma, il campo viene salvato nel record ma non viene salvato per intero!
    Infatti se la città di chiama ad esempio Qal'eh-ye Naw verrà scritto nel db solo la parte prima dell'apice cioè Qal...

    Com'è possibile?
    Dove sbaglio?

    Grazie ancora per l'aiuto :smile5:


  • User Attivo

    @Amistat said:

    Io di solito utilizzo la codifica iso-8859-1.

    In ingresso nel DB i dati vengono "strippat" con mysql_real_escape_string.

    In uscita invece effettuo un semplice stripslashes().

    Ma io in uscita non ho nessuno slash... ho solo apici :dull:


  • User Attivo

    Ma ti sei accorto del meta che hai nella pagina??

    <meta http-equiv=�Content-Type� content=�text/html; charset="UTF-8" />


  • User Attivo

    Infatti ho specificato che IO nel mio caso uso lo strip in uscita, solo perchè in entrata aggiungo gli slash!


  • User Attivo

    @Amistat said:

    Ma ti sei accorto del meta che hai nella pagina??

    <meta http-equiv=â??Content-Typeâ?? content=â??text/html; charset="UTF-8" />

    Certo che me ne sono accorto 😄
    ...e non vedo dove sia il problema.

    Tranquillo che quel META sta lì solo per farvi capire che leggo la pagina con UTF-8, tutto quà 😉
    ...mica sta lì tanto per... eheh


  • User Attivo

    Problema risolto con

    echo "<option value=\"$citta[0]\">$citta[0]</option>";
    

    C'era un pò di apici di troppo 😄

    :ciauz:


  • User Attivo

    @Protone86 said:

    Certo che me ne sono accorto 😄
    ...e non vedo dove sia il problema.

    Tranquillo che quel META sta lì solo per farvi capire che leggo la pagina con UTF-8, tutto quà 😉
    ...mica sta lì tanto per... eheh

    Semplicemente era per farti notare i caratteri strani che avevi nel meta...

    Bo vabbè alla fine hai risolto!


  • User Attivo

    Ah ok, avevo capito male... 😉
    I caratteri strani erano dovuti al fatto che il file PHP che ho è salvato con la codifica UTF8...

    Grazie comunque, ciao :ciauz: