Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler im Kontaktformular

Einklappen

Neue Werbung 2019

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

  • Fehler im Kontaktformular

    Hallo,

    ich benutze folgenden Code, bekomme aber neuerdings
    einen Fehler bei den Pflichtfeldern, den ich nicht nachvollziehen
    kann:

    Code:
    Notice: Undefined variable: vornameError in /srv/www/htdocs/web/html/wp-content/themes/bla-child/kontakt.php on line 113
    ...

    Mein Formular:
    Code:
    <form action="<?php the_permalink(); ?>" id="contactForm" method="post">
    			<div id="kf0">&nbsp;</div>
    			<div id="kf1">
    			<p><label for="contactVorname">Vorname *</label><br />
    			<input type="text" name="contactVorname" id="contactVorname" value="<?php if(isset($_POST['contactVorname'])) echo $_POST['contactVorname'];?>" maxlength="50" />
    			<?php if($vornameError != '') { ?>
    			<span class="fehler"><?=$vornameError;?></span>
    			<?php } ?></p>
    
    			<p><label for="contactName">Nachname *</label><br />
    			<input type="text" name="contactName" id="contactName" value="<?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?>" maxlength="50" />
    			<?php if($nameError != '') { ?>
    			<span class="fehler"><?=$nameError;?></span>
    			<?php } ?></p>
    
    			<p><label for="email">E-Mail *</label><br />
    			<input type="text" name="email" id="email" value="<?php if(isset($_POST['email']))  echo $_POST['email'];?>" maxlength="50" />
    			<?php if($emailError != '') { ?>
    			<span class="fehler"><?=$emailError;?></span>
    			<?php } ?></p>
    
    			<p><label for="unternehmen">Unternehmen</label><br />
    			<input type="text" name="unternehmen" id="unternehmen" value="" maxlength="50" /></p>
    
    			<p><label for="ort">Ort</label><br />
    			<input type="text" name="ort" id="ort" value="" maxlength="50" /></p>
    
    			<p><label for="telefon">Telefon</label><br />
    			<input type="text" name="telefon" id="telefon" value="" maxlength="50" /></p>
    			</div>
    
    			<div id="kf2">
    			<p><label for="betreff">Betreff *</label><br />
    			<input type="text" name="betreff" id="betreff" value="<?php if(isset($_POST['betreff']))  echo $_POST['betreff'];?>" maxlength="50" />
    			<?php if($betreffError != '') { ?>
    			<span class="fehler"><?=$betreffError;?></span>
    			<?php } ?></p>		
    
    			<p><label for="commentsText">Nachricht *</label><br />
    			<textarea name="comments" id="commentsText" rows="20" cols="30"><?php if(isset($_POST['comments'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['comments']); } else { echo $_POST['comments']; } } ?></textarea>
    			<?php if($commentError != '') { ?>
    			<span class="fehler"><?=$commentError;?></span>
    			<?php } ?></p>
    			<p>* = Pflichtfelder</p>
    			</div>
    
    			<div id="kf3">
    			<input type="submit" value="SENDEN" alt="senden" class="btn" /><br /><input type="hidden" name="submitted" id="submitted" value="true" />
    			</div>
    
    			<div id="kf4">
    			<?php if(isset($hasError) || isset($captchaError)) { ?>
    			<div><p class="error fehler">* ungültige oder fehlende Daten</p></div>
    			<?php } ?></div>
    
    			</form>
    PHP dazu:
    Code:
    <?php
    if(isset($_POST['submitted'])) {
    	if(trim($_POST['contactVorname']) === '') {
    		$vornameError = '*';
    		$hasError = true;
    	} else {
    		$vorname = trim($_POST['contactVorname']);
    	}
    
    	if(trim($_POST['contactName']) === '') {
    		$nameError = '*';
    		$hasError = true;
    	} else {
    		$name = trim($_POST['contactName']);
    	}
    
    	if(trim($_POST['email']) === '')  {
    		$emailError = '*';
    		$hasError = true;
    	} else if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", trim($_POST['email']))) {
    		$emailError = '*';
    		$hasError = true;
    	} else {
    		$email = trim($_POST['email']);
    	}
    
    	if(trim($_POST['unternehmen']) === '') {
    /*		$unternehmenError = '*';
    		$hasError = true; */
    	} else {
    		$unternehmen = trim($_POST['unternehmen']);
    	}
    
    	if(trim($_POST['ort']) === '') {
    /*		$ortError = '*';
    		$hasError = true; */
    	} else {
    		$ort = trim($_POST['ort']);
    	}
    
    	if(trim($_POST['telefon']) === '') {
    /*		$telefonError = '*';
    		$hasError = true; */
    	} else {
    		$telefon = trim($_POST['telefon']);
    	}
    
    	if(trim($_POST['betreff']) === '') {
    		$betreffError = '*';
    		$hasError = true;
    	} else {
    		$betreff = trim($_POST['betreff']);
    	}
    
    	if(trim($_POST['comments']) === '') {
    		$commentError = '*';
    		$hasError = true;
    	} else {
    		if(function_exists('stripslashes')) {
    			$comments = stripslashes(trim($_POST['comments']));
    		} else {
    			$comments = trim($_POST['comments']);
    		}
    	}
    
    	if(!isset($hasError)) {
    		$emailTo = get_option('tz_email');
    		if (!isset($emailTo) || ($emailTo == '') ){
    			$emailTo = get_option('admin_email');
    		}
    		$subject = 'Kontaktformular | '.$vorname.' '.$name;
    		$body = "\n.: Kontaktformular-E-Mail :. \n\nName: $vorname $name \nE-Mail: $email \n\nUnternehmen: $unternehmen \nOrt: $ort \nTelefon: $telefon \n\nBetreff: $betreff \n\nNachricht: $comments";
    		$headers = 'From: '.$vorname.' '.$name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;
    
    		wp_mail($emailTo, $subject, $body, $headers);
    		$emailSent = true;
    	}
    
    }
    ?>

  • #2
    Wundert mich jetzt nicht, dass du den Fehler nicht nachvollziehen kannst. Der Code wurde doch mit Vorsatz schlecht wartbar geschrieben, oder?

    Ansonsten: Bitte angeben wo Zeile 113 liegt

    Kommentar


    • #3
      Bei Zeile 113 greifst du auf diese Var zu, die zu diesem Zeitpunkt an dieser Stelle jedoch noch nicht exisitert.

      debugge: http://php-de.github.io/jumpto/leitfaden/

      Und für PHP Quellcode die PHP Tags verwenden statt CODE, und welches die Zeile 113 ist darfst selbst gucken.
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Tjo, was soll man sagen?

        In Zeile 113 der kontakt.php ist die Variable "vornameError" unbekannt. (Welches ist Zeile 113?)

        Betreibe Debugging um herauszufinden, warum das so ist...
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Vielen Dank euch schon einmal. Habe mir gleich
          mal die betreffenden Zeilen herausgesucht, aber
          kann nicht erkennen, warum die Variable nicht
          vergeben ist. Dachte, ich hätte das per PHP korrekt
          angewendet.

          Code:
          111: <p><label for="contactVorname">Vorname *</label><br />
          112: <input type="text" name="contactVorname" id="contactVorname" value="<?php if(isset($_POST['contactVorname'])) echo $_POST['contactVorname'];?>" maxlength="50" />
          113: <?php if($vornameError != '') { ?>
          114: <span class="fehler"><?=$vornameError;?></span>
          115: <?php } ?></p>

          Kommentar


          • #6
            Weil die Variable in einem "if" steht. Trifft die Bedinung nicht zu, wird auch die Variable nicht initialisiert.
            [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

            Kommentar


            • #7
              Ohne die If-Struktur bekomme ich aber
              nicht mehr die Fehleranzeige hin bezüglich
              leerem Feld und so. Liegt der Fehler/die
              Lösung nicht woanders?

              Ich habe einfach mal

              113: <?php if($vornameError != '') { ?>

              zu

              113: <?php if($vornameError = '') { ?>

              geändert, da ich dachte, ich hätte einen
              Fehler gesehen. Nun wird zwar nicht mehr
              der obengenannte Fehler gemeldet, ABER
              dafür auch nicht mehr die Fehlermeldung
              neben dem Eingabefeld, wenn man es leer
              lässt und das Dokument so absenden möchte.

              Kommentar


              • #8
                PHP-Code:
                113: <?php if($vornameError '') { ?>
                Ja weil es so falsch ist. Du machst eine Zuweisung mit einem = Zeichen, daher auch keine notice. http://php-de.github.io/jumpto/if/#s...he-fallstricke

                Nutze isset() oder !empty().
                The string "()()" is not palindrom but the String "())(" is.

                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Zitat von hausl Beitrag anzeigen
                  Ja weil es so falsch ist. Du machst eine Zuweisung mit einem = Zeichen, daher auch keine notice. http://php-de.github.io/jumpto/if/#s...he-fallstricke

                  Nutze isset() oder !empty().
                  A, danke, verstanden. Danke auch für den Link
                  ("syntaktische Fallstrike").

                  Ich habe nun

                  113: <?php if($vornameError = '') { ?>

                  zu

                  113: <?php if(!empty($vornameError)) { ?>

                  geändert und damit scheint es zu funktionieren
                  oder ist daran noch etwas mangelhaft?

                  Kommentar


                  • #10
                    Du könntest die Fehlermeldungen auch allesamt in ein Array schreiben, anstatt für jeden Fehlerfall eine andere Variable zu benutzen. Damit kannst du dann auch die Anzeige der Fehler an einer zentralen Stelle handhaben anstatt das auf das gesamte Script zu verteilen.
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar

                    Lädt...
                    X