Inserimento caratteri speciali nel DB

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Ciao a tutti, ho un problema con la parola "attività"....
Nella mia pagina php ho:
PHP:
header('Content-Type: text/html; charset=utf-8');
$tipo="attività";
$query = "INSERT INTO oggetto (zona,descrizione,tipo,id_registrato,registrato) VALUES ( "
		.sql_string(trim($zona)).","
		.sql_string(trim($descrizione)).","
		.sql_string(trim($tipo)).","
		.sql_string(trim($cid)).","
		.sql_string(trim($registrato))." )";
$row_set = mysql_query($query, $conn) or die("Errore nella query di inserimento: " . mysql_error());

Nel mio DB ho impostato MySQL charset: UTF-8 Unicode (utf8)
All'interno ho la tab "oggetti" i quali campi sono tutti settati latin1_swedish_ci, ma questo non mi ha mai dato problemi con il DB che avevo una volta... ho anche cambiato server, ma sinceramente le ho provate tutte e non riesco a capire quale sia il problema...
ho provato a settare il campo "tipo" invece che latin1_swedish_ci a UTF-8 ma non è cambiato nulla:
la "à" la salva come "Ã". :incazz:

Qualcuno sa dirmi dove sbaglio?
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Ho fatto delle prove sia col charset UTF-8 Unicode che col latin1_swedish_ci e sul DB me lo salva correttamente con la a accentata.
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Se salvo il campo utilizzando una classe che ho creato per avere delle select già fatte, solo da richiamare, funziona perfettamente...
ESEMPIO
Ho la classe tipo.class.php:
PHP:
<?php
class tipo {
	var $result = array();
	var $id = null;
	var $tipo = null;
	function tipo() {
	$array = array('bene','licenza','attività');
		foreach ($array as $element) {
			$obj = new stdClass();
			$obj->id = 	$element;
			$obj->tipo = $element;
			$this->result[] = $obj;
		}
	}
	function load($id) {
		$this->id = $id;
		$this->tipo = $id;	
	}
	function getAll() {
		return $this->result;
	}
	function selectList() {
		return FrancescaHTML :: selectList($this->getAll(), 'tipo', ' id="tipo" class="ptesto" style="width:80%" onChange="submitform()"', 'id', 'tipo', $this->id, "Qualsiasi");
	}
}
?>
Poi nel form della pag inserisci_nuovo.php ho il richiamo alla tendina "tipo":
PHP:
<?php
echo '<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />'
$tipoObj = new tipo();
$tipoObj->load($_REQUEST['tipo']);
echo $tipoObj->selectList();
?>
Nel file di esecuzione faccio semplicemente:
PHP:
$query = "INSERT INTO oggetto (zona,descrizione,tipo,id_registrato,registrato) VALUES ( " 
.sql_string(trim($_POST['zona'])) .", "
.sql_string(trim($_POST['tipo'])) .", "
.sql_numeric(trim($_POST['id_registrato'])) .", "
.sql_string(trim($registrato)) . ")";
$row_set = mysql_query($query, $conn) or die("Errore nella query di inserimento: " . mysql_error());

Così il campo attività mi viene inserito perfettamente nel DB....
forse perchè gli passo il campo tipo in $_POST???

prova anche con

charset=iso-8859-1

Già provato.... nessun miglioramento...:dipser:
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
L'ho sempre utilizzata per salvare le stringhe nel mio DB come sql_numeric...
Se ho come campo della mia tabella un INT allora utilizzerò sql_numeric, così se provo ad inserire $valore='ciao' mi da come risultato errore e non mi fa la query di insert....
Io lo utilizzo come controllo aggiuntivo...
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Dimenticavo:
PHP:
// Funzione per la formattazione delle stringhe dal WEB a MySQL.
function sql_string($value)
// Restituisce la stringa formattata per la lettura da parte di SQL.
// Parametri:
// - $value     :stringa da formattare.
  {
  $result = false;
  
  // Sostituzione dell'eventuale apice con la sequenza "\'" 
  // e concatenazione apici agli estremi.
  $result = "'" .$value. "'"; 
  
  // Assegnazione del risultato della funzione.
  return $result;
  }
  

// Funzione per la formattazione dei numeri dal WEB a MySQL.
function sql_numeric($value)
// Restituisce il numero formattato per la lettura da parte di SQL.
// Parametri:
// - $value     :numero da formattare.
  {
  $result = false;
  
  // Assegnazione valore zero in caso di variabile non settata.
  if (isset($value) == false) {$value = 0;};

  // Assegnazione valore zero in caso di variabile uguale a stringa vuota.
  if ($value == '') {$value = 0;};
  
  // Sostituzione dell'eventuale virgola con il punto.
  $result = str_replace(",", ".", $value); 
  
  // Assegnazione del risultato della funzione.
  return $result;
  }
  

// Funzione per la formattazione delle date dal WEB a MySQL.
function sql_date($value, $extract = 'none')
// Restituisce la data formattata per la lettura da parte di SQL.
// Parametri:
// - $value     :data da formattare;
// - $extract   :specifica l'eventuale porzione da estrarre.
  {
  $result = false;
  
  // Estrazione dell'anno.
  $year = substr($value, - 4);
  
  // Estrazione del mese.
  $month = substr($value, 3, 2);
  
  // Estrazione del giorno.
  $day = substr($value, 0, 2);
  
  // Restituzione porzioni data se richiesto dal parametro $extract.
  switch ($extract)
    {case 'year':
       return $year;
     case 'month':
       return $month; 
     case 'day':
       return $day; 
    };
      
  // Composizione data nel formato yyyymmdd.
  $result = $year.$month.$day; 
    
  // Deallocazione variabili.
  unset($year);
  unset($month);
  unset($day);
  
  // Assegnazione del risultato della funzione.
  return $result;
  }
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao, la mia eventuale ca....a quotidiana.
hai provato, oltre il trim a dargli htmlspecialcars()
dovrebbe trasformarti à in &agrave; e quando lo leggi a video dovrebbe risultare di nuovo à (io come detto uso charset=iso-8859-1 e non ho provato con gli altri)
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Ho messo l'header a charset=iso-8859-1 e ho aggiunto
PHP:
.sql_string(trim(htmlspecialchars($tipo))).","

Niente da fare nel mio DB trovo nel campo tipo "attività "....
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Nella pagina visualizza.php ho
HTML:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
PHP:
$query= "select * from oggetti";
$result = mysql_query($query) or die(mysql_error());
while ($oggetto = mysql_fetch_object($result)) { 
echo $oggetto->tipo.'<br>'; }

Visualizzo:
attivitÃ
attivitÃ
attivitÃ
attivitÃ
attivitÃ
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Comunque è stranissimo, io ho fatto varie prove sia con i charset che con le modalità di inserimento e nel DB trovo sempre "attività". Facciamo un passetto indietro, sistema operativo installato e versione di MySql.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
io intendevo che tu andassi dentro la tabella con myadmin per per vedere cosa viene inserito esattamente.
fai una piccola prova
prova ad inserire attivit&agrave;
verifica anche il codice asci del carattere
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ho fatto questa stupidissima prova

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento senza titolo</title>
</head>

<body>
<?php
$carattere1="attività";
$carattere2="attivit&agrave;";
echo "1) senza htmlsp: ".$carattere1."<br>";
echo "1) con htmlsp: ".htmlspecialchars($carattere1)."<br>";
echo "2) senza htmlsp: ".$carattere2."<br>";
echo "2) con htmlsp: ".htmlspecialchars($carattere2)."<br>";
?>
<p>iso-8859-1
UTF-8 Unicode </p>
<p>&agrave;
</p>
</body>
</html>

con questo risultata a monitor

1) senza htmlsp: attività
1) con htmlsp: attività
2) senza htmlsp: attività
2) con htmlsp: attivit&agrave;

iso-8859-1 UTF-8 Unicode

à

mentre mettendo UTF

1) senza htmlsp: attivit�
1) con htmlsp: attivit�
2) senza htmlsp: attività
2) con htmlsp: attivit&agrave;
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
Facciamo un passetto indietro, sistema operativo installato e versione di MySql.
sono d'accordo con satifal.
però quello che non ho ancora capito:

nel campo del db si trova à oppure Ã?
perche se nel campo trovo à al posto di à è un errore di immissione o viene trsaformato qualcosa e satifal ha molte ragioni

se nel campo invece trovo à e con echo visualizzo Ã, non dipende, secondo me, da php o mysql ma in qualche punto c'è un
<meta http-equiv="Content-Type" content="text/html; charset=??????"> che non viene intrepretato o interpretato male.
per quello dicevo di estrarre dal db e verificare
$carattere valore estratto da db
echo "asci : ".ord($carattere[7]);

se risulta asci : 224 nel campo ho à ed è un errore di visualizzazione
se invece asci : 195 è evidente che l'errore è nell'immissione
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
In effetti il dubbio di borgo è lecito. Mi era sembrato di capire che nel DB (quindi tramite phpMyAdmin, MySQL Query Browser oppure altro client) tu vedessi effettivamente "attivitÃ", ma rileggendo i post precedenti mi sorge qualche dubbio. Puoi confermare che nel DB (ma senza recuperare i dati tramite PHP) il valore inserito è effettivamente sbagliato?
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Facciamo un passetto indietro, sistema operativo installato e versione di MySql.

Windows XP
MySQL client version: 5.0.51

io intendevo che tu andassi dentro la tabella con myadmin per per vedere cosa viene inserito esattamente.

attivitÃ
è il primo posto che vado a controllare dopo una prova di inserimento...:p

prova ad inserire attivit&agrave;

Viene inserito questo:
attivit&agrave;

Forse sto dimenticando qualcosa.....

Il fatto che, utilizzando la classe "tipo", passavo il valore con $_post prima di salvarlo cambia qualcosa???

Mi sembra una cosa impossibile:dipser:
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
perche se nel campo trovo à al posto di à è un errore di immissione o viene trsaformato qualcosa

Se fosse un errore di immissione dei dati allora non mi spiego perchè inserendo il valore scritto all'interno della classe tipo (scritto semplicemente attività) lo salva correttamente....:hammer:
 
Discussioni simili
Autore Titolo Forum Risposte Data
giancadeejay [PHP] Controllo inserimento tot caratteri PHP 5
D Tempi di inserimento caratteri stringa in campo input PHP 6
asevenx problema con l'inserimento di un record nel database (caratteri non consentiti) PHP 11
A inibire inserimento caratteri Javascript 2
N Inserimento Testo Senza Caratteri Tag PHP 8
K Inserimento query Errore 1366 PHP 4
K form Inserimento record mysql PHP 2
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
C inserimento gestionale sotto Word Press WordPress 0
D Inserimento video mp4 HTML e CSS 0
L inserimento form dati multipli ? PHP 0
G Appicazione HTML per inserimento dai in Database Access Microsoft HTML e CSS 0
J Form inserimento dati in database Ajax 1
D modificare questo codice per inserimento in text e non in tabella jQuery 1
R [C#] Automatizzare un inserimento di un Post su un Gruppo Facebook .NET Framework 0
M Aiuto con inserimento immagini WordPress 6
elpirata Impedire inserimento data di oggi e date passate jQuery 39
A Inserimento dati nel database tramite form + altre operazioni PHP 18
W Email conferma inserimento Classic ASP 0
S Inserimento multiplo non richiesto PHP 2
P inserimento icone social tramite html HTML e CSS 1
L form multipla php sql,errore in inserimento MySQL 0
Alex_70 Inserimento dati a cascata PHP 204
T Da xsd a xml ed inserimento dati in excel XML 0
M Problema inserimento parole con apostrofo nel db PHP 5
C [RISOLTO]Inserimento variabile php in input html PHP 20
P Access Inserimento data. MS Access 4
L Inserimento dettagli in una maglia Photoshop 2
S [PHP] email con inserimento dati nel database PHP 23
beatle [Photoshop] problema inserimento immagini Photoshop 1
G [Javascript] Errore inserimento dati Backend Node.js e workbench Javascript 1
B [PHP] Creare PDF dopo inserimento dati form PHP 4
C [PHP] Form con Inserimento dati dalla maschera e un menù a discesa che prende i dati dal db PHP 1
C [PHP] Form inserimento più menù a discesa PHP 9
M [PHP] Problemi su inserimento array nel db PHP 7
gandalf1959 [PHP] Inserimento di più righe non funziona come mi aspetto... PHP 2
E Inserimento dati da PHP in tabella MySQL PHP 5
E Form inserimento dati con JavaScript Javascript 0
D [MS Access] problemi con inserimento campo in una maschera MS Access 6
G inserimento csv in tabella mysql; problema con struttura PHP 11
M [Joomla] Inserimento wow.js in template Joomla 4
K [PHP] Inserimento dati database con postgres PHP 2
K [PHP + MYSQL ] Inserimento dati in database da form dinamico PHP 13
A [PHP] Inserimento url dinamici in pagina html PHP 3
spider81man [PHP] Alert Box per confermare Inserimento o Cancellazione dato. PHP 4
gandalf1959 [MySQL] Inserimento multiplo da form multirighe MySQL 22
A [RISOLTO]Inserimento Immagini da pc a MySql PHP 15
M Inserimento dati checkbox multipli in db da ajax a php PHP 1
S [PHP] inserimento su DB da tabella PHP 29
P [PHP] Problema inserimento nuove chiavi in array PHP 2

Discussioni simili