Haumis wbb hilfe (http://haumis-wbb-hilfe.de/wbb2/index.php)
- ...:::Trainingscenter-wbb2:::... (http://haumis-wbb-hilfe.de/wbb2/board.php?boardid=75)
-- mysql (http://haumis-wbb-hilfe.de/wbb2/board.php?boardid=82)
--- Das heitere Umlauteproblem... (http://haumis-wbb-hilfe.de/wbb2/thread.php?threadid=3165)


Geschrieben von Hangasilly am 08.02.2021 um 14:18:

  Das heitere Umlauteproblem...

Ich verzweifel grad mal wieder....

Folgendes Szenario:

Serversprache: UTF-8
Tabellenkollation: UFT-8
Spaltenkollation: UFT-8
PHP-Datei-Charset: UTF8

Eintrag in DB: Lustige Zeichen bei Umlaufen *seufz*

Frage: Was hab ich übersehen...

Selbst ne Umgehung klappt nicht so, wie ichs mir vorstelle:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
//Überschrift und Text
$subject = "Herzlichen Glückwunsch zum Gebutrstag";
$body = "Wir wollten dir zum Geburtstag ein kleines Präsent überreichen und hoffen,$Bdass es dir bei uns gefällt!!$B$BWir wünschen dir alles Gute und freuen uns auf weitere geminsame Spielstunden mit Dir!";

//Mail INSERT      //10 Gold -- Geschenk
$mail_insert="INSERT INTO corelith_characters.mail SET 
id = '$id_plus1', 
messageType = '0', 
stationery = '61', 
mailTemplateId = '0', 
sender = '69',
receiver = '$reciver', 
subject = '$subject', 
body = '$body', 
has_items = '1', 
expire_time = '$timestamp_delete', 
deliver_time = '$timestamp_deliver', 
money = '100000',  
cod = '0', 
checked = '$checked' ";
$send_in = mysqli_query($db_chars, $mail_insert);
		  
$do_utf8="UPDATE `corelith_characters.mail` SET 
              `subject` = REPLACE(`subject`,"ß", "ß"), 
              `subject` = REPLACE(`subject`, "ä", "ä"), 
              `subject` = REPLACE(`subject`, "ü", "ü"), 
              `subject` = REPLACE(`subject`, "ö", "ö"), 
              `subject` = REPLACE(`subject`, "Ä", "Ä"), 
              `subject` = REPLACE(`subject`, "Ãœ", "Ü"), 
              `subject` = REPLACE(`subject`, "Ö", "Ö"), 
              `subject` = REPLACE(`subject`, "€", "€"),
              
              `body` = REPLACE(`body`,"ß", "ß"), 
              `body` = REPLACE(`body`, "ä", "ä"), 
              `body` = REPLACE(`body`, "ü", "ü"), 
              `body` = REPLACE(`body`, "ö", "ö"), 
              `body` = REPLACE(`body`, "Ä", "Ä"), 
              `body` = REPLACE(`body`, "Ãœ", "Ü"), 
              `body` = REPLACE(`body`, "Ö", "Ö"), 
              `body` = REPLACE(`body`, "€", "€")
			  
WHERE id LIKE '$id_plus1'";
			  
$utf8_in = mysqli_query($db_chars, $do_utf8);




In die DB hauts mir ständig lustigen Zeichen anstatt die Umlaute....
Übrigens funktionieren htmlspecialchars und htmlentities bei den Srings leider auch nicht und auch mysqli_set_charset($db_chars, "utf8"); direkt nach der DB klappt nicht *seufz*



Geschrieben von haumi am 09.02.2021 um 05:00:

 

Ich schau mir das heute früh ma an.
Bei schriegigen Fällen nehme ich die pdo-Verbindung zur Datenbank.
Da werden die Umlaute automatisch korrekt übertragen.
Vielleicht schaust du dir das mal an.

LG



Geschrieben von haumi am 09.02.2021 um 14:31:

 

Versuche das folgende mal bei dir anzupassen:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
//Neuer Eintrag übernehmen
if ($_POST["neue"]=="neue") {
$betreff = $_POST["betreff"];
$notiz = $_POST["notiz"];

$statement = $pdo->prepare("INSERT INTO notizen (betreff,notiz) VALUES (?,?)");
$statement->execute(array($betreff,$notiz));
$num =$statement->rowCount();
    echo "Es wurde " .$num ." Datensatz hinzugefügt";
    echo '<meta http-equiv="refresh" content="2; url= notizen.php">';
}


Bei mir gibt es seit dem keine Probleme mehr mit den Umlauten.
Die replace-Anweisungen kannst du denn (hoffntlich) weglassen.

Ich habe in der class_db_mysql über ? noch folgendes eingefügt:
code:
1:
$pdo = new PDO('mysql:host=localhost;dbname='.$sqldb,$sqluser,$sqlpassword); 



LG
haumi



Geschrieben von Hangasilly am 09.02.2021 um 20:48:

 

ähmmm danke, aber janein, das ganze is en bisschen komplexer...:

pdo geht schonmal bei dem gameserver nicht, weil die core dann ärger macht.. kp warum...
also normaler connect, und dann der insert is auch bissel größer:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
//Datenbank_CHARS
$db_chars = mysqli_connect("localhost", "blubber", "blahhhhh", "corelith_characters");

//id aus characters.mail
$id_out = "SELECT * FROM corelith_characters.mail";
$result_id = mysqli_query($db_chars, $id_out);
while ($ds = mysqli_fetch_object($result_id)) {
    $res_id = $ds->id;
}

$id_plus1 = $res_id + 1;

//Überschrift und Text
//String-Encoding UTF8
$subject = "Herzlichen Glückwunsch zum Geburtstag";
$body = "Wir wollten dir ein kleines Zufalls-Geburtstagspräsent zukommen lassen, nebst ein bisschen Geld, und hoffen, dass es dir bei uns gefällt!!\r\n\nAlles Gute zum Geburtstag!!\r\n\nWir freuen uns auf eine noch lange, geminsame Spielzeit mit Dir!\r\n\n\nDein Corelith-Team";

//Mail INSERT   
$mail_insert="INSERT INTO corelith_characters.mail SET 
id = '$id_plus1', 
messageType = '0', 
stationery = '61', 
mailTemplateId = '0', 
sender = '69',
receiver = '$reciver', 
subject = '$subject', 
body = '$body', 
has_items = '1', 
expire_time = '$timestamp_delete', 
deliver_time = '$timestamp_deliver', 
money = '100000',  
cod = '0', 
checked = '$checked' ";
$send_in = mysqli_query($db_chars, $mail_insert);




hab das derzeit umgeschrieben, damits ohne ü's und Co eght... aber würd mcih trotzdem interessieren, wie ich Umlaute in die DBs bekomme...



Geschrieben von haumi am 10.02.2021 um 07:48:

 

Versuche das bitte mal.
Statt:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
$mail_insert="INSERT INTO corelith_characters.mail SET 
id = '$id_plus1', 
messageType = '0', 
stationery = '61', 
mailTemplateId = '0', 
sender = '69',
receiver = '$reciver', 
subject = '$subject', 
body = '$body', 
has_items = '1', 
expire_time = '$timestamp_delete', 
deliver_time = '$timestamp_deliver', 
money = '100000',  
cod = '0', 
checked = '$checked' ";
$send_in = mysqli_query($db_chars, $mail_insert);




nimm mal:

code:
1:
2:
$statement = $pdo->prepare("INSERT INTO corelith_characters.mail (id,messageType,stationery,mailTemplateId,sender,receiver.subject,body,has_items,expire_time,deliver_time, money,cod.checked) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
$statement->execute(array($id_plus1,0,61,0,69,$reciver,$subject,$body,1,$timestamp_delete,$timestamp_deliver,100000,0,$checked));



und in der class_db_mysql.php ersaetze:
code:
1:
 	  $pdo = new PDO('mysql:host=localhost;dbname='.$sqldb,$sqluser,$sqlpassword); 


durch:
code:
1:
2:
3:
4:
5:
6:
7:
$pdo = new PDO(
'mysql:host=localhost;dbname='.$sqldb,
$sqluser,
$sqlpassword,
[PDO::MYSQL_ATTR_INIT_COMMAND=>"set names utf8"]
);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);



Bei mir haben ich damit keine Ümlautprobleme mehr.

LG
haumi


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH