Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
Kommentar vom Moderator masterG am 18.06.2010 um 15:58:14 Uhr
Titel angepasst.
GELÖST

PHP - Formularfelder validieren und absenden.

Frage Entwicklung PHP

Mitglied: dark3zz

dark3zz (Level 1) - Jetzt verbinden

18.06.2010, aktualisiert 15:58 Uhr, 5975 Aufrufe, 5 Kommentare

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.

01.
die meta tags und header bis zum body
dann hier das script

01.
<?php 
02.
        if ($action=="check") {  
03.
                if(eingabe_check($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen)==1) {   
04.
                echo "Sie haben folgende Informationen eingetragen:<br><hr><br>"
05.
                echo "Anmeldetyp: ".$anmeldetyp."<br>"
06.
                echo "Firma: ".$firma."<br>"
07.
                echo "Name: ".$name."<br>"
08.
                echo "Vorname: ".$vorname."<br>"
09.
                echo "Titel: ".$titel."<br>"
10.
                echo "Adresse: ".$adresse."<br>"
11.
                echo "Ort: ".$ort."<br>"
12.
                echo "Land: ".$land."<br>"
13.
                echo "E-mail: ".$email."<br>"
14.
                echo "Webseite: ".$webseite."<br>"
15.
                echo "Telefon: ".$telefon."<br>"
16.
                echo "Fax: ".$fax."<br>"
17.
                echo "Anmerkungen: ".$anmerkungen."<br>"
18.
                echo "<br><hr><br>"
19.
                echo "hier gehts zum <a href=\"teilnehmer_anmeldung_action.php\">ACTIONSCRIPT</a> welches die $ variablen in die mySQL schreibt. ."
20.
21.
            else
22.
                echo eingabe_check($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen);     
23.
                formular_ausgabe($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen);       
24.
25.
26.
        else
27.
            formular_ausgabe($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen);           
28.
29.
 
30.
        function formular_ausgabe($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen
31.
        {  
32.
            global $PHP_SELF;                          
33.
            echo
34.
 
35.
            <form action=\"".$PHP_SELF."?action=check\" method=\"post\" name=\"anmeldung\" id=\"teilnehmeranmeldung\" enctype=\"multipart/form-data\"
36.
             <table id=table1> 
37.
             <thead> 
38.
              <tr><td class=head colspan=2><span class=style1>Anmeldung</span></td></tr> 
39.
             </thead> 
40.
              <tr><td class=bodyleft><input type=radio name=anmeldetyp value=teilnehmer checked=checked>&nbsp;Teilnehmer</td> 
41.
              <td class=bodyright>...</td></tr> 
42.
              <tr><td class=bodyleft><input type=radio name=anmeldetyp value=studenten>&nbsp;Studenten*</td> 
43.
             </table> 
44.
               <br> 
45.
 
46.
             <table id=table1> 
47.
             <thead> 
48.
              <tr><td width=140px class=bodyleft><label for=firma>Firma</label></td> 
49.
              <td><input class=input name=firma type=text size=60 value=\"".$firma."\"></td></tr> 
50.
             </thead> 
51.
              <tr><td class=bodyleft><label for=name>Nachname*</label></td> 
52.
              <td><input class=input name=name type=text size=60 value=\"".$name."\"></td></tr> 
53.
              <tr><td class=bodyleft><label for=vorname>Vorname*</label></td> 
54.
              <td><input class=input name=vorname type=text size=60 value=\"".$vorname."\"></td></tr> 
55.
              <tr><td class=bodyleft><label for=titel>Anrede/Titel</label></td> 
56.
              <td><input class=input name=titel type=text size=60 value=\"".$titel."\"></td></tr> 
57.
              <tr><td class=bodyleft><label for=adresse>Adresse*</label></td> 
58.
              <td><input class=input name=adresse type=text size=60 value=\"".$adresse."\"></td></tr> 
59.
              <tr><td class=bodyleft><label for=ort>PLZ/Ort*</label></td> 
60.
              <td><input class=input name=ort type=text size=60 value=\"".$ort."\"></td></tr> 
61.
              <tr><td class=bodyleft><label for=land>Land</label></td> 
62.
              <td><input class=input name=land type=text size=60 value=\"".$land."\"></td></tr> 
63.
              <tr><td class=bodyleft><label for=email>E-Mail*</label></td> 
64.
              <td><input class=input name=email type=text size=60 value=\"".$email."\"></td></tr> 
65.
              <tr><td class=bodyleft><label for=webseite>Webseite</label></td> 
66.
              <td><input class=input name=webseite type=text size=60 value=www 
67.
                onFocus='if(this.value==\"www\") this.value=\"\";' onblur='if(this.value==\"\")this.value=\"www\";'/></td></tr> 
68.
              <tr><td class=bodyleft><label for=telefon>Telefon</label></td> 
69.
              <td><input class=input name=telefon type=text size=60 value=\"".$telefon."\"></td></tr> 
70.
              <tr><td class=bodyleft><label for=fax>Fax</label></td> 
71.
              <td><input class=input name=fax type=text size=60 value=\"".$fax."\"></td></tr> 
72.
              <tr><td class=bodyleft><label for=anmerkungen>Anmerkungen</label></td> 
73.
              <td><input class=input name=anmerkungen type=text size=60 value=\"".$anmerkungen."\"></td></tr> 
74.
              <tr><td colspan=2><p class=stylegrau>* = Alle Pflichfelder auszufüllen.</p> <br><br></td></tr> 
75.
              <tr><td>&nbsp;</td> 
76.
              <td><input type=\"submit\" name=\"submit\" id=\"submit\" onClick=\"return test()\" value=\"Anmelden\" class=\"button1\" /></td></tr> 
77.
             </table> 
78.
            </form> 
79.
                "; 
80.
81.
        // 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. 
82.
        function eingabe_check($anmeldetyp,$firma,$name,$vorname,$titel,$adresse,$ort,$land,$email,$webseite,$telefon,$fax,$anmerkungen
83.
84.
            if ($name == "") $fehler = $fehler." Nachname,"
85.
            if ($vorname == "") $fehler = $fehler." Vorname,"
86.
            if ($adresse == "") $fehler = $fehler." Adresse,"
87.
            if ($ort == "") $fehler = $fehler." PLZ & Ort"
88.
            if ($email == ""){ 
89.
                $fehler = $fehler." Emailadresse"
90.
91.
            else
92.
                if(strstr($email,"@") && strstr($email,".")){    # überprüfen der amiladresse. benötigt wird ein @ und ein . 
93.
94.
                else
95.
                    $fehler = $fehler." und das Emailformat ist falsch."
96.
97.
98.
          if ($fehler =="") return 1;   # gab es keinen Fehler bei der überpüfung geben wir 1 zurück 
99.
                else{                   #ansonsten die Fehlermeldung 
100.
                    return
101.
                            <div id=fehler><span class=stylered>FEHLER!</span> <br>Es fehlen noch folgende Angaben: <span class=stylered>".$fehler."</span></div> 
102.
                            <br> 
103.
                            <br> 
104.
                  "; 
105.
                     
106.
                }      
107.
108.
?>
01.
            <br/> 
02.
            <br/> 
03.
            <br/> 
04.
            <div class="footer"><?php include ("site.footer.php") ;?></div> 
05.
        </div> 
06.
        <div id="spatopre"></div> 
07.
    <br/> 
08.
    <br/> 
09.
  </body> 
10.
</html>
Mitglied: RedEye
18.06.2010 um 15:32 Uhr
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
Bitte warten ..
Mitglied: masterG
18.06.2010 um 15:57 Uhr
Tipp von mir: wenn du schaun willst ob das fehlt leer ist lös es doch so:
01.
<?php 
02.
if(empty($_POST['feld'])) 
03.
         echo "feld ist leer"
04.
?>
Bitte warten ..
Mitglied: dog
18.06.2010 um 21:45 Uhr
Und jetzt schauen wir uns mal ein ganz einfaches Beispiel für 1 Feld an:

01.
<?php 
02.
 
03.
	//alles was aus richtung benutzer kommt und wieder ausgegeben werden soll, muss 
04.
	//erst durch diese Funktion um es sicher zu machen 
05.
	function hsp($str
06.
07.
		return htmlspecialchars($str, ENT_COMPAT, 'UTF-8'); 
08.
09.
	 
10.
	//nur ein kleines Beispiel! 
11.
	class MySQL { 
12.
		private $connection
13.
		 
14.
		public function __construct($host,$user,$pass,$db
15.
16.
			$con = @mysql_connect($host.':3306', $user, $pass); 
17.
			if(!is_resource($con)) 
18.
				throw new Exception(mysql_error(), mysql_errno()); 
19.
			mysql_select_db($db, $con); 
20.
			$this->connection = $con
21.
22.
		 
23.
		public function esc($str
24.
25.
			return mysql_real_escape_string($str, $this->connection); 
26.
27.
		 
28.
		public function query($str
29.
30.
			return mysql_query($str, $this->connection); 
31.
32.
33.
 
34.
	//diese variable will ich später benutzen, also stelle ich sicher, dass es sie gibt! 
35.
	$error = null; 
36.
 
37.
	//der folgende Code wird nur ausgeführt, wenn das Formular wirklich abgesendet wurde 
38.
	if(isset($_POST['frm_sent'])) { 
39.
		//ein try block läuft solange bis ein throw kommt und bricht dann an und springt 
40.
		//zum catch Block 
41.
		try { 
42.
			//empty ist keine funktion, sondern ein sprachkonstrukt. es stellt sicher, dass 
43.
			//es eine Variable wirklich gibt, und dass sie nicht leer ist 
44.
			if(empty($_POST['frm_name'])) 
45.
				throw new Exception('Bitte geben Sie einen Namen an!'); 
46.
			//jetzt entfernen wir unbedeutende Leerzeichen  "    Hans Wurst   " => "Hans Wurst" 
47.
			$name = trim($_POST['frm_name']); 
48.
			//und jetzt schauen wir, ob wir noch einen realistischen wert haben 
49.
			if(strlen($name) < 5) 
50.
				throw new Exception('Der eingegebene Name scheint zu kurz!'); 
51.
			//db verbindung aufbauen 
52.
			$dbc = new MySQL('localhost','ruth','12345','test'); 
53.
			//wert für die verarbeitung durch mysql sicher machen 
54.
			$name = $dbc->esc($name); 
55.
			//und einfügen 
56.
			$dbc->query(sprintf('INSERT INTO tbl1(`name`) VALUES("%s")',$name)); 
57.
			//und jetzt den benutzer mit einem erfolgshinweis woanders hin schicken 
58.
			header('Location: index.php?success=1'); 
59.
			//wichtig: seite beenden 
60.
			exit(0); 
61.
		} catch (Exception $e) { 
62.
			$error = $e->getMessage(); 
63.
64.
65.
 
66.
?> 
67.
<html> 
68.
	<body> 
69.
<?php if($error): ?> 
70.
		<div class="error"><?php echo hsp($error) ?></div> 
71.
<?php endif; ?> 
72.
		<form action="" method="post"
73.
			Name: <input type="text" name="frm_name" value="<?php echo hsp(@$_POST['frm_name']) ?>"/><br/> 
74.
			<input type="submit" name="frm_sent" value="Senden"/> 
75.
		</form> 
76.
	</body> 
77.
</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
Bitte warten ..
Mitglied: Saneke
19.06.2010 um 12:47 Uhr
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.
Bitte warten ..
Mitglied: dark3zz
19.06.2010 um 13:19 Uhr
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 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!
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Word Textmarke in Formularfeld schreiben
Frage von hausensMicrosoft Office7 Kommentare

Hallo, Wir haben ein CRM über welches wir auch Nachrichten versenden. Über die Textmarken kann man auf Daten wie ...

JavaScript
Einzelne Formularfelder in PDF sperren
gelöst Frage von Casiopaya80JavaScript6 Kommentare

Hallo, ich habe ein PDF Formular gebaut (Acrobat XI Pro, Version 11.0.07.79) und dieses Formular muss 2 verschiedenen Kollegen ...

JavaScript
HTML-Javascript - Auslesen von Formularfeldern
gelöst Frage von internet2107JavaScript1 Kommentar

Ich habe folgendes Problem. Ich habe ein HTML/Javascript Formular vorliegen, in dem in diversen <input> Feldern unter value="" sporadisch ...

Microsoft Office
Nur Formularfelder drucken nach Datenimport
gelöst Frage von NapumukMicrosoft Office2 Kommentare

Hallo, ich habe mir nach einer Anleitung eine eigene Word Vorlage die beim Öffnen Daten aus Excel einfügt erstellt, ...

Neue Wissensbeiträge
Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 1 TagMicrosoft Office9 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 1 TagSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Microsoft Office

Outlook 2016 - Beim Weiterleiten keine PDF Anhänge mehr - KB4011626 entfernen

Erfahrungsbericht von Deepsys vor 1 TagMicrosoft Office3 Kommentare

Wenn ihr feststellt das ihr beim Weiterleiten von E-Mails keine PDF Anhänge mehr versendent, dann dankt Microsoft. Diese tolle ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...