AJAX u PHP Formvalidierung Problem PW´s vergleichen

hanswurst23

Grünschnabel
Hallo an alle,

ich habe ein rel. großes Problem an dem ich schon ne ganze weile sitze. Ich habe ein unaufdringliche Form Validierung die beim verlassen eines Feldes die Eingabe überprüft. Das ganze ist so gestrickt das wenn jemand kein js erlaubt die Prüfung in Php gemacht wird. Jetzt hab ich das Problem das ich gerne eine PW wdh einbauen will um sicherzustellen das das eingegeben PW richtig ist. Das ganze bei einer neu Anmeldung auf meiner Seite. Ich habe für die Prüfung eine Php Klasse in der die Eingaben geprüft werden. Jede Prüfung hat eine eigene function in der Klasse, also eine func. für PW und eine für PW wdh und natürlich noch viel mehr. Die ganze Sache besteht aus 7 Dateien und knapp tausend Zeilen weshalb ich hier lieber nur Teile des Codes zeigen werde. Ich habe versucht in der Klasse eine Variable anzulegen die nach der Prüfung des PW´s mit dem übergebenen Wert gefüttert werden soll um dann bei der PW wdh gegen zu prüfen. Ich bekomme es aber nicht hin. Was mach ich Falsch?

hier der Anfang der Klasse:

PHP:
class Validate
{
  //die Var die ich gern zum vergleich hätte
  var $password;
usw....

Dann kommen zwei public functions
und zu guter letzt die Stellen an den die Eingaben geprüft werden sollen.

PHP:
// validate Pass
    private function validatePass($value)
  {
    // trim and escape input value    
    $value = trim($value);
    // empty user name is not valid
    if ($value){
	  $this->password = $value;
      return 1; // valid
	}
    else
      return 0; // not valid
  }

  // validate Pass2
    private function validatePass2($value)
  {
    // trim and escape input value    
    $value = trim($value);
    // empty user name is not valid

    if ($this->password == $value) {
	  return 1; // valid
	}
    else
      return 0; // not valid
  }
wie man unschwer sehen kann hab ich versucht in der validatePass über $this->password = $value versucht den übergeben Wert in der variablen password zu speichern. Ich weis nicht ob das Passiert bzw richtig ist?!

in der validatePass2 möchte ich dann die beiden Werte vergleichen also ob das PW wdh mit dem PW übereinstimmt. Mir wird aber immer 0 (not valid) übergeben. Was mach ich bloss wieder falsch? Geht das was ich vorhabe überhaupt und wenn nein was dann? Session, oder $GLOBALS? Ich bin echt grad ratlos.

Vielen Dank für eure Hilfe...
 
Zuletzt bearbeitet:
Leider habe ich mein Problem immer noch nicht lösen können. Ich habe diese Script aus dem Buch PHP und AJAX, leider gerade verliehen, daher kein Autor bzw Verlag zur Hand. Mann kann sich das Script, das übrigens finde ich die schönste Art ist (für den User nicht für mich:confused:) ein Formular zu Validieren bei Packtpub runterladen. Vielleicht kann sich das mal einer anschauen und mir evtl dann helfen. Mir fällt absolut nichts ein wie ich die beiden Passwörter miteinander vergleichen kann. In der Ursprungsversion ist leider nur die Eingabe eines Passwortes gegeben, ich möchte aber nicht dem User zumuten evtl bei einer, ohne diese zusätzliche Prüfung nicht auffalenden Falscheingabe doof da zu stehen.

Bitte helft mir, diese Seite soll einem Charity zweck dienen und jeden Tag den ich verstreichen lassen muss, schadet nicht mir sondern hilfe bedürftigen. Ich bin für jede hilfe Dankbar, wenn noch Infos benötigt werden (und davon gehe ich aus) sagt mir bescheid, ich ergänze dann die Fehlenden Infos.
 
Die Variable, auch das Objekt sind nur bis zum Beenden des PHP Skripts gültig, soll die Variable nachher noch vorhanden sein, musst du zB Sessions verwenden.

Oder du übergibst jeweils beide Werte an das PHP Skript.

Hängt vom restlichen Konzept ab.
 
Vielen Dank. An SESSIONS hab ich auch schon gedacht ist auch wahrscheinlich der bessere Weg. Muss ich mich eben so durch fuchsen, hab einfach nicht dran gedacht das die Werte nur bis ende des scripts vorhanden sind. Ich werd das jetzt mal versuchen.
Ich hoffe ich check das.

// EDIT

Ich habe ds Problem gelöst bekommen. Hier die Lösung: Bei Prüfung des ersten PW dieses in vorhandener SESSION speichern (die vorher nur gefüllt wurde wenn Fehler vorhanden) und dann in der zweiten Prüfung damit vergleichen. Fertig. So siehts aus:

PHP:
// validate Pass
    private function validatePass($value)
  {
    // trim and escape input value    
    $value = trim($value);
    // empty user name is not valid
    if ($value){
	  $_SESSION['values']['txtPass'] = $value;
      return 1; // valid
	}
    else
      return 0; // not valid
  }

  // validate Pass2
    private function validatePass2($value)
  {
    // trim and escape input value    
    $value = trim($value);
    // empty user name is not valid

    if ($value && $_SESSION['values']['txtPass'] == $value) {
	  return 1; // valid
	}
    else
      return 0; // not valid
  }

Danke für die wegweisung...
 
Wozu so umständlich?
HTML:
<input type="password" name="password1">
<input type="password" name="password2" onchange="if(this.value!=document.getElementsByName('password1')[0].value) alert('Passwörter nicht identisch!')">
PHP:
if( $_POST['password1'] != $_POST['password2'] ) {
	$errors[] = 'Passwörter sind nicht identisch!';
}
 
Wäre natürlich auch eine Möglichkeit, aber das Formular wird nur im gesamten an PHP gesendet, wenn javascript deaktiviert ist. Wenn JS aktiviert ist, wird jedes Formularfeld beim verlassen (onblur) per AJAX an PHP gesendet und geprüft und wenn das alles ok ist wird erst das gesamte Formular versendet. Dann wird das ganze nochmal mit PHP geprüft und abgesichert.

So bekomm ich es hin das der User, wenn er im ersten Feld keine Eingabe macht, sofort unter dem Eingabe Feld eine Fehlermeldung zu sehen bekommt in der steht das er keine Eingabe gemacht hat, bevor ich das gesamte Formular versende (unaufdringliche Formularvalidierung) also während der User das Formular ausfüllt

Wenn er im zweiten Feld eine falsch Eingabe macht (leer od stimmen nicht überein) bekommt er die Meldung die Passwörter stimmen nicht überein.

Ich glaub ich bin mit der Lösung sehr zufrieden, aber danke für deine Mühe.
 
Du kannst es gerne machen wie du möchtest. Ich verstehe nur nicht, wieso die Passwörter erst mit JavaScript an den Server geschickt werden, um sie auf Identität zu prüfen. Das kann doch mit JavaScript genauso gut erledigt werden.
 
Weil ich es unlogisch finde noch ein andere Prüfung zu bemühen wenn das alles in den vorhanden validierungs scripten geht. So einen weg hätt ich wohl auch genommen wenn ich mit dem den ich hatte, gescheitert wäre. Aber dank der Hilfe aus diesem Forum konnte ich mein Problem lösen und nicht umgehen. So bleibt das System geschlossen.

Ich wollt auch nicht sagen das dein weg doof ist oder sowas, wenn das so rüberkam, Sorry.
 
Zurück