Umlauteproblem bei einer function

Marco-P

Erfahrenes Mitglied
Guten Tag,

ich verwende um Daten in meine Datenbank zu schreiben ein Function die ich selbst geschrieben habe.
Mein Problem ist wenn ich diese Function aufrufe und Umlaute an sie schicke wird das scheinbar nicht in UTF 8 in die Datenbank abgelegt.

Auslesen kein Problem da zeigt er mir die Umlaute richtig an aber in der DB nicht.
Woran kann das liegen?

HTML = UTF-8
mysql = utf8_general_ci

Gruß Marco

Mein Function

PHP:
// Function setin
//-------------------
// $dbname	=	Name der datenbank
// $setname	=	Name des Settings eintrag
// $insert	=	Der zu speichernde wert

function setin($dbname,$setname,$insert)
{
	if(strlen($insert) == 0)
		{
			//Wenn die Variable keine Zeichen enthält wird daraus NULL für die sql abfarge erzeugt
			$wert = "NULL";		
		}
		else
		{
			//Alles was mehr wie 0 Zeichen hat wird hier verarbeitet und auf injection kontrollliert
			if(get_magic_quotes_gpc()) $string = stripslashes($insert);
			$wert = "'".mysql_real_escape_string($insert)."'";
		}

		$query = "UPDATE ".$dbname." SET setvar = ".$wert." WHERE setname = '".$setname."' ";
		$result = mysql_query( $query );
		if (!$result)
		{ 
			echo "ERROR Anfrage konnte nicht ausgeführt werden : ".mysql_error()."<br>$query";
		}		
}
 
Hast du als ersten Query

PHP:
mysql_query( "SET NAMES 'utf8'" );

ausführen lassen? Der sorgt dafür, das die Verbindung zwischen PHP und MySQL auch Unicode ist.
 
Das hat mit der Funktion selber nichts zu tun. Es liegt daran, das PHP eine Client-Verbindung zum SQL-Server aufbaut. Diese Verbindung ist auch einem Encoding unterlegen. Mit dem Query versetzt du das Verbindungsencoding zu Unicode.
 
Ja das habe ich verstanden. Aber wenn ich das query direkt in ein Script schreibe und ausführe habe ich kein Problem bei den Umlauten. Wirklich nur wenn es über die Function läuft. Also muss es ja etwas mit der Function zu tun haben.
 
Vielleicht mit dem Script, in dem die Funktion notiert ist. Welches Encoding hat die PHP-Datei, in der die Funktion ist? Findest du z.B. mit Notepad++ raus, steht in der unteren Leiste.

EDIT: Und wenn es nicht die Datei selbst ist, dann ist sie vermutlich includet. Du solltest alle deine Scripts darauf prüfen.
 
Hi ich hab es es jetzt erst testen können.
Du hattest mit deiner ersten vermutung recht.
durch das einfügen von
PHP:
mysql_query( "SET NAMES 'utf8'" );
vor meinem query in der function hat sich das Problem gelöst.

Aber so richtig verstehn kann ich es trotzdem nicht.
Alle dokumente sind in utf-8 Codiert.

Manchmal ist es schon recht seltsam.

Vielen Dank für deine Hilfe und für die Diskusionslust mit mir.
Bis zum nächsten mal. Vielleicht kann ich dir ja auch mal bei was helfen.
 
Gern, so richtig zufrieden bin ich mit dem Resultat auch nicht. Ich weiß immer gern, warum etwas nicht funktioniert unter anderen Umständen aber schon. Es gibt sicher eine rationelle Erklärung, habe aber momentan keine.
 
Ich habe noch eine kleine Änderung vorgenommen.

Ich habe ein kleines Script das die Verbindung zur Datenbank herstellt. Dieses wird per include geladen. In dieses Script habe ich die zeichencodierung mit eingetragen so wird wirklich bei jeder Verbindung auch die passende Codierung verwendet.
 
Zurück