- Home
- Categorie
- Coding e Sistemistica
- PHP
- Insert testo con apici
-
Insert testo con apici
Ciao,
ho la necessità di inserire in un campo della tabella mysql una frase o valori che contengono apici e caratteri speciali.
Al momento della insert, lo script restituisce il seguente errore:
[CODICE]
Insert Error: 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 'a'', '22', '> Aggiungere tra i filtri: Sede - Disciplina/Reparto - Risorsa/Ambu' at line 8[/CODICE]Lo script è composto da:
script di inserimento insert.php
[php]<html><head><title>Inserisci record</title></head>
<body>
<?
/* Change db and connect values if using online */
$codice=$_POST['codice'];
$descrizione=$_POST['descrizione'];
$db="db01";
$link = mysql_connect('localhost', 'aaa' , 'bbb');
if (! $link)
die(mysql_error());
mysql_select_db($db , $link) or die("Select Error: ".mysql_error());
$result=mysql_query("INSERT INTO sqlreporting (codice, descrizione) VALUES (
'$codice',
'$descrizione')") or die("Insert Error: ".mysql_error());
mysql_close($link);
print "Record added";
?>
<form method="POST" action="insert_form.php">
<input type="submit" value="Insert Another Record">
</form>
<br><form method="POST" action="index.php">
<input type="submit" value="Dbase Interface">
</form>
</body>
</html>[/php]form html di inserimento form_insert.php
[html]<html><head><title>Inserisci record</title>
<style type="text/css">
td {font-family: tahoma, arial, verdana; font-size: 10pt }
</style>
</head>
<body>
<table width="300" cellpadding="5" cellspacing="0" border="2">
<tr align="center" valign="top">
<td align="left" colspan="1" rowspan="1" bgcolor="64b1ff">
<h3>Insert Record</h3>
<form method="POST" action="insert_record.php">
<?
print "Enter codice: <input type=text name=codice size=20><br>";
print "Enter descrizione: <textarea rows=10 name=descrizione cols=40></textarea><br>";
print "<br>";
print "<input type=submit value=Submit><input type=reset>";
?>
</form>
</td></tr></table>
</body>
</html>[/html]Come posso evitare questo errore?
Grazie
-
Ciao azocomposto,
in questi casi è necessario inserire un backslash per fare l'escape dei caratteri speciali.
Ad esempio, se vuoi inserire nel campo la frase "nell'aria", dovrai scrivere: nell'aria.
Ovviamente se hai più caratteri speciali dovrai inserire più backslash, uno prima di ogni carattere.Ciao.
-
Ciao azocomposto,
lo script attualmente è vulnerabile a SQL injection.
Dovresti almeno filtrare i dati in ingresso con mysql_real_escape prima di passarli nella query. Cosi facendo risolvi anche il problema relativo all'apostrofo che ti ha indicato sandroid.
-
Ciao Thedarkita, giusto, in effetti ho dimenticato di specificarlo perché ho già attivata la funzione magic_quotes_gpc. O è comunque preferibile mysql_real_escape?
-
I magic_quotes verranno rimossi con php 6, per cui sarebbe preferibile fare un controllo e fare mysql_real_escape se necessario.
Anche perchè se si cambia server in futuro e le impostazioni sono diverse, hai parecchio lavoro da fare per sistemare i problemi di sicurezza.
-
Ok grazie del consiglio.
-
Io opterei per richiamare il post con una funzione come htmlentities o al massimo addslashes e quindi usare le funzioni inverse alla stampa degli elementi.
-
Fare le operazioni inverse è abbastanza inutile, htmlentities fà molto più di quello che è necessario e considerando che dovrebbe fare l'operazione inversa alla stampa consumerebbe più risorse.
addslashes è molto simile a mysql_real_escape_string non filtra tutta via i caratteri \x00, \n, \r, e \x1a considerando che mysql_real_escape_string è una funzione della libreria mysql sarebbe meglio utilizzare questa in quanto è stata realizzata appositamente per questo scopo.
-
Molto bene!