Problema inserimento stringa con apostrofo in database sql

radioButton

Utente Attivo
26 Dic 2013
35
0
6
Arezzo
Ciao,
premetto che tra le discussioni c'è già qualcosa di simile al problema che voglio porre ma siccome non c'ho capito molto vorrei spiegare ciò che ho da risolvere.
Ho creato un form che invia dei dati ad un database sql.
Tutto funziona correttamente tranne quando invio stringhe che presentino un'apostrofo (la query non viene eseguita e mi arriva il messaggio di fallita esecuzione query).
Esiste una maniera per fare in modo che ciò non accada?
Devo scrivere una procedura che sostituisca l'eventuale presenza di apostrofo con doppia apostrofo o c'è una maniera + immediata per risolvere il problema?
Grazie a tutti coloro che avranno avuto la pazienza di leggermi.
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Devi assicurarti di inserire un backlash dietro ogni apostro, la query risultante dovrà essere -ad esempio- così:
Codice:
UPDATE table SET column = 'Ce l\'ho fatta' WHERE clause = 1

In generale consiglio di utilizzare i prepared statements per ovviare al problema.
 

radioButton

Utente Attivo
26 Dic 2013
35
0
6
Arezzo
Devi assicurarti di inserire un backlash dietro ogni apostro, la query risultante dovrà essere -ad esempio- così:
Codice:
UPDATE table SET column = 'Ce l\'ho fatta' WHERE clause = 1

In generale consiglio di utilizzare i prepared statements per ovviare al problema.

Ciao, grazie per la tua risposta.
Devo ammettere però che non ho capito il tuo suggerimento, mi spiego meglio:
Supponiamo che io sia un generico utente che deve compilare un form di iscrizione ad un sito.
Nel campo 'cognome' scrivo il mio cognome che per esempio è " D'Alessio".
Ecco, in questo caso, quando invio, il database non esegue la query perchè c'è un'apostrofo.
Chiaramente io utente non posso sapere che se scrivessi " D''Alessio " tutto funzionerebbe
però immagino che ci sarà pur una maniera per fare in modo che nell'input di un form
si possa scrivere una parola con un'apostrofo...
Tu mi stai suggerendo forse che devo scrivere la query in una maniera particolare?
Mi scuso sin da ora se mi hai detto una cosa lapalissiana che non riesco a cogliere.
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Prendendo in prestito il tuo esempio, devi far si che D'Alessio diventi D\'Alessio prima di passare il dato alla query.
Ci sono diversi modi per ottenere ciò, che linguaggio di scripting utilizzi ?
 

radioButton

Utente Attivo
26 Dic 2013
35
0
6
Arezzo
Prendendo in prestito il tuo esempio, devi far si che D'Alessio diventi D\'Alessio prima di passare il dato alla query.
Ci sono diversi modi per ottenere ciò, che linguaggio di scripting utilizzi ?

Uso JQuery; in pratica mi suggerisci di scansionare quel particolare input prima che il suo valore venga inviato al database e di sostituire " ' " con " \' " ?
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Pardon, intendevo lato server.
Comunque si, il suggerimento è quello. Se usi PHP per esempio esiste una pratica funzione che si chiama addslashes() adatta allo scopo.
 

radioButton

Utente Attivo
26 Dic 2013
35
0
6
Arezzo
Pardon, intendevo lato server.
Comunque si, il suggerimento è quello. Se usi PHP per esempio esiste una pratica funzione che si chiama addslashes() adatta allo scopo.

No scusa ero io che avevo capito male.... si uso PHP ed il tuo consiglio penso mi sarà molto utile.

Potrei per esempio impostare la cosa così:

PHP:
$cognome=$_POST['nameInput'];
$cognome=addslashes($cognome);

e poi impostare la query.

Ti ringrazio, come al solito mi togli le castagne da fuoco flame!

Avrei anche da fare un paio di domande sulla capacità di calcolo dei database,
la posso fare direttamente qua o devo aprire una nuova discussione?

Per il momento chiudo rinnovando i miei ringraziamenti, domani mattina provo a mettere in pratica i tuoi suggerimenti.

Grazie.
 
Ultima modifica di un moderatore:

radioButton

Utente Attivo
26 Dic 2013
35
0
6
Arezzo
Pardon, intendevo lato server.
Comunque si, il suggerimento è quello. Se usi PHP per esempio esiste una pratica funzione che si chiama addslashes() adatta allo scopo.

Stamani ho provato a risolvere il mio problema con addslashes() ma la cosa non funzionava allora ho pensato, a partire dal concetto che tu mi hai suggerito, di far precedere un apice ad ogni eventuale
apice presente nella stringa. Ho usato str_replace(); in pratica:

PHP:
$nome= $_POST['name'];
$nome=str_replace($nome, " ' ", " '' ");

tutto ora sembra funzionare.
 
Ultima modifica di un moderatore:

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Si, va bene anche in quel modo l'escape della stringa.
Per l'altro quesito invece è meglio aprire un altro topic ;)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
....o devo aprire una nuova discussione?
un'altra, un problema = una discussione

p.s.
perchè con addslashes non funziona?

verifica bene quello che hai fatto
prova questo scriptino
PHP:
<?php
$variabile="Pinco D'Asdrubale";
echo "<pre>";
var_dump($variabile);
$variabile=addslashes($variabile);//aggiunge lo slash
var_dump($variabile);
$variabile=stripslashes($variabile);//toglie lo slash
var_dump($variabile);
echo "</pre>";
?>
 
Ultima modifica:

radioButton

Utente Attivo
26 Dic 2013
35
0
6
Arezzo
ciao

un'altra, un problema = una discussione

p.s.
perchè con addslashes non funziona?

verifica bene quello che hai fatto
prova questo scriptino
PHP:
<?php
$variabile="Pinco D'Asdrubale";
echo "<pre>";
var_dump($variabile);
$variabile=addslashes($variabile);//aggiunge lo slash
var_dump($variabile);
$variabile=stripslashes($variabile);//toglie lo slash
var_dump($variabile);
echo "</pre>";
?>

Ciao,
non so spiegarmi il perchè, ti posso però dire che se nell'input cognome del form scrivo per esempio D\'Asdrubale mi da errore mentre se scrivo D''Asdrubale tutto fila liscio.
E' per questo che ho pensato di usare la doppia apostrofo.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
intanto perche nel campo di input devi scrivere D\'Asdrubale? non vedo la ragione che un utente debba scivere in quel modo,
comunque se hai paura che un utente metta lo slash

PHP:
$variabile=addslashes(stripslashes($variabile));

cioè prima togli se c'è e poi l'aggiungi

p.s.
non riportare con quete il post, porta via solo spazio
 

radioButton

Utente Attivo
26 Dic 2013
35
0
6
Arezzo
No Borgo Italia, probabilmente mi sto spiegando male;
se un utente si vuole per esempio registrare e nel form scrive " D'Asdrubale " la query non viene eseguita perchè il database sql si incasina con l'apostrofo.
Se io faccio in modo di inviare al server la variabile modificata con l'aggiunta di \ sembra non funzionare lo stesso (forse proprio perchè il database è sql come mi ha giustamente domandato FlameSeeker).
Se invece faccio in modo che in presenza di apice ne venga aggiunto un altro (e questo lo faccio a livello di scripting lato server ossia php) tutto è ok, come ho avuto modo di riscontrare.
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
SQL, Structured Query Language, indica la sintassi standardizzata con cui formuli una query qualsiasi (SELECT, DELETE, UPDATE etc).
Chi legge questo linguaggio è un software e ce ne sono di diversi allo scopo, come ad esempio MySql, PostgreSql, SQLite, SQL SERVER e altri ancora.

Non riesci ad identificare, di preciso, il software che stai utilizzando?

Sicuramente hai risolto e quindi va benone per te, ma come dice borgo è giusto per la curiosità di capire come mai una soluzione standard come quella suggerita in principio non funzioni, tutto qui.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
Ciao

per postgresql, goglando, ho trovato che ha le stesse sequanze di escape di mysql

per Microsoft JDBC Driver per SQL Server supporta l'utilizzo di sequenze di escape SQL, in base a quanto definito dall'API JDBC. come postgresql

L’unico un po’ diverso è sqlite, da manuale php:
La funzione addslashes() NON dovrebbe essere utilizzata per inserire i caratteri di escape nelle query SQLite; questa porta a strani risultati quando si recuperano i dati

quindi, salvo che non usi sqlite, non capisco perche non funzioni
 

radioButton

Utente Attivo
26 Dic 2013
35
0
6
Arezzo
Chiedo venia e scusa ad entrambi, con tutte ste sigle mi sono incasinato.
Il database è MsSql, forse questo spiega l'arcano?
 

radioButton

Utente Attivo
26 Dic 2013
35
0
6
Arezzo
per essere ancora più espliciti le query le chiamo come segue:

sqlsrv_query($this->conn, $query);

non è sql questo? Perdonatemi ma con tutte ste sigle mi perdo...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
se è MsSql addslashes dovrebbe funzionare.
comunque un dubbio

PHP:
sqlsrv_query($this->conn, $query);
è una funzione, cosa contiene?
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
M Problema inserimento parole con apostrofo nel db PHP 5
beatle [Photoshop] problema inserimento immagini Photoshop 1
G inserimento csv in tabella mysql; problema con struttura PHP 11
P [PHP] Problema inserimento nuove chiavi in array PHP 2
giuseppe_123 [WordPress] Problema inserimento widget nel footer WordPress 0
T Problema inserimento dati in phpmyadmin PHP 2
L Problema Inserimento Azioni Su mappa vettoriale Javascript 0
otto9due Problema inserimento ciclo foreach o while in variabile PHP 1
M Problema inserimento dati in sqlite Sviluppo app per Android 1
M Problema con modulo registrazione e inserimento dati in database PHP 8
Marcoingrande Problema inserimento testo in <ul> PHP 0
P Problema inserimento controllo su script multiupload... PHP 2
P Problema Inserimento nuovo element database... MySQL 3
B Problema inserimento dati con apostrofo MySQL 1
O [risolto] Inserimento nuovo campo in mysql. Problema PHP 6
Emix Problema query inserimento... PHP 6
N problema inserimento record multipli col tasto f5 PHP 6
P Problema inserimento articolo con piu' tabelle PHP 1
S Problema inserimento nuovo record da form PHP 5
EffeElle Php problema su inserimento dati mysql PHP 47
M problema con l'inserimento di dati in un tag input PHP 3
P problema inserimento dato in rubrica PHP 9
Dexter_90 [AIUTO!] Problema Inserimento Menu Fireworks nell'Header WordPress 11
A problema con l'inserimento di valori in una tabella dopo una ricerca da form Classic ASP 1
E Problema inserimento LIKE BOX facebook HTML e CSS 3
B Problema di inserimento "menu con css" in pagina web "con tabelle" HTML e CSS 5
J Problema con inserimento dati tabella PHP 4
asevenx problema inserimento database nel sito online MySQL 3
asevenx problema con l'inserimento di un record nel database (caratteri non consentiti) PHP 11
G Help - Problema inserimento dati in maschera MySQL 4
T problema inserimento testo attraverso istruzione insert ASP.NET 1
G Problema inserimento dati in una maschera Database 0
N [PHP/MySQL] Problema inserimento stringhe ' or ', ' and ' PHP 2
G problema con inserimento dati PHP 4
A Problema inserimento in puù tabelle Database 1
S problema con inserimento nuovo record PHP 6
A problema inserimento foto PHP 0
F Problema inserimento dati Classic ASP 1
F Problema con il modulo inserimento record Classic ASP 1
A Problema, non so, di scale() o transform, oppure altro? HTML e CSS 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
I PROBLEMA: Sostituzione sito XAMPP E-Commerce 0
T problema data 30/11/-1 PHP 0
L Problema RAM con Tomcat 8 Apache 0

Discussioni simili