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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.