problema con l'inserimento di un record nel database (caratteri non consentiti)

  • Creatore Discussione Creatore Discussione asevenx
  • Data di inizio Data di inizio

asevenx

Utente Attivo
7 Nov 2009
312
0
16
ho creato un database e un form per l'iserimento dei record, tutto funziona alla perfezione, però quando voglio inserire un messaggio che comprende l'apostrofo mi appare questo errore:
string(38) "INSERT INTO commentibb VALUES ('',''')" 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 '''')' at line 1

inoltre quando voglio inserire un messaggio con questi caratteri é è ç ò ° à § ù £ ì al loro posto appare questo carattere �
come posso risolvere?

grazie
 
Per quanto riguarda l'apostrofo basta applicare la funzione addslashes al messaggio. Esempio:
PHP:
$messaggio = "Questo è un messaggio con l'apostrofo.";
$messaggio = addslashes($messaggio);

// ora inserisci i dati nella tabella
Per risolvere il problema degli accenti, invece, usa questa mia funzione:
PHP:
function my_htmlspecialchars($var)
{
	$search = array('è', 'é', 'ì', 'ù', 'ò', 'à');
	$replace = array('è', 'é', 'ì', 'ò', 'à');
	$var = str_replace($var, $search, $replace);
	
	return $var;
}
 
scusate se riapro questa discussione, volevo sapere se è possibile visualizzare l'apostrofo normalemente e non con lo slash al suo posto.

esempio se scrivo l'altro giorno mi visualizza l\'altro giorno

grazie
 
ciao
si quando leggi il valore del campo usi la funzione inversa di adslashes cioè stripslashes.
es:

PHP:
echo stripslashes($mio_campo);
 
sicuro di aver utilizzato addslashes() per l'inserimento dei valori in tutti i campi?
 
ciao
@vapiresco
non potrebbe essere che in phpini abbia attivato le quote magiche (o diaboliche)?
per cui usando add su es pin'pall diventa pin\\'pall?
logicamente usando stiptease() togli solo una slash
 
Se ha utilizzato correttamente addslashes() è probabile che Borgo abbia ragione, darei una controllata alla direttiva Magic Quotes che tra l'altro è anche deprecata a partire da PHP 5.3.0
 
ciao, ho provato a togliere stripslashes ma visualizza sempre UNA slash per ogni apostrofo.

posto il codice collegato al form
PHP:
//dati database
$host = "xxx";
$username = "xxx";
$password = "xxx";
$database = "xxx";
$tabella = "xxxcommenti";

//dati form
$commento = isset($_POST['commento']) ? trim($_POST['commento']) : '';
$titolare = isset($_POST['titolare']) ? trim($_POST['titolare']) : '';

$commento = addslashes($commento);
$titolare = addslashes($titolare); 

//connessione e invio al DB
$connessione = mysql_connect($host, $username, $password) or die("Connessione DB fallita"); 
mysql_select_db($database, $connessione) or die("Selezione DB fallita");

//inserisci i dati del form
$comment = "INSERT INTO $tabella(idx,titolare,commento) VALUES('','$titolare','$commento')";  
mysql_query($comment) or die(mysql_error('Errore...')); 
$commentoins = "
    <table class=\"table\" cellspacing=\"0\" cellpadding=\"0\">
		<tr>
			<td align=\"center\">
				<font class=\"username\"><b>Grazie per aver commentato!</b><br>
				Il suo commento è stato aggiunto correttamente<br><br>
				<i>Verrai reindirizzato automaticamente alla pagina dei commenti</i>
				</font>
			</td>
	</table>
	"; 
echo stripslashes ($commentoins);
 
ciao
il codice è scritto giusto, però alla riga
echo stripslashes ($commentoins);
visto il contenuto di $commentoins lo stripslashes non ti serve (anche se puoi lasciarlo)
se metti semplicemente echo $commentoins;
vedrai che il risultato è lo stesso.
lo stipislashe ti serve quando andrai a recuperare i campi titolare e commento, lì dovrai mettere
es.
echo sripslashes($riga['titolare']);
e
echo sripslashes($riga['commento']);

avendoli inseriti con addslashes
 

Discussioni simili