-
Apostrofi
Salve a tutti, ho un problema per inspiegabile.
Ho fatto un piccolo programma con l'inserimento e ricerca di nomi in un archivio.
Stranamente da oggi non accetta più e non trova neppure i cognomi con l'apostrofo (es. D'ANTONIO).
Quindi benchè il nominativo sia inserito in archivio non lo trova e non mi inserisce neppure un nuovo nome come D'AMARIO in archivio. Non capisco questo cambiamento di comportamento e soprattutto non ne trovo la soluzione.
Qualcuno può darmi qualche indicazione ?
Questa è la riga di codice usate e che andava bene, anzi va ancora bene a parte il caso citato, per la ricerca.
Codice PHP:
$sql = "SELECT * FROM SalaStudio WHERE cognome LIKE '$_POST[key]%' OR cognome LIKE '$_POST[key]%' ORDER BY cognome ASC";
$res = mysql_query($sql);
Grazie di ogni aiuto
-
Devi utilizzare mysql_real_escape_string
Codice PHP:
$sql = "SELECT * FROM SalaStudio WHERE cognome LIKE '".mysql_real_escape_string($_POST['key'])."%' OR cognome LIKE '".mysql_real_escape_string($_POST['key'])."%' ORDER BY cognome ASC";
$res = mysql_query($sql);
-
E aggiungo che non è solamente un malfunzionamento, è un serio problema di sicurezza che permette ad un eventuale malintenzionato di manipolare la query a piacimento, riuscendo potenzialmente ad eseguire qualsiasi operazione sul database in oggetto.
Per maggiori dettagli cerca SQL injection sul tuo motore di ricerca preferito.
-
Grazie a entrambi. Grazie tantissimo, anche per la spiegazione sulla sicurezza.
Ho risolto la prima parte del problema.
Adesso devo risolvere la seconda parte, cioè salvare i dati con l'apostrofo.
La insert che utilizzo è :
Codice PHP:
$query = "INSERT INTO SalaStudio (cognome, nome, ecc...) VALUES ('$cognome', '$nome', ecc...)";
if (mysql_query($query, $db))
-
La procedura è la medesima, utilizza la funzione indicata da Miki92. Assicurati inoltre di usarla in ogni query che include dati provenienti dall'esterno.
-
Aggiungo solo che se le variabili $nome, $cognome, ecc sono già filtrate da quella funzione (o da altre funzioni simili) nella query puoi utilizzare le variabili tra parentesi graffe:
Codice PHP:
$query = "INSERT INTO SalaStudio (cognome, nome, ecc...) VALUES ('{$cognome}', '{$nome}', ecc...)";
-
Grazie, il dato mi viene salvato, ma con il codice ascii.
Cioè D'ANGELO nel database viene (D'ANGELO) e non va bene.
Eppure quando carico il dato via POST, uso htmlspecialchars per importare anche i caratteri speciali
Codice PHP:
$cognome= htmlspecialchars ($_POST['cognome'], ENT_QUOTES);
Come dovrei fare ?
-
Forse è il forum che ha modificato il tuo post perchè a vedersi così sembra tutto normale.
Premettendo che gli apostrofi vengono salvati con un backslash che li precede puoi utilizzare stripslashes() per eliminarli ma se utilizzi la funzione mysql_real_escape_string verranno sempre aggiunti.
-
Grazie del tuo preziossimo aiuto.
Ho cambiato semplicemente la stringa d'importazione così:
Codice PHP:
$cognome=mysql_real_escape_string($_REQUEST["cognome"]);
in questo modo mi salva correttamente il cognome anche con l'apostrofo.
Grazie ancora per la disponibilità. :=):