Php, Formularüberprüfung

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:
<?
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:
<?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.
 
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.
 
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:
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.
 
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
 
@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 :)
 
Zurück
Oben