| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Php, Formularüberprüfung
Diskussion: Php, Formularüberprüfung im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige
Hallo,
ich habe ein Formular und eine Funktion, die die eingegebenen Daten auf vollständigkeit überprüft.
Doch es tut nicht ...
 |
16.10.06, 23:33
|
#1 (permalink)
|
Registriert seit: 03.05.06 Likes: 0 | Php, Formularüberprüfung Anzeige Hallo,
ich habe ein Formular und eine Funktion, die die eingegebenen Daten auf vollständigkeit überprüft.
Doch es tut nicht so, wie ich will :)
Hier mal der Hauptcode: PHP-Code: <? include ("funktionen/proove.fun.php"); include ("funktionen/datum.fun.php"); include ("funktionen/email.fun.php"); @mysql_connect("localhost","root","") or die("Verbindung zu SQL gescheitert..."); @mysql_select_db("test noten") or die("Verbindung zur Datenbank gescheitert..."); ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <font sans-serif="" face="Arial,"><font size="2">
</font></font> <p>
<table style="border-collapse: collapse;" border="0" bordercolor="#111111" cellpadding="0" cellspacing="0">
<tbody> <tr>
<td>Username:</td>
<td> <input name="username" size="20" type="text"><br>
</td>
</tr>
<tr>
<td>E-:</td>
<td> <input name="email" size="20" type="text"><br>
</td>
</tr>
<tr>
<td>Passwort:</td>
<td> <input name="passwort" size="20" type="password"><br>
</td>
</tr>
<tr>
<td>Pw wiederholen:</td>
<td> <input name="passwortwiederholen" size="20" type="password"> </td>
</tr>
</tbody> </table>
<font sans-serif="" face="Arial,"><font size="2"><br>
<input value="Registrieren" style="color: rgb(0, 0, 0); background-color: rgb(187, 187, 187);" type="submit"> <br>
<br>
<br>
</font></font></p> <p><font sans-serif="" face="Arial,"><font size="2"><font color="#ffffff" face="Arial"><span style="background-color: rgb(0, 0, 255);"> <font size="4">Wichtig: </font> </span></font></font></font></p>
<ul>
<font sans-serif="" face="Arial,"><font size="2"> <li><font face="Arial">Passwort muss mindestens 7 Zeichen lang sein</font></li>
<li><font face="Arial">E-Mail Adresse muss '@' enthalten und mindestens 5 Zeichen lang sein</font></li>
<li><font face="Arial">Username muss mindestens 5 Zeichen lang sein</font></li>
</font></font> </ul>
</form>
<? $error; if (isset($_POST['username'])) { proove($_POST['username'], $_POST['email'], $_POST['passwort'], $_POST['passwortwiederholen'], $error); } if ($error == 0 && isset($_POST['username'])) {
$pwvers = md5($_POST['passwort']); $aktiviert = 0; //in table, wenn aktiviert 1, sonst 0 $datum = date("j.n.Y"); $aktivierungscode = rand(1000000, 9999999);
email($_POST['username'], $_POST['email'], $aktivierungscode);
echo '<script language = "JavaScript"> alert ("ok"); </script>';
}
?> Und hier die Funktion proove.fun.php PHP-Code: <?php
function proove() { $error=0; $checkuser = "Select UserName FROM users WHERE UserName = '".$_POST['username']."'"; $userresult = mysql_query($checkuser) OR die(mysql_error()); $checkemail = "Select UserMail FROM users WHERE UserMail = '".$_POST['email']."'"; $emailresult = mysql_query($checkemail) OR die(mysql_error());
if (mysql_num_rows($userresult) != 0) {echo "Dieser Username ist schon besetzt, sorry!!!"; $error=1; } if (mysql_num_rows($emailresult) != 0) {echo "Diese Email-Adresse wurde schon registriert. Pro Email-Adresse ist nur eine Registrierung möglich."; $error=1; }
if ((strlen($_POST['username']) < 5) && ($_POST['username'] != "")) {echo '<ul><li><font face="Arial">Username zu kurz.</font></li> </ul>'; $error=1; } if ((strlen($_POST['email']) <5) && ($_POST['email'] != "")) {echo '<ul><li><font face="Arial">Email ungültig.</font></li> </ul>'; $error=1; } if((strlen($_POST['passwort']) <7) && ($_POST['passwort'] != "")) {echo '<ul><li><font face="Arial">Passwort zu kurz.</font></li> </ul>'; $error=1; } if($_POST['passwort'] != $_POST['passwortwiederholen']) {echo '<ul><li><font face="Arial">Die beiden Passwörter stimmen nicht überein.</font></li> </ul>'; $error=1; } if(($_POST['username'] == "") || ($_POST['email'] == "") || ($_POST['passwort'] == "") || ($_POST['passwortwiederholen'] == "")) {echo '<ul><li><font face="Arial">Es sind nicht alle Felder ausgefüllt.</font></li> </ul>'; $error=1; } echo "$error in proove"; return ($error); }//funktion ende ?> Funktion proove gibt den $error-wert zurück und wenn der 0 ist, soll weitergefahren werden, ansonsten soll abgebrochen werden. Ich finde den Fehler nicht, hoffe ihr könnt das besser :)
Jetzt ist es so, dass er wenn alles richtig ist die Meldung "ok" ausgibt aber eben auch wenns falsch ist. Muss ein simpler Fehler sein, aber ich find ihn nicht. |
| |
17.10.06, 01:44
|
#2 (permalink)
|
Registriert seit: 15.01.05 Likes: 0 | Hi.
aslo erstmal uebergibst du in Zeile 102 argumente an proove die gar nicht genutzt werden.
Zu dem ist Code: $checkuser = "Select UserName FROM users WHERE UserName = '".$_POST['username']."'"; boese  (Sqlinjection & Co,)
Dann gibst du error per retrun zurueck welchen du aber nicht abfragst. $error wurde lokal in der funktion deklariert und ist global nicht abrufbar => default value = 0
Das mit dem Return ist schon der richtige ansatz, nur must du dann was wie $error=proove(...); machen.
Irgentwie sieht das aus wie aus verschiedenen quellen zusammen kopiert. |
| | | |
| | HaBOT
| - Anzeige - |
| |
17.10.06, 01:56
|
#3 (permalink)
| | Moderator
Registriert seit: 14.02.06 Likes: 21 | Die Parameter an prove() (eigentlich nur mit einem o *g) kannst du dir eigentlich allesamt sparen, denn $_POST ist ein superglobales Array und $error brauchst du außerhalb der Funktion nicht - und wenn doch, dann müsstest du das als Referenz übergeben, und nicht als Wert.
Die schlussendliche Abfrage kannst du kurz und knackig mit PHP-Code: if ( prove() ) { ... }
machen, dann würde ich aber für $error nicht 0 als Default setzen sondern false (und im Fall korrekter Eingaben true zurückgeben).
Außerdem solltest du, wie Thrall schon schrieb, die Werte vorher auf sicherheitskritische Eingaben prüfen, im einfachsten Fall, indem du ein addslashes() drüber jagst.
__________________ "Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better." - Samuel Beckett JS BB LX UP |
| |
17.10.06, 13:08
|
#4 (permalink)
|
Registriert seit: 19.09.06 Likes: 0 | Vielleicht auch noch htmlspecialchars(), für den fall dass der benutzername irgendwo angezeigt werden soll (hilft gegen mutwillige veränderung der seite über Javascript)
#Lord |
| |
17.10.06, 14:02
|
#5 (permalink)
| Themenstarter
Registriert seit: 03.05.06 Likes: 0 | @Lord
Das mach ich schon noch aber ich will zuerst, dass das ganze läuft 
@LX
Danke, ich hab von den Variablen (also Gültigkeitsbereichen) in PHP noch nicht soviel Ahnung, bin Anfänger 
@Thrall
Danke, 90% sind selber geschrieben, der Rest angepasst. Werds nochmal versuchen und dann wieder schreiben wenns nich eh geklappt hat.
Danke für die Hilfe |
| |  | | |
| | | - Anzeige - |
| | [HaBo]
» Web, Network & Multimedia Palace
» (Web-) Design und webbasierte Sprachen
»
Php, Formularüberprüfung
| Themen-Optionen | | | | Ansicht | Linear-Darstellung |
Forumregeln
| Es ist Ihnen nicht erlaubt, neue Themen zu verfassen. Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten. Es ist Ihnen nicht erlaubt, Anhänge hochzuladen. Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten. HTML-Code ist aus. | | |
|