Doppelte Einträge im IE9

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Doppelte Einträge im IE9

    Hallo,

    ich bin mir nicht sicher ob das Thema hier richtig ist oder eher in "SQL / Datenbanken" gehört. Auf jeden Fall habe ich ein sehr komisches Problem. Ich habe ein Formular. Beim Submit wird der Inhalt in eine DB geschrieben. Soweit funktioniert alles Problemlos, nur beim IE9 werden die Einträge in der DB doppelt eingetragen. Beim IE8 (IE9 im IE8 Modus) & FF klappt es problem los. Der Insert wird nur ein mal aufgerufen. Das habe ich schon 10000x überprüft. Bei der Passworterstellung (die für das Formular verwendet wird) verwende ich eine Verschlüsselung bestehend aus md5 & Zufallszahl, so das sich der Schlüssel jedes mal ändert. Das komische dabei ist, das bei beiden Einträgen zwei verschiedene Passwörter drin stehen obwohl ja der Insert nur ein mal aufgerufen wird. Gibt es vielleicht einen Bug zwischen mysqli & IE9?
    Zuletzt geändert von joextra; 13.01.2012, 10:11.
    Erfahrungen vererben sich nicht jeder muss sie allein machen.

  • #2
    Zitat von joextra Beitrag anzeigen
    Gibt es vielleicht einen Bug zwischen mysqli & IE9?
    Sollte nicht. mysqli/php läuft serverseitig. Da spielt der Browser keine Rolle.

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      ja, das habe ich mir auch gedacht. Aber an was kann es liegen? Problem ist auf jeden Fall der IE9. Das einfachste wäre, den IE9 im IE8 Kompatibilitätsmodus zu betreiben. Aber das ist keine schöne Lösung.
      Erfahrungen vererben sich nicht jeder muss sie allein machen.

      Kommentar


      • #4
        Hast du bei dem Formular irgendwas mit JavaScript gemacht?

        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          ja, das komplette Formular wird per JS überprüft. Normaler weise mach ich es mit PHP aber in diesem Fall sind Reloads unerwünscht (also so wenig wie möglich). Nur beim Submit (nach überprüfung per JS) wird die Seite neu geladen.
          Erfahrungen vererben sich nicht jeder muss sie allein machen.

          Kommentar


          • #6
            Schmeiß doch mal spaßeshalber die JS-Überprüfung raus.

            Peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              tatsache. Ohne JS Funktioniert es. Hmm, könnte es da an den ajax Funktionen liegen, mit denen ich überprüfe ob bestimmte Einträge vorhanden sind?

              EDIT: nein, daran liegts nicht
              Zuletzt geändert von joextra; 13.01.2012, 11:22.
              Erfahrungen vererben sich nicht jeder muss sie allein machen.

              Kommentar


              • #8
                Zitat von joextra Beitrag anzeigen
                tatsache. Ohne JS Funktioniert es.
                Hab ich mir fast gedacht.
                Zitat von joextra Beitrag anzeigen
                Hmm, könnte es da an den ajax Funktionen liegen, mit denen ich überprüfe ob bestimmte Einträge vorhanden sind?
                Ohne Code muss ich raten. Und auch wenn das mit jQuery gemacht wurde.

                Peter

                PS. Ich verschieb es dann mal ins richtige Forum.
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  ok, hier der Code. Und ja, es wird jQuery verwendet.

                  JS:
                  Code:
                  /***************************************
                  	Register/Change Profile check
                  	***************************************/
                  	$('#saveProfile').click(function () {
                  		var id = $('input[name=id]');
                  		var name = $('input[name=name]');
                  		var surname = $('input[name=surname]');
                  		var street = $('input[name=street]');
                  		var zip = $('input[name=zip]');
                  		var place = $('input[name=place]');
                  		var email = $('input[name=email]');
                  		var username = $('input[name=username]');
                  		var password = $('input[name=password]');
                  		var gender = $('input:radio[name=gender]:checked');
                  		
                  		// Check if filled
                  		if(name.val() == '') {
                  			//error = true;
                  			name.css("border", highlight);
                  			name.focus();
                  			return false;
                  		} else {
                  			name.css("border", deHighlight);
                  		}
                  		
                  		if(surname.val() == '') {
                  			//error = true;
                  			surname.css("border", highlight);
                  			surname.focus();
                  			return false;
                  		} else {
                  			surname.css("border", deHighlight);
                  		}
                  		
                  		if(email.val() == '') {
                  			//error = true;
                  			email.css("border", highlight);
                  			email.focus();
                  			return false;
                  		} else if(!emailReg.test(email.val())) {
                  			//error = true;
                  			alert("Falsches Email-Format.");
                  			email.css("border", highlight);
                  			email.focus();
                  			return false;
                  		} else {
                  			email.css("border", deHighlight);
                  		}
                  		
                  		// check if email exists
                  		if(id.val() == "") {
                  			var data = 'email=' + email.val();
                  			$.ajax({
                  				url: "checkPostData.php",
                  				type: "GET",
                  				data: data,
                  				cache: false,
                  				traditional: true,
                  				async: false,
                  				success: function(result) {
                  					if(result == true) {
                  						error = true;
                  						alert("Diese Email existiert bereits.");
                  						email.css("border", highlight);
                  						email.focus();
                  					}
                  				}
                  			});
                  		}
                  		// for: check if email exists
                  		if(error == true) {
                  			error = false;
                  			return false;
                  		}
                  		
                  		if(username.val() == '') {
                  			//error = true;
                  			username.css("border", highlight);
                  			username.focus();
                  			return false;
                  		} else {
                  			username.css("border", deHighlight);
                  		}
                  		
                  		// check if username exists
                  		if(id.val() == "") {
                  			var data = 'username=' + username.val();
                  			$.ajax({
                  				url: "checkPostData.php",
                  				type: "GET",
                  				data: data,
                  				cache: false,
                  				traditional: true,
                  				async: false,
                  				success: function(result) {
                  					if(result == true) {
                  						error = true;
                  						alert("Diese Benutzername ist bereits vergeben.");
                  						username.css("border", highlight);
                  						username.focus();
                  					}
                  				}
                  			});
                  		}
                  		// for: check if username exists
                  		if(error == true) {
                  			error = false;
                  			return false;
                  		}
                  		
                  		if(password.val() == '') {
                  			//error = true;
                  			password.css("border", highlight);
                  			password.focus();
                  			return false;
                  		} else if(password.val().length < 6) {
                  			//error = true;
                  			alert("Das Passwort muss mind. 6 Zeichen lang sein.");
                  			password.css("border", highlight);
                  			password.focus();
                  			return false;
                  		} else {
                  			password.css("border", deHighlight);
                  		}
                  		
                  		if(gender.val() != 'm' && gender.val() != 'f') {
                  			//error = true;
                  			$(".radio").css("color", "#CC0000");
                  			return false;
                  		} else {
                  			$(".radio").css("color", "#888");
                  		}
                  		
                  		if(error == true) {
                  			error = false;
                  			return false;
                  		} else {
                  			$("#registerForm").removeAttr("onsubmit");
                  			pause(1000);
                  			$("#registerForm").submit();
                  			return true;
                  		}
                  	});
                  	
                  	// prevent Form to Submit when pressing Return
                  	$('#registerForm').bind('keydown',function(e){
                  		if(e.which == 13){
                  			//return false;
                  			$('#saveProfile').trigger('click');
                  		}
                  	});
                  Formular:
                  HTML-Code:
                  <form name="registerForm" id="registerForm" action="index.php" method="post" onSubmit="return false;">
                  <input type="hidden" name="registerForm" value="true">
                  <input type="hidden" name="registeredSince" value="<?echo $registeredSince;?>">
                  <input type="hidden" name="id" value="<?echo $id;?>">
                  <div class="userData">
                  	<p>Vorname*</p>
                  	<input type="text" name="name" value="<?echo $name;?>">
                  	<p>Name*</p>
                  	<input type="text" name="surname" value="<?echo $surname;?>">
                  	<p>Straße</p>
                  	<input type="text" name="street" value="<?echo $street;?>">
                  	<div id="zip">
                  		<p>PLZ</p>
                  		<input type="text" name="zip" value="<?echo $zip;?>" maxlength="5">
                  	</div>
                  	<div id="place">
                  		<p>Ort</p>
                  		<input type="text" name="city" value="<?echo $city;?>">
                  	</div>
                  </div>
                  <div class="userData">
                  	<p>Email*</p>
                  	<input type="text" name="email" value="<?echo $email;?>">
                  	<p>Benutzername*</p>
                  	<input type="text" name="username" value="<?echo $username;?>">
                  	<p>Passwort*</p>
                  	<input type="password" name="password" id="passwordLength" value="<?echo $password;?>">
                  	<div style="float:left; width:100%;" class="radio">
                  		<p><input type="radio" name="gender" value="m" <?if($gender == "m") { echo "checked"; }?>>&nbsp;männlich*</p>
                  		<p><input type="radio" name="gender" value="f" <?if($gender == "f") { echo "checked"; }?>>&nbsp;weiblich*</p>
                  	</div>
                  	<p>* = Pflichtfelder</p>
                  	<p>&nbsp;</p>
                  	<button onClick="openProfile();" class="buttonSpaceRight">SCHLIESSEN</button>
                  	<button id="saveProfile">SPEICHERN</button>
                  </div>
                  </form>
                  Was mir auch auf gefallen ist, ist das focus() im IE9 auch nicht funktioniert. Ich habe zwar diesen Workarround gefunden "setTimeout(function() { document.getElementById('myInput').focus(); }, 10);" aber das ist auch nicht das wahre.
                  Zuletzt geändert von joextra; 13.01.2012, 11:36.
                  Erfahrungen vererben sich nicht jeder muss sie allein machen.

                  Kommentar


                  • #10
                    Zitat von joextra Beitrag anzeigen
                    Und ja, es wird jQuery verwendet.
                    Sorry, dann bin ich raus.

                    Peter
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Kommentar


                    • #11
                      d.h. du kennst dich mit JQ nicht aus? Im Prinzip ist es ja aber kein Problem von JQ sondern vom IE. Ich glaube das es einen Zusammenhang mit dem
                      HTML-Code:
                      onSubmit="return false;"
                      im formular gibt.

                      Also, bin jetzt etwas weiter. Wenn ich die ganze Überprüfung in eine funktion einbette und diese dann mit den onSubmit aufrufe
                      HTML-Code:
                      onSubmit="return check()"
                      , funktioniert es. Das Problem hierbei ist aber, das wenn ich Return drücke die Form submittet wird, ohne Überprüfung. Irgend eine Idee wie das vermeiden kann?
                      Zuletzt geändert von joextra; 13.01.2012, 15:33.
                      Erfahrungen vererben sich nicht jeder muss sie allein machen.

                      Kommentar


                      • #12
                        Zitat von joextra Beitrag anzeigen
                        d.h. du kennst dich mit JQ nicht aus?
                        Ich bin zumindest kein Profi.
                        Zitat von joextra Beitrag anzeigen
                        Das Problem hierbei ist aber, das wenn ich Return drücke die Form submittet wird, ohne Überprüfung. Irgend eine Idee wie das vermeiden kann?
                        Wenn ein onsubmit-Handler auf dem Formular liegt und selbiger ein false zurückliefert, so wird auch nichts beim Drücken der Return-Taste abgesendet. Selbst im IE9. Also muss aus irgendeinem Grund der return-Wert von check() nicht stimmen.

                        Gruß
                        Peter
                        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                        Meine Seite

                        Kommentar


                        • #13
                          wenn ich aber direkt auf speichern klicke, funktioniert es aber. Nur wenn ich Return klicke, scheint es als würde er onsubmit ignorieren. Ich habe spasseshalber auch noch ein alert ganz oben in der Funktion eingefügt. Wenigstens dieser müsste aufgerufen werden.
                          Erfahrungen vererben sich nicht jeder muss sie allein machen.

                          Kommentar


                          • #14
                            ok, Problem erkannt. Man sollte in JQ eine Funktion nicht innerhalb von
                            $(document).ready(function() {
                            einfügen, sonst klappt es nicht. Jetzt scheint es jedenfalls zu funktionieren. Auch der focus() wird jetzt gesetzt.
                            Erfahrungen vererben sich nicht jeder muss sie allein machen.

                            Kommentar

                            Lädt...
                            X