[PHP] form con select che non invia dati se con apostrofo

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Salve, ho un problema con le parole apostrofate per una select di un form. Le opzioni vengono prese direttamente dal database (caricate da un altro form), la select funziona correttamente, ma se viene selezionata una parola apostrofata il valore inviato al database viene troncato proprio all'altezza dell'apostrofo. Se ad esempio la scelta è D'Artagnan, nel database troverò solamente D.

In un altro caso ho un input di testo che dovrebbe leggere (in fase di sola lettura) le informazioni provenienti dal database, ma in questo caso ho il problema inverso, nel database trovo D'Artagnan e nella casella ho solo D.

Mentre in altri casi la lettura e l'invio avvengono in modo corretto..

In entrambi i casi ho usato mysqlI_real_escape_string, ho provato anche a sostituire gli apostrofi nel comando di invio con le virgolette, ma niente, ho sempre le parole troncate. Riporto le righe della select:
PHP:
<?php
//prendo i dati inviati dal form
$cavallo = mysqlI_real_escape_string($mysqli_connect, $_POST['cavallo']);
...
//invio i dati al database
  $query = "INSERT INTO $tableAssegnaDiete (id, dieta, cavallo, data, creato_da, azione, ultima_modifica, inizio, fine, note)VALUES ('', '$dieta', '$cavallo', '$date', '$sessionUser', '1', '', '$inizio', '$fine', '$note')";
...
?>
<select name = "cavallo">
           <option value=''></option>
<?php
//gruppo esterno                   
$sql = "SELECT descrizione FROM cavalli ORDER BY descrizione"; //qui estrae correttamente D'Artagnan
            if ($result = mysqli_query($mysqli_connect, $sql))
            {
                     while ($row = mysqli_fetch_array($result))
                    {
?>
                        <option <?php echo "value='$row[0]'";><?php echo "$row[0]"; ?></option>
<?php
                       }
              }
?>           
</select>
Come posso risolvere?
Grazie mille
 

web-image-1947

Nuovo Utente
26 Giu 2016
13
2
3
73
Salve,
hai provato a mettere lo slash ?
esempio D\'Artagnan in fase di inserimento per poi trovarlo nel database ?
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Allora in fase di creazione del record nella tabella 'cavalli' se inserisco D\'Artagnan nel database mi ritrovo esattamente D\'Artagnan, e anche nella select lo leggo con lo slash...

Mentre se seleziono D\'Artagnan nella select e invio i dati, nel database mi ritrovo D\
In poche parole lo slash viene trattato come un normale carattere, probabilmente per via della funzione mysqlI_real_escape_string. Se tolgo la funzione ottengo l'errore:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near...
Mentre, se seleziono D'Artagnan senza la funzione, nel database leggo comunque D.
 

web-image-1947

Nuovo Utente
26 Giu 2016
13
2
3
73
Ciao,
effettivamente l'apostrofo viene considerato un carattere da pulire.
Ho effettuato delle prove e anche a me genera lo stesso errore.
Un semplice modo provato (ma ovviamente non so se poi a te va bene...) è quello di unire le due parti della parola/nome/o quello che è con l'underscore es: D'Artagnan scriverlo: D_Artagnan.
Viene inserito e letto in modo corretto.
Se luminari di php che ne sanno certo più di noi hanno una soluzione migliore sono anch'io tutto orecchi.
Buona giornata
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
prova ad usare addslashes e stripslashes
PHP:
<?php
//....
$cavallo = addslashes($_POST['cavallo']);
//e dove ti serve
//........
?>
        <option value='<?php echo stripslashes($row[0]);?>'><?php echo stripslashes($row[0]); ?></option>
<?php
    }
}
//... eccetera
?>