PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : if funzt irgendwie nicht


rörich
27.05.2009, 20:59:30
Was ist an diesem Code falsch? Ich denke eigentlich er ist richtig, aber man übersieht ja auch ab und zu mal was.

Zum Code: Das Verzeichnis, die kopie und die Datein sollen erst dann abgespeichert werden wenn wirklich alles im Formular eingegeben wurde, sobald was fehlt soll er einfach nichts machen.

<?php
include("config.php");
$username=$_POST['username'];
$persken=$_POST['persken'];
$password=$_POST['password'];
$password2=$_POST['password2'];
$email=$_POST['email'];
$agb=$_POST['agb'];

if ($username == "" || $persken == "" || $password == "" || $password2 == "" || $email == "" || $agb == "")

{
mkdir("user/$persken", 0777);

copy("user/vorlage/index.php","user/$username.php");
copy("user/vorlage/index2.php","user/$persken/index.php");
copy("user/vorlage/bearb.php","user/$persken/bearb.php");

$commufile=fopen("commu.htm","a+");
fputs($commufile,"<a href=\"user/$username.php\">$username</a><br>");
fclose($commufile);
}


?>

mfg rörich

ksticker
27.05.2009, 22:25:48
Hy rörich,

Deine If kann nicht funktionieren, da die Bedingung nur erfüllt ist, wenn eines der Felder leer ist, wenn dann müsstest Du die Bedingung schon so schreiben:


if ($username != "" && $persken != "" && $password != "" && $password2 != "" && $email != "" && $agb != "")



Diese Variante ist aber SEHR unsauber.

Bitte verwende zur Prüfung statt == "" lieber empty, in deinem Fall müsstest Du es dann aber so schreiben:


if (!empty($username) && !empty($persken) && !empty($password) && !empty($password2) && !empty($email) && !empty($agb))



Aber auch diese Variante ist nicht sehr sauber, besser wäre, wenn Du die Pflichfelder mit einem führenden Unterstrich oder ähnlichem Kennzeichnest. Und dann die Daten wie folgt abfragst:


$saveData = $_POST;
$error = false;
foreach($saveData as $saveFieldName => $saveFieldValue)
{
if(preg_match('/^_/',$saveField))
{
if(empty($saveFieldValue))
{
$error .= $saveFieldName.',';
}
}
}
if(!$error)
{
// Kein Fehler
}else{
$error = rtrim($error,','); //Entfernung des letzten kommas
//Fehler in:
}


Das Script habe ich aber nicht extra getestet!!!
Wenn Du noch Fragen hast oder das Script nicht funktionieren sollte, dann einfach hier posen.

rörich
27.05.2009, 23:43:29
Vielen Dank, jetzt funktioniert es endlich.

mfg Rörich

cortex
28.05.2009, 10:15:35
$saveData = $_POST;
$error = false;
foreach($saveData as $saveFieldName => $saveFieldValue)
{
if(preg_match('/^_/',$saveField))
{
if(empty($saveFieldValue))
{
$error .= $saveFieldName.',';
}
}
}



1. $saveField wurde nicht definiert; es sollte sicher $saveFieldName heissen ?
2. benutze strstr( ) oder strpos( ) - preg_match ist hier unangebracht

cx

schrubba
28.05.2009, 13:26:03
Hi,


Bitte verwende zur Prüfung statt == "" lieber empty


Kommt ganz auf das Einsatzgebiet an, denn für empty ist die "0" auch leer. An Stellen wo ich auch die "0" mit in die Prüfung einbeziehen muss, verwende ich ebenfalls == ""..


Gruß
schrubba

Chance
28.05.2009, 18:33:05
Mir empty habe ich schon merkwürdige Effekte erlebt... im zusammenhang mit der 0 ^^ . Is laber lange her...

Ich setzte mehr auf isset === false .

ksticker
28.05.2009, 18:51:53
cortex du hast natürlich recht, ich hab die Variable falsch benannt.

Und das mit dem empty, joah wenn null drin steht wird es auch als falsch erkannt.
Sorry hatte ich in dem Fall nicht bedacht.