Forum: PC-Programmierung Hilfe bei einem Logik Fehler in php


von Martin L. (tempusertempuser)


Lesenswert?

Hallo,
Ich hab ein Formular mit 3 Eingabefeldern
     -username
     -passwort
     -userid

Nach absenden soll überprüft werden ob entweder
    username ausgefüllt und Passwort ausgefullt und userid leer ist
Oder
   Username leer und Passwort leer und userid ausgefüllt wurde

Meine Anfrage lautet
1
If((empty(username) or empty(password) or !empty(userid) )or !(empty(username) or !empty(password) or empty(userid)))
2
{ 
3
FEHLER
4
}
5
ELSE
6
{
7
WEITER IM CODE
8
}
Ich land aber immer im if zweig d.h. irgendwo stimmt die Logik nicht, 
Bliss wo????


Danke :)

von Peter II (Gast)


Lesenswert?

Michael L. schrieb:
> irgendwo stimmt die Logik nicht,

wenn nur oder vorhanden ist, kann das nichts werden.

> username ausgefüllt und Passwort ausgefullt und userid leer ist

hier steht doch auch ein UND - setze es doch einfach im code genauso um.

von Martin L. (tempusertempuser)


Lesenswert?

Hab es so gemacht
1
 
2
3
4
 if (                                                                          
5
                        (empty($_POST['f']['username']) and empty($_POST['f']['password']) and  !empty($_POST['f']['userid'])) ||  (!empty($_POST['f']['username']) and !empty($_POST['f']['password']) and empty($_POST['f']['userid']))
6
                ) {
7
  FEHLER
8
} Else
9
{Code}

Ich lande weiterhin im if zweig somit Fehler wird angezeigt???

von Peter II (Gast)


Lesenswert?

Michael L. schrieb:
> Ich lande weiterhin im if zweig somit Fehler wird angezeigt???

ja, weil du mit dem IF den gut-Fall ermittelst. Tausche einfach Fehler 
und code aus oder negiere alles.

von Martin L. (tempusertempuser)


Lesenswert?

Irgendwie steh ich Grad aufm schlauch komplett :(
1
 
2
3
4
 if (                                                                          
5
                        !(empty($_POST['f']['username']) and empty($_POST['f']['password']) and  !empty($_POST['f']['userid'])) ||  !(!empty($_POST['f']['username']) and !empty($_POST['f']['password']) and empty($_POST['f']['userid']))
6
                ) {
7
  FEHLER
8
} Else
9
{Code}

Ich lande weiterhin im if zweig somit Fehler wird angezeigt???

von Peter II (Gast)


Lesenswert?

Michael L. schrieb:
> Irgendwie steh ich Grad aufm schlauch komplett :(

dann mach dir das leben einfach und schreibe es in getrennten Zeilen. 
Wenn du es jetzt nicht hinbekommt, wirst du es auch nie warten können.
1
if ( empty(userid) && (!empty(passwort) || (!empty(username) ) 
2
{
3
   //Fehler 1
4
   return;
5
(                                                                          
6
7
if ( !empty(userid) && (empty(passwort) || (empty(username) ) 
8
{
9
   //Fehler 2
10
   return;
11
(                                                                          
12
13
// code wenn erfolgreich

von H. E. (hobby_elektroniker)


Lesenswert?

Warum so kompliziert? Weil der Username oder die ID optional aber eines 
davon im Zusammenhang mit dem Passwort erforderlich?

Die kürzeste komprimierteste Schreibweise sähe so aus:
1
if ( !(!empty($_POST['f']['password']) && ( !empty($_POST['f']['username']) || !empty($_POST['f']['userid'])))) {
2
  echo "FEHLER";
3
}
4
else {
5
  echo "Alles gut!";
6
}

Nachteil: Schlecht(er) lesbar bzw. nachvollziehbar.

Ggf. kann man den Else-Teil auch ganz weg lassen, je nachdem wie man den 
Code einsetzt.

Alternativ empfehle ich dir, die Bedingungen in Variablen zu "stückeln" 
und dann lesbarer in den If-Teil zu schreiben. Dann müsste es auch nicht 
so stark komprimiert werden. U.u. kannst du dann die Negation auch 
weglassen.

Das ist vermutlich das, was du wahrscheinlich willst.

Was du geforderst hast:
1
if(
2
!( ( !empty( $_POST['f']['password'] ) && !empty( $_POST['f']['username'] ) && empty( $_POST['f']['userid'] ) ) ||
3
  ( empty( $_POST['f']['password'] ) && empty( $_POST['f']['username'] ) && !empty( $_POST['f']['userid'] ) ) )
4
) {
5
  echo "Fehler";
6
}
7
else {
8
  echo "Alles gut";
9
}

Du könntest empty($bla) jeweils in Variablen als boolischen Wert 
speichern und dann einzeln einsetzen.

: Bearbeitet durch User
von Cyblord -. (Gast)


Lesenswert?

Gemäß deinen Anforderungen (Pseudocode):
1
areCredentialsValid = !empty(username) && !empty(password) && empty(user_id)
2
isUserIdValid = empty(username) && empty(password) && !empty(user_id)
3
4
if !areCredentialsValid || !isUserIdValid
5
  ERROR
6
else
7
  CODE
8
end

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.