-
problema apostrofi mysql
In pratica io ho una pagina privata che manda i dati ad una pagina pubblica
il problema è che nella query di insert non mi prende l'apostrofo...
ho provato con tutto mysql_escape_string, str_replace, ecc ma proprio non va
la stranezza è che nella query di modifica me lo lascia mettere sto apostrofo
Riporto qua il codice
Dove sbaglio ?
Codice PHP:
<?php
include('dati.php');
$azione = $_POST['azione'];
$id = $_POST['id'];
$page = $_POST['page'];
$titolo = mysql_escape_string($_POST['titolo']);
$testo = mysql_escape_string($_POST['testo']);
define("UPLOAD_DIR", "./uploads/");
$file=false;
if(isset($_FILES['img']))
{
$file = $_FILES['img'];
if($file['error'] == UPLOAD_ERR_OK and is_uploaded_file($file['tmp_name']))
{
move_uploaded_file($file['tmp_name'], UPLOAD_DIR.$file['name']);
}
}
if ($azione=="modifica") {
$keys=array('titolo','testo');
$values=array("'".$titolo."'","'".$testo."'");
if($file)
{
$keys[]='img';
$values[]="'".$file['name']."'";
}
$q="UPDATE eventi SET ";
$tmp=array();
for ($i=0; $i < count($keys) ; $i++) {
$tmp[]=$keys[$i]."=".$values[$i];
}
$q.=implode(",", $tmp);
$q.=" WHERE id=".$id;
mysql_query($q);
if(!mysql_query($q))
echo "QUERY FALLITA";
}
if ($azione=="elimina") {
mysql_query("delete from eventi where eventi.id = '$id'");
}
if ($azione=="inserisci") {
$keys=array('titolo','testo');
$values=array("'".$titolo."'","'".$testo."'");
if($file)
{
$keys[]='img';
$values[]="'".$file['name']."'";
}
$q="insert into eventi (".implode("'", $keys) .") values (".implode("'", $values).");";
if(!mysql_query($q))
echo "QUERY FALLITA";
}
?>
Grazie
-
Prova urlencode o urldecode, se le passi in post o get altrimenti htmlentities se è una normale stringa o htmlspecialchars....provane un pò quella che prende va bene :lol:
-
ciao credo che il tuo problema sia nel codice mysql, prova cosi
$q="insert into eventi ('".implode("',", $keys) ."') values ('".implode("',", $values)."');";
-
- In questi casi devi sempre debuggare: nel caso specifico una echo $q, poi al più provi la query da phpMyAdmin
- Così a naso (in realtà non ho letto tutto il codice) mi sembra che stai tentando di fare una query mettendo gli apici anche nei nomi delle colonne.
- Invece di "QUERY FALLITA", io stamperei un messaggio un po' più utile, del tipo mysql_error().
- I dati che inserisci non devono contenere apici: devi assolutamente effettuare l'escape tramite ad esempio con la mysql_real_escape_string() (come però vedo stai usando) per evitare sql injection.
- Le funzioni mysql_* sono deprecate. Usa mysqli_* o PDO.
Ciao!
-
Fuori dal lavoro(dove non uso phpmyadmin quindi non ho di questi problemi) ho creato un progetto personale di inserimento dati e gestione utente etc...etc....migrando a phpmyadmin dal PDO ho notato che c'è questo problema, se inserisci un una input text un testo con apostrofi e poi salvi sul phpmyadmin non ti prende gli apostrofi, salvataggio fallito, nel php my admin imposti text e utf8 general -ci, come si risolve, credo che ognuno in base al codice abbia una risoluzione diversa, per il mio caso
Codice PHP:
mysqli_real_escape_string($link, $string_to_escape)
oppure
Codice PHP:
mysqli_escape_string($link, $query)
non serve a niente, con urlencode nel salvataggio e urldecode nella lettura sul WEB funziona però, c'è un però, mettendo l'urlencode alla stringa prima di salvarla nel DB ovviamente fa l'encode degli apostrofi e dei caratteri speciali, quindi sul DB nella descrizione mi salva una cosa di questo genere
Codice:
l%27albero+%22si+no%22+%24+%26kk+
Usando urldecode nella visualizzazione della tabella sul web la stringa si vede normalmente, però sul DB rimane quel pasticcio di codifica dei caratteri, io ho semplicemente risolto con ADDSLASHES prima di salvare la stringa sul DB, spero che sia di aiuto, con Addslashes e campo descrizione text e utf8-general-ci sia sul DB sia in scrittura che in lettura posso inserire sia caratteri speciali che apostrofi accenti etc...etc....esempio scrivo dal WEb questa stringa nel campo descrizione sul DB leggo:
Codice:
l'abero di natale con % (si si) vai lì adesso
codifica in maniera corretta sia gli apostrofi che i caratteri speciali aggiungendo addslashes
-
rispondo ora, grazie a tutti... ho risolto usando il mysql_real_escape_string sia sulle variabili contenute nella pagina amministrativa privata, sia nella pagina di arrivo dei dati...