[PHP/MySQL] Speicherung von Umlauten

27o8

abgemeldet
2 Mai 2006
9.028
933
Hey,
ich steht grad irgendwie auf dem Schlauch :-? in meiner Datenbank von meinem Shop speichere ich die ganzen Kundendaten aus irgendeinem Grund werden die Umlaute aber nicht als Umlaute gespeichert sondern als html-Encode z.B. statt Daniel Roß schreibt er in die Tabelle Daniel Roß.

Zwischen meinem Shopscript und meinem Rechnungsscript (g*Sales) hab ich nun eine Verbindung hergestellt sodass bei jeder Bestellung eine Rechnung erzeugt wird und als pdf dem Kunden zur Verfügung gestellt wird. In der pdf steht nun allerdings dann nicht Roß sondern dort steht dann auch Roß Ebenso bei Straße etc.

Meine Frage ist nun wie ich das verhindere das er so speichert... beim eintragen in die DB verwende ich: mysql_real_escape_string(); und htmlentities();

Gruß
Gremlin
 
Lass das htmlentities weg oder begrenze es auf die Zeichen die du wirklich nicht haben willst. Ansonsten hilft dir htmlentity_decode() weiter.
 
Hatte htmlentities schonmal testweise rausgenommen und mich angemeldet aber wird trotzdem so gespeichert :-? kann es mit der Kollation zusammenhängen (latin1_swedish_ci)?
 
Hatte htmlentities schonmal testweise rausgenommen und mich angemeldet aber wird trotzdem so gespeichert :-? kann es mit der Kollation zusammenhängen (latin1_swedish_ci)?

Das hat nix mit dem Zeichensatz zu tun. Probleme mit dem Zeichensatz erkennt man daran das Buchstaben falsch angezeigt werden. Hier werden aber die Sonderzeichen in HTML-Entities umgewandelt, und das wird hier wohl in PHP passieren. (Browser,Webserver und Datenbank schließ ich aus) Wo genau ist die andere Frage, durchsuch mal alle beteiligten PHP Datein nach html... vielleicht findest du so den übertäter.
 
Also ich sehe hier jetzt eigentlich nix in meinem Code was das machen würde es sei denn mysql_real_escape_string() würde dies machen aber das wäre mir was ganz neues :biggrin:
PHP:
<?
  if ($_POST['check'] == 'Registrieren'){
  $err = Array();
  
     if (!$_POST['ansprechpartner']){ 
      $err[1] = 'border-color: red; border-style:solid;';
      $errr = TRUE;
     }
     
     if (!$_POST['anschrift']){
      $err[2] = 'border-color: red; border-style:solid;';
      $errr = TRUE;      
     }
     
     if (!$_POST['plz']){
      $err[3] = 'border-color: red; border-style:solid;';
      $errr = TRUE;
     }
     
     if (!$_POST['ort']){
      $err[4] = 'border-color: red; border-style:solid;';
      $errr = TRUE;
     }

     if (!$_POST['email']){
      $err[5] = 'border-color: red; border-style:solid;';
      $errr = TRUE;
     }
     
     if (!$_POST['loginname']){
      $err[8] = 'border-color: red; border-style:solid;';
      $errr = TRUE;
     }
     
     if (!$_POST['passwort']){
      $err[9] = 'border-color: red; border-style:solid;';
      $errr = TRUE;
     }
     
     if (!$_POST['passwort2']){
      $err[10] = 'border-color: red; border-style:solid;';
      $errr = TRUE;
     }
     
       # Bislang kein Fehler also die aufwändigeren Tests beginnen
       if ($err != TRUE){
       
         # PLZ nur Zahlen!
         if (!is_numeric($_POST['plz'])){
          $err[3] = 'border-color: red; border-style:solid;';
          $message .= 'PLZ nur Zahlen!<br>';
         }

         # Nick länge
         $length = strlen($_POST['loginname']);
         if ($length < 3 || $length > 32){
          $err[8] = 'border-color: red; border-style:solid;';
          $message .= 'Nickname min. 3 Zeichen und max. 32 Zeichen!<br>';
         }         
         
         # Emailsyntax 
         if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.[a-z]{2,4}$", $_POST['email'])){
          $err[5] = 'border-color: red; border-style:solid;';
          $message .= 'Emailsyntax falsch!<br>';         
         }
         
         # PWs gleich?
         if ($_POST['passwort'] != $_POST['passwort2'] || strlen($_POST['passwort']) < 3){
           $err[9] = 'border-color: red; border-style:solid;';
           $err[10] = 'border-color: red; border-style:solid;';
           $message .= 'Die Passwörter stimmen nicht überein oder sind kürzer als 3 Zeichen!<br>';           
         }
         
         # Immer noch nix falsch? Dann DB Checks
         if (!$message){
         $schon_da = mysql_query("SELECT * FROM shop_user WHERE email='".mysql_real_escape_string($_POST['email'])."' || nickname='".mysql_real_escape_string($_POST['nickname'])."' LIMIT 1");
           if (mysql_num_rows($schon_da)){
             $u = mysql_fetch_assoc($schon_da);
             if ($u['email'] == $_POST['email']){
              $message = 'Email bereits vorhanden!<br>';
             }else{
              $message = 'Nickname bereits vergeben!<br>';
             }
           }else{                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

           $db = mysql_query("INSERT INTO shop_user (firma,ansprechpartner,anschrift,plz,ort,email,telefon,fax,nickname,passwort,kdid,ip,werber) VALUES
                                 ('".mysql_real_escape_string($_POST['firma'])."','".mysql_real_escape_string($_POST['ansprechpartner'])."','".mysql_real_escape_string($_POST['anschrift'])."','".(INT)$_POST['plz']."','".mysql_real_escape_string($_POST['ort'])."','".mysql_real_escape_string($_POST['email'])."','".mysql_real_escape_string($_POST['tel'])."','".mysql_real_escape_string($_POST['fax'])."','".mysql_real_escape_string($_POST['loginname'])."','".md5($_POST['passwort'])."','','".$_SERVER['REMOTE_ADDR']."','".$_SESSION['affiliate']."')                                 
             ");
             
             # g*Sales Anbindung
             mysql_select_db('usr_web1_10');
             $schon_da = mysql_query("SELECT knr FROM kunde WHERE (name='".mysql_real_escape_string($_POST['ansprechpartner'])."' && anschrift='".mysql_real_escape_string($_POST['anschrift'])."' && plz='".(INT)$_POST['plz']."' && ort='".mysql_real_escape_string($_POST['ort'])."') || (email = '".mysql_real_escape_string($_POST['email'])."') LIMIT 1");
             if(mysql_num_rows($schon_da)){
              $user = mysql_fetch_assoc($schon_da);

              $knr = $user['knr'];
             }else{
              mysql_query("INSERT INTO kunde (firma,name,anschrift,plz,ort,email,status,telefon,fax) VALUES ('".mysql_real_escape_string($_POST['firma'])."','".mysql_real_escape_string($_POST['ansprechpartner'])."','".mysql_real_escape_string($_POST['anschrift'])."',".(INT)$_POST['plz'].",'".mysql_real_escape_string($_POST['ort'])."','".mysql_real_escape_string($_POST['email'])."',1,'".mysql_real_escape_string($_POST['tel'])."','".mysql_real_escape_string($_POST['fax'])."')") or die(mysql_error());
              $knr = mysql_insert_id();
              mysql_query("UPDATE kunde SET knr=".$knr." WHERE id=".$knr." LIMIT 1") or die(mysql_error());              
             }
              mysql_select_db('usr_web1_9');
              mysql_query("UPDATE shop_user SET kdid=".$knr." WHERE nickname='".mysql_real_escape_string($_POST['loginname'])."' LIMIT 1") or die(mysql_error());                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
             # g*Sales Anbindung Ende
             
             if ($db){
              $reg = TRUE;
             }else{
              $reg = FALSE;
              $message = 'Unbekannter Fehler! Bitte später erneut probieren!';
             }
           }
         }
       }                          
  }
  
?>
<?if ($reg != TRUE){?>
Nach einer Registrierung kannst du dich in unserem Kundenbereich einloggen und Scripte kaufen, sowie Rechnungen einsehen. <br>
<br>
Bitte fülle das folgende Formular aus um dich zu registrieren.
<br>
<br>
<?}?>
<?if($errr == TRUE){?>
Bitte die <font color="red">rot</font> markierten Felder ausfüllen!
<?}?>
<?if($message) echo $message;?>
<?if($reg == TRUE){?>
Registrierung erfolgreich, Sie können sich nun einloggen!
<?}else{?>
<br>
<form action="" method="POST">
<table border="0" width="100%">
<tr>
    <td>Firma*:</td>
    <td><input type="text" name="firma" value="<?=$_POST['firma'];?>" style="width:180px;"></td>
</tr>
<tr>
    <td>Ansprechpartner:</td>
    <td><input type="text" name="ansprechpartner" value="<?=$_POST['ansprechpartner'];?>" style="width:180px; <?=$err[1];?>"></td>
</tr>
<tr>
    <td>Straße Hausnummer:</td>
    <td><input type="text" name="anschrift" value="<?=$_POST['anschrift'];?>" style="width:180px; <?=$err[2];?>"></td>
</tr>
<tr>
    <td>PLZ / Ort :</td>
    <td><input type="text" name="plz" value="<?=$_POST['plz'];?>" style="width:60px; <?=$err[3];?>"> <input type="text" name="ort" value="<?=$_POST['ort'];?>" style="width:115px;  <?=$err[4];?>"></td>
</tr>
<tr>
    <td>Email:</td>
    <td><input type="text" name="email" value="<?=$_POST['email'];?>" style="width:180px; <?=$err[5];?>"></td>
</tr>
<tr>
    <td>Telefon*:</td>                    
    <td><input type="text" name="tel" value="<?=$_POST['tel'];?>" style="width:180px; border-style:dotted;"></td>
</tr>
<tr>
    <td>Fax*:</td>
    <td><input type="text" name="fax" value="<?=$_POST['fax'];?>" style="width:180px; border-style:dotted;"></td>
</tr>
<tr>
    <td colspan="2" style="height:15px;"> </td>
</tr>
<tr>
    <td>Loginname:</td>
    <td><input type="text" name="loginname" value="<?=$_POST['loginname'];?>" style="width:180px; <?=$err[8];?>"></td>
</tr>
<tr>
    <td>Passwort:</td>
    <td><input type="password" name="passwort" style="width:180px; <?=$err[9];?>"></td>
</tr>
<tr>
    <td>Wiederholen:</td>
    <td><input type="password" name="passwort2" style="width:180px; <?=$err[10];?>"></td>
</tr>
<tr>
    <td><font color="#999999">IP:</font></td>
    <td><font color="#999999"><?=$_SERVER['REMOTE_ADDR'];?></font></td>
</tr>
<tr>
    <td><font color="#999999">Provider:</font></td>
    <td><font color="#999999"><?=gethostbyaddr($_SERVER['REMOTE_ADDR']);?></font></td>
</tr>
<tr>
    <td colspan="2" align="center"><input type="submit" name="check" value="Registrieren"></td>
</tr>
</table>
</form>

<br>
<font size="2">
* freiwillige Angaben<br>
Mit dem Anmelden akzeptieren Sie unsere AGB
</font>
<?}?>
 
Ich auch nicht... vielleicht ists jetzt auch was ganz dummes, wie zb Hochladen vergessen? :roll:

Ne das auf keinen Fall *grins* das ist die Datei 1:1 wie sie auf dem Server ist :-? hab grad extra nochmal verglichen aber wenn ich mich anmelde (grad auch nochmal gemacht) besteht das Prob immernoch :-?.

Das meine ich ja mit: Ich stehe grad auf dem Schlauch :ugly: ergibt einfach keinen Sinn für mich

Gruß
Gremlin
 
Lass dir am Anfang das $_POST[]-Array ausgeben und den Querystring beim Eintragen.
Irgendwo muss es ja herkommen. Dass die Datenbank das selber macht, kann ich mir nicht vorstellen.
 
Dann ist gut... meine Fälle für AkteX haben öfters mal was mit falschen Versionen zu tun ;)

Das Script wird doch sicher irgendwo includet? Hast du mal geschaut ob da irgendwas mit html****() aufgerufen wird.

Setz mal oben in das Formular "var_dump($_POST);" sende es ab und schau dir dann den Quelltext der Ausgabe an (ansonsten sieht du es nicht). Wenn die Zeichen da schon Maskiert sind liegt das Problem irgendwo an dem was drum rum ist.
 
Also ich include das Script in der index.php da wird jedoch nur die config.php noch includet wo nur Funktionen und Zugangsdaten sowie die Sessionverwaltung drin ist.

Wenn ich das Formular abschicke, ist es tatsächlich darin schon maskiert 8O im Query dann natürlich auch.

Wie gesagt ich habe die index.php in der ist eigentlich nur das Design (ja ich nutze keine Templates :mrgreen:) und ein kleiner php Teil oben welcher:

- die Seite mit gzip komprimiert
- config Datei includet darin sind jedoch wie gesagt nur zugangsdaten, sessionverwaltung, und ein paar funktionen von denen jedoch nichts aufgerufen wird.
- dann noch ein Code der die Kategorien ausliest für im Menü hat aber damit ja auch nichts zu tun
- unten ist dann noch der Endteil von der gzip Komprimierung und das schließen der DB Verbindung.

Also eigentlich nichts was darauf einfluss nehmen könnte :-?

Gruß
Gremlin
 
Wenn du kannst setz mal "var_dump($_POST);" ganz oben in die index.php. Dann kannst du dir sicher sein ob es das Script ist, oder etwas anderes, aber das klingt schon nach dem Script.
 
@gremlin is das dein "eigener" Server wo du das drauf hast??

Ich hatte das Problem bis eben grade auch.

Wenn du das hier in deine php.ini hast:
PHP:
;default_charset = "iso-8859-1"

versuchs mal ohne das ; und restarten
 
Ne hab keinen Root-Zugriff ist zwar ein eigener Server wo nur unsere Projekte draufliegen aber ohne Root ;)

Selbst GANZ oben wird es falsch dargestellt.

*edit*
Auf einem anderen Script (gleicher Server) geht es jedoch normal. Versteh ich nun wirklich überhaupt nicht mehr... Ganz oben wo noch überhaupt kein Code was hätte ändern können wird es schon so komisch dargestellt. Dann liegt ja die Vermutung nahe das php direkt irgendwas macht aber wenns ja auf einer anderen Seite von mir normal geht mit den Umlauten... passt das ja au net zusammen.
 
Zuletzt bearbeitet:
So habe nun den Verursacher gefunden :wall: der Designer hat in der HTML Umsetzung folgendes verwendet:

HTML:
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
Ersetze ich die Zeile mit:
HTML:
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />
funktioniert alles bestens.

Verwundert mich allerdings das dies so ne große Auswirkung hat 8O

Danke für eure Hilfe :D Pottersen hatte mich auf die Idee gebracht durch das was er mit der php.ini schrieb :) ist ja ziemlich ähnlich ^^

Gruß
Gremlin