if Anweisung funktioniert nicht richtig

Webmensch

Grünschnabel
Hey Leute,
kann mir jemand von euch sagen warum diese

PHP:
if ($artwz == '' or $artwz == 'MEISTER' or $artwz == 'SINTER' or $artwz != 'DIAROLL' or $typ != 'EINZEL' ) {
    echo 'Werkzeugbegleitblatt f&uumlr diese Werkzeugart nicht unterst&uumltzt';
}
else{
//hier sollte er dann ein Script ausführen
}

if-Anweisung nicht funktioniert bzw. falsch funktioniert?
Sie gibt mir immer "Werkzeugbegleitblatt f&uumlr diese Werkzeugart nicht unterst&uumltzt" aus, auch wenn $artwz den Wert 'DIAROLL' hat

EDIT:
Ich glaube ich konnte den Fehler genauer eingrenzen, es liegt glaube ich nicht an der if-Anweisung, sondern an der MYSQL Datenbankabfrage. Ich glaube ich bekomme hier schon für artwz keinen Wert.

SQL:
$abfrage = "SELECT e.kunde, e.matnr , e.sernr , e.schfile, e.werkstnr, e.kdmat, e.IDTXT, e.ARTWZ , e.TYP FROM equi e WHERE e.sernr = '$test' ORDER BY sernr DESC LIMIT 1 ";
$ergebnis = mysql_query($abfrage) OR die("Error: $abfrage <br>".mysql_error());
$daten = mysql_fetch_array($ergebnis, MYSQL_ASSOC);
$sernr = $daten['sernr'] ;
$schfile = $daten['schfile'];
$matnr = $daten['matnr'];
$bild = $daten['IDTXT'];
$artwz = $daten['ARTWZ'];
$typ = $daten['TYP'];

Thema kann geschlossen werden, ich hatte einen Buchstabendreher in meiner MYSQL-Abfrage.
Manchmal sieht man den Wald vor lauter Bäumen nicht ...
 
Zuletzt bearbeitet:
Auch wenn du dein Problem bereits selbst behoben hast: Diese Art von Abfrage kann man eleganter lösen. ZB. mit switch-case statt if:

PHP:
switch ($artwz) {
  case '':
  case 'MEISTER':
  case 'SINTER':
  case 'DIAROLL':
  case 'EINZEL':
    // hier Script ausführen
  break;

  default:
    echo'Werkzeugbegleitblatt f&uumlr diese Werkzeugart nicht unterst&uumltzt';
  break;
}

Macht es für zukünftige Anpassungen etwas leichter und übersichtlicher.

Desweiteren verwendest du die veraltete Variante der MySQL-Erweiterung. Du solltest deinen Code auf MySQLi oder PDO anpassen, da php_mysql demnächst aus PHP (Version 7) entfernt werden wird.
 
Eine Switch-Anweisung finde ich persönlich in so einem Fall etwas übertrieben und würde es eher mit einem Array lösen:
PHP:
$valid = array(
  '',
  'MEISTER',
  'SINTER',
  'DIAROLL',
  'EINZEL'
);

if ( in_array( $artwz, $valid ) ) {
  // ...
} else {
  // ...
}
 
Ja auch möglich. Hier spielt es zwar keine Rolle, aber Array-Funktionen sind langsamer und verbrauchen mehr Speicher. Zudem muss noch ein weiteres Hashtable-Objekt initialisiert werden, was auch wieder Zeit kostet und Speicher schluckt ;-)
 
Die Bedingung aus dem Ausgangsbeitrag…

PHP:
if ($artwz == '' or $artwz == 'MEISTER' or $artwz == 'SINTER' or $artwz != 'DIAROLL' or $typ != 'EINZEL' ) {

…lässt sich übrigens auf das hier kürzen:

PHP:
if ($artwz != 'DIAROLL' or $typ != 'EINZEL' ) {

Die mysql-Erweiterung ist veraltet. Nutze mysqli oder PDO.

Du musst Umlaute und dergleichen nicht verst&uuml;mmeln, wenn du Kodierungen/Zeichensätze richtig einsetzt. Siehe dazu etwa diese Checklist zu UTF-8:

- http://phpforum.de/forum/showthread.php?t=217877
 
Zuletzt bearbeitet:
Hupps, da hab ich wohl den Not-Operator übersehen. Damit ist meine switch-case hinfällig. Obwohl ich denke, dass er was anderes erreichen will. ;-) Der or-Operator macht zwischen zwei Not-Konditionen auch keine wirklichen Sinn, bzw. er erschließt sich mir nicht. Jedenfalls nicht wenn die Not-Konditionen auf die gleiche Variable gehen. Dann würde ich eher ein and notieren.
 
Ja. Ich hatte da auch erst „die Bedingung ist immer wahr“ stehen, weil ich auch nicht gesehen hatte, dass hinten einmal $typ steht statt $artwz. Und so was wie (x!=1 or x!=2) ist immer wahr, weil für x=1 die zweite Teilbedingung wahr ist und für x=2 die erste Teilbedingung und für alle anderen Werte von x beide.

Denke auch, dass wir in jedem Fall festhalten können, dass die Bedingung in #1 nicht unbedingt lesbar aufgestellt ist und dass sie auch vermutlich nicht das ist, was eigentlich gewünscht ist.
 
Zurück