mikrocontroller.net

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


Autor: Michael Loe (tempusertempuser)
Datum:

Bewertung
0 lesenswert
nicht 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
If((empty(username) or empty(password) or !empty(userid) )or !(empty(username) or !empty(password) or empty(userid)))
{ 
FEHLER
}
ELSE
{
WEITER IM CODE
}

Ich land aber immer im if zweig d.h. irgendwo stimmt die Logik nicht, 
Bliss wo????


Danke :)

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael Loe (tempusertempuser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab es so gemacht
 


 if (                                                                          
                        (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']))
                ) {
  FEHLER
} Else
{Code}


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

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael Loe (tempusertempuser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie steh ich Grad aufm schlauch komplett :(
 


 if (                                                                          
                        !(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']))
                ) {
  FEHLER
} Else
{Code}


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

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
if ( empty(userid) && (!empty(passwort) || (!empty(username) ) 
{
   //Fehler 1
   return;
(                                                                          

if ( !empty(userid) && (empty(passwort) || (empty(username) ) 
{
   //Fehler 2
   return;
(                                                                          

// code wenn erfolgreich


Autor: H. E. (hobby_elektroniker)
Datum:

Bewertung
0 lesenswert
nicht 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:

if ( !(!empty($_POST['f']['password']) && ( !empty($_POST['f']['username']) || !empty($_POST['f']['userid'])))) {
  echo "FEHLER";
}
else {
  echo "Alles gut!";
}

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:
if(
!( ( !empty( $_POST['f']['password'] ) && !empty( $_POST['f']['username'] ) && empty( $_POST['f']['userid'] ) ) ||
  ( empty( $_POST['f']['password'] ) && empty( $_POST['f']['username'] ) && !empty( $_POST['f']['userid'] ) ) )
) {
  echo "Fehler";
}
else {
  echo "Alles gut";
}

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

: Bearbeitet durch User
Autor: Abradolf Lincler (Firma: Ricksy Business) (abradolf_lincler) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gemäß deinen Anforderungen (Pseudocode):
areCredentialsValid = !empty(username) && !empty(password) && empty(user_id)
isUserIdValid = empty(username) && empty(password) && !empty(user_id)

if !areCredentialsValid || !isUserIdValid
  ERROR
else
  CODE
end

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.