Hilfe bei einem Logik Fehler in php

OP #5034060
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 :)
OP #5034085
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???
OP #5034112
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???
Gast #5034125
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
#5034129
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.
Gast #5034207
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren