88871
18.06.2010, aktualisiert um 15:58:14 Uhr
8544
5
0
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.....
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.
dann hier das script
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.....
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> Teilnehmer</td>
<td class=bodyright>...</td></tr>
<tr><td class=bodyleft><input type=radio name=anmeldetyp value=studenten> 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> </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>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator masterG am 18.06.2010 um 15:58:14 Uhr
Titel angepasst.
Content-ID: 145145
Url: https://administrator.de/contentid/145145
Ausgedruckt am: 26.11.2024 um 21:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo,
muss mich gleich mal entschuldigen aber der Code kommt ja direkt aus der Hölle 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
muss mich gleich mal entschuldigen aber der Code kommt ja direkt aus der Hölle 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
Und jetzt schauen wir uns mal ein ganz einfaches Beispiel für 1 Feld an:
Das ist aber nur die Spitze des Eisbergs
<?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
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.
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.