88871
Goto Top

PHP - Formularfelder validieren und absenden.

brauche noch ein tipp wie ich daten auf in eine neue seite bringe um sie dann in die mySQL eintragen kann.

ich habe das script von hier: http://www.tutorials.de/forum/php-tutorials/13494-php-formular-eingabe- ... welches ich sehr gut finde zum validieren. ich schaffe es aber nicht die daten per $_POST an mein action script zu übergeben welches dann die daten in die mySQL schreibt. mySQL schreibt zwar eine row, aber ohne inhalt. die felder sind leer. wie auch, bei meinem url leite ich nur aufs actionscript weiter..... face-smile

mit einer header (Location:...) komme ich nicht weiter, da ich oben schon html ausgebe....

wer kann mir hier helfen damit ich die $_variablen per $_POST oder $_GET oder anderes auf eine neue seite bringen kann ? ich habe versucht in zeille 19 dann weiterzuleiten......jetzt steht nur ein normaler html url da.

die meta tags und header bis zum body

dann hier das script

<?php
        if ($action=="check") {   
                if(eingabe_check($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen)==1) {  
                echo "Sie haben folgende Informationen eingetragen:<br><hr><br>";  
                echo "Anmeldetyp: ".$anmeldetyp."<br>";  
                echo "Firma: ".$firma."<br>";  
                echo "Name: ".$name."<br>";  
                echo "Vorname: ".$vorname."<br>";  
                echo "Titel: ".$titel."<br>";  
                echo "Adresse: ".$adresse."<br>";  
                echo "Ort: ".$ort."<br>";  
                echo "Land: ".$land."<br>";  
                echo "E-mail: ".$email."<br>";  
                echo "Webseite: ".$webseite."<br>";  
                echo "Telefon: ".$telefon."<br>";  
                echo "Fax: ".$fax."<br>";  
                echo "Anmerkungen: ".$anmerkungen."<br>";  
                echo "<br><hr><br>";  
                echo "hier gehts zum <a href=\"teilnehmer_anmeldung_action.php\">ACTIONSCRIPT</a> welches die $ variablen in die mySQL schreibt. .";  
                }
            else {
                echo eingabe_check($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen);    
                formular_ausgabe($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen);      
            }
        }
        else {
            formular_ausgabe($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen);          
        }

        function formular_ausgabe($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen)
        { 
            global $PHP_SELF;                         
            echo "  

            <form action=\"".$PHP_SELF."?action=check\" method=\"post\" name=\"anmeldung\" id=\"teilnehmeranmeldung\" enctype=\"multipart/form-data\">  
             <table id=table1>
             <thead>
              <tr><td class=head colspan=2><span class=style1>Anmeldung</span></td></tr>
             </thead>
              <tr><td class=bodyleft><input type=radio name=anmeldetyp value=teilnehmer checked=checked>&nbsp;Teilnehmer</td>
              <td class=bodyright>...</td></tr>
              <tr><td class=bodyleft><input type=radio name=anmeldetyp value=studenten>&nbsp;Studenten*</td>
             </table>
               <br>

             <table id=table1>
             <thead>
              <tr><td width=140px class=bodyleft><label for=firma>Firma</label></td>
              <td><input class=input name=firma type=text size=60 value=\"".$firma."\"></td></tr>  
             </thead>
              <tr><td class=bodyleft><label for=name>Nachname*</label></td>
              <td><input class=input name=name type=text size=60 value=\"".$name."\"></td></tr>  
              <tr><td class=bodyleft><label for=vorname>Vorname*</label></td>
              <td><input class=input name=vorname type=text size=60 value=\"".$vorname."\"></td></tr>  
              <tr><td class=bodyleft><label for=titel>Anrede/Titel</label></td>
              <td><input class=input name=titel type=text size=60 value=\"".$titel."\"></td></tr>  
              <tr><td class=bodyleft><label for=adresse>Adresse*</label></td>
              <td><input class=input name=adresse type=text size=60 value=\"".$adresse."\"></td></tr>  
              <tr><td class=bodyleft><label for=ort>PLZ/Ort*</label></td>
              <td><input class=input name=ort type=text size=60 value=\"".$ort."\"></td></tr>  
              <tr><td class=bodyleft><label for=land>Land</label></td>
              <td><input class=input name=land type=text size=60 value=\"".$land."\"></td></tr>  
              <tr><td class=bodyleft><label for=email>E-Mail*</label></td>
              <td><input class=input name=email type=text size=60 value=\"".$email."\"></td></tr>  
              <tr><td class=bodyleft><label for=webseite>Webseite</label></td>
              <td><input class=input name=webseite type=text size=60 value=www
                onFocus='if(this.value==\"www\") this.value=\"\";' onblur='if(this.value==\"\")this.value=\"www\";'/></td></tr>  
              <tr><td class=bodyleft><label for=telefon>Telefon</label></td>
              <td><input class=input name=telefon type=text size=60 value=\"".$telefon."\"></td></tr>  
              <tr><td class=bodyleft><label for=fax>Fax</label></td>
              <td><input class=input name=fax type=text size=60 value=\"".$fax."\"></td></tr>  
              <tr><td class=bodyleft><label for=anmerkungen>Anmerkungen</label></td>
              <td><input class=input name=anmerkungen type=text size=60 value=\"".$anmerkungen."\"></td></tr>  
              <tr><td colspan=2><p class=stylegrau>* = Alle Pflichfelder auszufüllen.</p> <br><br></td></tr>
              <tr><td>&nbsp;</td>
              <td><input type=\"submit\" name=\"submit\" id=\"submit\" onClick=\"return test()\" value=\"Anmelden\" class=\"button1\" /></td></tr>  
             </table>
            </form>
                ";  
        }
        // Alle eingaben werden darauf geprüft ob sie überhaupt gemacht wurden wurden sie nicht gemacht wird die Variable $fehler gesetzt oder eine weitere Fehlermeldung angehängt.
        function eingabe_check($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen)
            {
            if ($name == "") $fehler = $fehler." Nachname,";  
            if ($vorname == "") $fehler = $fehler." Vorname,";  
            if ($adresse == "") $fehler = $fehler." Adresse,";  
            if ($ort == "") $fehler = $fehler." PLZ & Ort";  
            if ($email == ""){  
                $fehler = $fehler." Emailadresse";  
            }
            else {
                if(strstr($email,"@") && strstr($email,".")){    # überprüfen der amiladresse. benötigt wird ein @ und ein .  
                }
                else {
                    $fehler = $fehler." und das Emailformat ist falsch.";  
                }
           }
          if ($fehler =="") return 1;   # gab es keinen Fehler bei der überpüfung geben wir 1 zurück  
                else{                   #ansonsten die Fehlermeldung
                    return "  
                            <div id=fehler><span class=stylered>FEHLER!</span> <br>Es fehlen noch folgende Angaben: <span class=stylered>".$fehler."</span></div>  
                            <br>
                            <br>
                  ";  
                    
                }     
        }
?>
            <br/>
            <br/>
            <br/>
            <div class="footer"><?php include ("site.footer.php") ;?></div>  
        </div>
        <div id="spatopre"></div>  
    <br/>
    <br/>
  </body>
</html>
Kommentar vom Moderator masterG am Jun 18, 2010 um 13:58:14 Uhr
Titel angepasst.

Content-Key: 145145

Url: https://administrator.de/contentid/145145

Printed on: April 20, 2024 at 04:04 o'clock

Member: RedEye
RedEye Jun 18, 2010 at 13:32:44 (UTC)
Goto Top
Hallo,

muss mich gleich mal entschuldigen aber der Code kommt ja direkt aus der Hölle face-smile Nicht böse gemeint.
Ernsthaft validiert und geprüft wird hier keine einzige Eingabe des Benutzers.
Ausserdem solltest Du keinen HTML-Code in Deine Funktionen einbauen, da ja das Prinzip von Funktionen (z.Bsp. Wiederverwendbarkeit) total umsonst ist.

Bevor man da rumschreibt würde ich vorschlagen das Du Dich entweder nochmals auf die Suche nach einem guten Tutorial machst oder Dich mal etwas genauer in PHP einarbeitest.

--
LG
RedEye
Member: masterG
masterG Jun 18, 2010 at 13:57:08 (UTC)
Goto Top
Tipp von mir: wenn du schaun willst ob das fehlt leer ist lös es doch so:
<?php
if(empty($_POST['feld']))  
         echo "feld ist leer";  
?>
Member: dog
dog Jun 18, 2010 at 19:45:45 (UTC)
Goto Top
Und jetzt schauen wir uns mal ein ganz einfaches Beispiel für 1 Feld an:

<?php

	//alles was aus richtung benutzer kommt und wieder ausgegeben werden soll, muss
	//erst durch diese Funktion um es sicher zu machen
	function hsp($str)
	{
		return htmlspecialchars($str, ENT_COMPAT, 'UTF-8');  
	}
	
	//nur ein kleines Beispiel!
	class MySQL {
		private $connection;
		
		public function __construct($host,$user,$pass,$db)
		{
			$con = @mysql_connect($host.':3306', $user, $pass);  
			if(!is_resource($con))
				throw new Exception(mysql_error(), mysql_errno());
			mysql_select_db($db, $con);
			$this->connection = $con;
		}
		
		public function esc($str)
		{
			return mysql_real_escape_string($str, $this->connection);
		}
		
		public function query($str)
		{
			return mysql_query($str, $this->connection);
		}
	}

	//diese variable will ich später benutzen, also stelle ich sicher, dass es sie gibt!
	$error = null;

	//der folgende Code wird nur ausgeführt, wenn das Formular wirklich abgesendet wurde
	if(isset($_POST['frm_sent'])) {  
		//ein try block läuft solange bis ein throw kommt und bricht dann an und springt
		//zum catch Block
		try {
			//empty ist keine funktion, sondern ein sprachkonstrukt. es stellt sicher, dass
			//es eine Variable wirklich gibt, und dass sie nicht leer ist
			if(empty($_POST['frm_name']))  
				throw new Exception('Bitte geben Sie einen Namen an!');  
			//jetzt entfernen wir unbedeutende Leerzeichen  "    Hans Wurst   " => "Hans Wurst" 
			$name = trim($_POST['frm_name']);  
			//und jetzt schauen wir, ob wir noch einen realistischen wert haben
			if(strlen($name) < 5)
				throw new Exception('Der eingegebene Name scheint zu kurz!');  
			//db verbindung aufbauen
			$dbc = new MySQL('localhost','ruth','12345','test');  
			//wert für die verarbeitung durch mysql sicher machen
			$name = $dbc->esc($name);
			//und einfügen
			$dbc->query(sprintf('INSERT INTO tbl1(`name`) VALUES("%s")',$name));  
			//und jetzt den benutzer mit einem erfolgshinweis woanders hin schicken
			header('Location: index.php?success=1');  
			//wichtig: seite beenden
			exit(0);
		} catch (Exception $e) {
			$error = $e->getMessage();
		}
	}

?>
<html>
	<body>
<?php if($error): ?>
		<div class="error"><?php echo hsp($error) ?></div>  
<?php endif; ?>
		<form action="" method="post">  
			Name: <input type="text" name="frm_name" value="<?php echo hsp(@$_POST['frm_name']) ?>"/><br/>  
			<input type="submit" name="frm_sent" value="Senden"/>  
		</form>
	</body>
</html>

  • Niemals einfach so $PHP_SELF benutzen. Das ist kein Serverwert sondern eine Benutzereingabe und muss auch genauso behandelt werden. Im Zweifel ist es also völlig nutzlos.
  • Niemals den Code der die Eingaben prüft und den Code, der es in die DB schreibt auf 2 Dateien aufteilen und durch den Browser schleusen - das macht ja jegliche Validierung hinfällig, weil ich als User ja nach der Validierung die Daten wieder ändern kann - der Punkt ist wirklich wichtig. Wenn du den nicht verstehst frag bitte nochmal.
  • Niemals einfach so Benutzereingaben wieder ausgeben, wie z.B. bei size=60 value=\"".$name."\"></td></tr>
  • Niemals einfach so annehmen, dass es eine Variable gibt (wie es in diesem Code gemacht wird). Für alle Variablen, die man benutzt muss man auch sicherstellen, dass sie vorhanden sind.
  • Niemals register_globals benutzen (wie in dem Beispiel getan)

Das ist aber nur die Spitze des Eisbergs face-smile
Member: Saneke
Saneke Jun 19, 2010 at 10:47:03 (UTC)
Goto Top
Hallo Zusammen

Was sicher auch nicht fehlen darf sind solche Sachen wie:

htmlspecialchars — Wandelt Sonderzeichen in HTML-Codes um

oder

htmlentities — Wandelt alle geeigneten Zeichen in entsprechende HTML-Codes um

Formulare ohne solche Spielereien gelten als Sicherheitsrisiko und deshalb umbedingt anwenden.
Mitglied: 88871
88871 Jun 19, 2010 at 11:19:33 (UTC)
Goto Top
hoied. ja jetzt mit euren lösungsvorschlägen ist mir einiges klarer.....
in meinem zweiten file wo ich INSERTe tue ich jede eingabe noch "escapen" aber anscheinend nutzt mein aufbau also wenig face-smile dachte es waere so relativ sicher.......wenn ich $_POST verwende und einfach escape....

merci fuer die tipps. werde es auf jedenfall so anwenden. 1file form & function und die weiterleitung fuer das feedback das alles io ist, ist dann erst nach einem sucess!