PHP mit JavaScript prüfen?

L

librarian

Mitglied
Thread Starter
Dabei seit
21.08.2005
Beiträge
36
Reaktionspunkte
0
Kann ich ein Formular in einem PHP-Skript vor dem Absenden mit JavaScript prüfen? Hab's ausprobiert, wie bei einem HTML-Formular, aber das funktioniert nicht. Auch probiert body onload="jsFunction();" zu nutzen, aber das hat auch nicht geklappt. Vielleicht aber auch bloß falsch angewendet?
 
Was möchtest Du denn überprüfen, ob Eingaben vorhanden oder plausibel sind?

Nachtrag: Wenn Du sowieso in PHP codest, kannst Du das auch ohne
Java-Script machen, z.b. so:

PHP:
<?php
if (empty($zuname)) {echo ("Bitte Zunamen eingaben!"),exit();}
?>

<p>Ihre Daten:<?php echo ("$zuname") ?></p>
 
Zuletzt bearbeitet von einem Moderator:
Möchte beides prüfen, und da ich die JavaScript Funktion schon für ein HTML-Formular geschrieben habe, dachte ich, daß ich sie auch für das Formular im PHP-Skript benutzen könnte.
 
Die Überprüfung des Formulares mit Javascript in der PHP-Datei geht genauso wie bei der HTML-Datei, da ja PHP nichts anderes als HTML zurückliefert.

Da ist wahrscheinlich ein Fehler im Script, am besten du zeigst mal die entsprechenden Codeschnipsel.
 
Richtig, Javascript prüft ja beim Client den Inhalt von HTML-Formularelementen. Somit besteht da eigentlich kein Unterschied. Bei der Frage Prüfung in Javascript/PHP gibt es noch einen wichtigen Aspekt:

(1) Prüfung in Javascript erfolgt komfortabel beim Client ohne Neuaufruf. Angenehm für User, aber sinnlos bei deaktiviertem Javascript

(2) Prüfung per PHP erfordert einen erneuten Seitenaufruf um validiern zu können, erfordert aber einen zusätzlichen Automatenstatus. Dafür ist es nicht vom Client abschaltbar.

Die Methode 2 ist sicherer was die Daten betrifft, die Methode 1 ist in kontrollierbaren Umfeldern komfortabler. Wie immer hat man die Wahl der Qual :)
 
Das ist das Skript:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD 
HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; 
  charset=iso-8859-1">
  <title>Studentendaten</title>
  <LINK REL="stylesheet" HREF="hausarbeit.css" TYPE="text/css">
    <script language="JavaScript">
       function chkbearbeitungsformular()
                {
                 if(document.bearbeiten_waehlen.vorname.value == ""){
                 alert("Sie haben den Vornamen nicht angegeben!");
                 document.bearbeiten_waehlen.vorname.focus();
                 return false;
                 }
                 var chkZ = -1;
                 for(i=0;i<document.bearbeiten_waehlen.vorname.value.length;++i)
                 if(document.bearbeiten_waehlen.vorname.value.charAt(i) < "0"
                 || document.bearbeiten_waehlen.vorname.value.charAt(i) > "9")
                 chkZ = 1;
                 if(chkZ == -1) {
                 alert("Bitte im Vornamen-Feld keine Zahlen eingeben!");
                 document.bearbeiten_waehlen.vorname.focus();
                 return false;
                 }
                 if(document.bearbeiten_waehlen.name.value == ""){
                 alert("Sie haben den Nachnamen nicht angegeben!");
                 document.bearbeiten_waehlen.name.focus();
                 return false;
                 }
                 var chkZ = -1;
                 for(i=0;i<document.bearbeiten_waehlen.name.value.length;++i)
                 if(document.bearbeiten_waehlen.name.value.charAt(i) < "0"
                 || document.bearbeiten_waehlen.name.value.charAt(i) > "9")
                 chkZ = 1;
                 if(chkZ == -1) {
                 alert("Bitte im Nachnamen-Feld keine Zahlen eingeben!");
                 document.bearbeiten_waehlen.name.focus();
                 return false;
                 }
                 if(document.bearbeiten_waehlen.b_day.value == ""){
                 alert("Sie haben den Geburtstag nicht angegeben!");
                 document.bearbeiten_waehlen.b_day.focus();
                 return false;
                 }
                 var chkZ = 1;
                 for(i=0;i<document.bearbeiten_waehlen.b_day.value.length;++i)
                 if(document.bearbeiten_waehlen.b_day.value.charAt(i) < "0"
                 || document.bearbeiten_waehlen.b_day.value.charAt(i) > "9")
                 chkZ = -1;
                 if(chkZ == -1) {
                 alert("Bitte im Geburtstag-Feld nur Zahlen eingeben!");
                 document.bearbeiten_waehlen.b_day.focus();
                 return false;
                 }
                 if(i<=7 || i>=9){
                 alert("Sie haben den Geburtstag nicht korrekt eingegeben!");
                 document.bearbeiten_waehlen.b_day.focus();
                 return false;
                 }
                 if(document.bearbeiten_waehlen.mat_nr.value == ""){
                 alert("Sie haben die Matrikelnummer nicht angegeben!");
                 document.bearbeiten.mat_nr.focus();
                 return false;
                 }
                 var chkZ = 1;
                 for(i=0;i<document.bearbeiten_waehlen.mat_nr.value.length;++i)
                 if(document.bearbeiten_waehlen.mat_nr.value.charAt(i) < "0"
                 || document.bearbeiten_waehlen.mat_nr.value.charAt(i) > "9")
                 chkZ = -1;
                 if(chkZ == -1) {
                 alert("Bitte im Matrikelnummer-Feld nur Zahlen eingeben!");
                 document.bearbeiten_waehlen.mat_nr.focus();
                 return false;
                 }
       var vorname = document.bearbeiten_waehlen.vorname.value;
       var name = document.bearbeiten_waehlen.name.value;
       var b_day = document.bearbeiten_waehlen.b_day.value;
       var mat_nr = document.bearbeiten_waehlen.mat_nr.value;
if(!confirm('Sollten diese Angaben Fehler enthalten, klicken Sie bitte auf Abbrechen und korrigieren Sie sie im Formular: " + vorname + " " + name + " / " + b_day + " / " + mat_nr + " / " + adresse + " / " + plz + " " + wohnort + " / " + land + " / " + phon + " / " + email + " / Durch anklicken von OK werden die Daten in der Datenbank ge&auml;ndert.'))return false;
else return true;
      }
       </script>  
</head>

<body>

<?php
   
include ('contact.php');


$query = "SELECT lfd_nr, vorname, name, b_day, mat_nr, adresse, plz, wohnort, land, phon, email FROM studidaten WHERE lfd_nr LIKE '".mysql_escape_string($_POST['auswahl'])."'";
 
$result = mysql_query($query, $db);
if($result && mysql_num_rows($result)>0){
   echo '<h2 align="center">Datens&auml;tze gefunden.</h2>';

      ?><?
      while($row=mysql_fetch_object($result)){
echo '<p align="center">Lfd. Nr.: '.$row->lfd_nr.'</p>';
      ?>
      
<form name="bearbeitungsformular"
      action="bearbeiten.php" method="post"
      onsubmit="return chkbearbeitungsformular()"
      align="center">
<table align="center" cellpadding="2">
      <tr>
         <td><input type="hidden" name="lfd_nr" value="<?=$row->lfd_nr?>" /></td>
      </tr>
      <tr>
         <td><label><p id="tabelle" >Vorname</p></label></td>                  
         <td><input type="text" name="vorname" value="<?=$row->vorname?>" /></td>
      </tr>
      <tr>
         <td><label><p id="tabelle" >Name</p></label></td>                  
         <td><input type="text" name="name" value="<?=$row->name?>" /></td>
      </tr>
      <tr>
         <td><label><p id="tabelle" >Geburtstag</p></label></td>                  
         <td><input type="text" name="b_day" value="<?=$row->b_day?>" /></td>
      </tr>
      <tr>
         <td><label><p id="tabelle" >Matrikelnr.</p></label></td>                  
         <td><input type="text" name="mat_nr" value="<?=$row->mat_nr?>" /></td>
      </tr>
   </table> 
   <p id="tabelle" align="center">*Geben Sie das Geburtsdatum bitte ohne Punkte, o.a., wie folgt ein: <br>JJJJMMTT (z.B. 1. M&auml;rz 1982: 19820301)<br>**Geben Sie die vollst&auml;ndige Telefonnummer mit Vorwahl bitte ohne Leerstellen<br> oder trennende Zeichen, wie Kommata, Gedanken- oder Schr&auml;gstriche an.</p>

</form>
      <?
}
;
}

else {
   echo "Keine Datens&auml;tze gefunden.".mysql_error();
}
  
mysql_close($db);
?>
</body>
</html>
 
Zuletzt bearbeitet:
Wird denn kein JS-Fehler ausgegeben? Ansonsten mach mal ein alert am Anfang der Funktion chkbearbeitungsformular(). Dann siehst Du ob sie aufgerufen wird. Das mit dem onsubmit muss eigentlich funktionieren.
 
Nein, es wird kein Fehler ausgegeben. Auf das alert am Anfang der Funktion chkbearbeitungsformular() hin wird aber auch nichts ausgegeben. Sie wird wohl nicht aufgerufen, aber ich habe keine Ahnung warum. Kann mir jemand helfen?
 
librarian schrieb:
Nein, es wird kein Fehler ausgegeben.
Ganz sicher? Das ist eigentlich die einzige Möglichkeit warum ein alert nicht ausgegeben wird.
Öffne die Datei mal im Firefox/Opera und schau Dir den Inhalt der JavaScript-Konsole an.
 
Danke, das hat geholfen.
 
Javascript-Fehler fliegen dir nicht um die Ohren, die musst du schon explizit anschauen wollen.

document.bearbeiten_waehlen gibt es nicht, das Formular heißt bei dir bearbeitungsformular. Die Leerschritte in z.B. "valu e" sehe ich mal als Copy&Paste-Fehler an.

Wenn du das ganze allgemeiner halten willst, kannst du auch die Funktion mit
HTML:
onsubmit="return chkbearbeitungsformular(this)"
aufrufen. Deine Funktion selbst muss dann das Argument natürlich verarbeiten
HTML:
    <script language="JavaScript">
       function chkbearbeitungsformular(obj)       
                {                
                 if(obj.vorname.value == ""){
                 alert("Sie haben den Vornamen nicht angegeben!");
                 obj.vorname.focus();
                 return false;
                 }

Dadurch vermeidest du solche Copy&Paste-Fehler.

HTML:
confirm('Sollten diese Angaben Fehler enthalten, klicken Sie bitte auf Abbrechen und korrigieren Sie sie im Formular: " + vorname + " " + name + " / " + b_day + " / " + mat_nr + " / " + adresse + " / " + plz + " " + wohnort + " / " + land + " / " + phon + " / " + email + " / Durch anklicken von OK werden die Daten in der Datenbank ge&auml;ndert.')

Die Variablen werden dir, wenn du den String mit ' beginnst, auch nur interpretiert, wenn du sie mit ' anbindest. Derzeit steht in deinem alert nur [...]m Formular: " + vorname + " " + [...].
HTML-Entitäten (bei geändert) werden im Javascript auch genau so ausgegeben, da JS sie nicht interpretiert.
Und auf 'darf keine Zahl eingegeben sein' läßt sich mit einem RegEx einfacher prüfen...

Matt
 
Zurück
Oben Unten