Problema inserimento dati con apostrofo

BrunaB

Nuovo Utente
3 Gen 2014
1
0
0
Ciao! Sto sviluppando un piccolo database con pagine php per accedere alle informazioni. Ho incontrato un problema nel passaggio di una variabile contenente un apostrofo da una pagina all'altra e volevo chiedere un aiuto.

Nella prima pagina c'è un form da cui si possono selezionare le diverse opzioni. Nella seconda pagina la query che inserisce tutti i campi nel database. Il problema si presenta con il corso "Palestra sull'acqua" perché alla seconda pagina viene passato solamente "Palestra sull". La conseguenza è che sul database viene salvata solamente la stringa "Palestra sull" che ovviamente non va bene.

Ho provato a usare \ prima dell'apostrofo. A usare delle stringhe e usare la funzione mysql_real_escape_string() ma con scarso successo (l'unica cosa che sono riuscita ad ottenere è salvare "Palestra sull\") probabilmente perché non sono molto pratica e potrei aver commesso degli errori.

Vi posto i pezzi di codice incriminati.

Prima pagina con il form
...
print "Corso:";
print "<select required name='corso'>";
print "<option selected value=''></option>";
print "<option value='CAS'>CAS</option>";
print "<option value='Agonismo'>Agonismo</option>";
print "<option value='Palestra sull'acqua'>Palestra sull'acqua</option>";
print "<option value='Uscite libere'>Uscite libere</option>";
print "<option value='Corso adulti 1'>Corso adulti 1</option>";
print "<option value='Corso adulti 2'>Corso adulti 2</option>";
print "<option value='Corso adulti 3'>Corso adulti 3</option>";
print "</select>";
...

Seconda pagina con la query
...
$query="INSERT INTO iscritti(CF,Nome,Cognome,Telefono,DataNascita,Categoria,NomeCorso,NomeSezione)
VALUES('".$_REQUEST["cf"]."','".$_REQUEST["nome"]."','".$_REQUEST["cognome"]."','".$_REQUEST["telefono"]."',
'".$_REQUEST["datanascita"]."','".$_REQUEST["categoria"]."','".$_REQUEST["corso"]."','Canottaggio');";
...

Grazie mille in anticipo!
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Il tuo problema inizia da qui:
PHP:
print "<option value='Palestra sull'acqua'>Palestra sull'acqua</option>";
Lato html quell'apostrofo interferisce e dal tuo select, se si sceglie quell'opzione, il form invierà sempre e solo la parte in grassetto:
Codice:
<option value='[B]Palestra sull[/B]'acqua'>Palestra sull'acqua</option>
Ti suggerirei di risolvere cambiando i quotes con gli apostrofi e viceversa qui:
PHP:
print '<option value="Palestra sull\'acqua">Palestra sull\'acqua</option>';

Secondariamente l'apostrofo che viene ora inviato dal form può interferire con la query, e quindi qui è il caso di usare un addslashes per evitare ciò:
PHP:
'". addslashes($_REQUEST["corso"]) ."'


A questo punto ti suggerisco fortemente di informarti sull'uso dei prepared statements dal momento che che la tua query è fortemente vulnerabile alle sql injection (bisogna sempre verificare la validità di ogni input che arriva dall'utente).