Unlogischer Fehler bei If - Anweisung

tholmer

Mitglied
Hi,

eigtl. ist es kein richtiger Fehler, es wird nur alles nicht so abgearbeitet wie ich es gern hätte. Ich hänge an dem Fehler jetzt schon seit paar Stunden ununterbrochen und deswegen hab ich mich jetzt hier mal hergetraut um eure Meinung zu hören warum mein Script nicht funktioniert. Es gibt 4 Schritte bei einer Bestellung von Artikeln. Is nichts großes deswegen wird es klein gehalten.

PHP:
<?php
include("inc.php");

//Hits
$page = "merch.php";
$sql = "UPDATE xtro_hits SET hits = hits + 1 WHERE page = '$page'";
mysql_query($sql);

$bestell = "";
$add = false;

//auslesen der variable von "Schritt 2"
if(isset($HTTP_GET_VARS['sub']))
{
  $bestell = $HTTP_GET_VARS['sub'];
}
elseif(isset($HTTP_POST_VARS['sub']))
{
  $bestell = $HTTP_POST_VARS['sub'];
}
else
{
  $bestell = "";
}

//auslesen der allg. Variable der Artikel ID
if(isset($HTTP_GET_VARS['a_id']))
{
  $a_id = $HTTP_GET_VARS['a_id'];
}
elseif(isset($HTTP_POST_VARS['a_id']))
{
  $a_id = $HTTP_POST_VARS['a_id'];
}
else
{
  $a_id = 0;
}

//auslesen der variable von "Schritt 3", ein Submit Button
if(isset($HTTP_POST_VARS['add']))
{
  $add = true;
}
else
{
  $add = false;
}
?>
<html>
  <head>
    <title></title>
  <style type="text/css">
  body
  {
    font-family: Garamond; 
  }
  .title {
    font-size:11px;
    font-weight:bold;
  }
  .headline {
    font-size: 16px;
    font-weight:bold;
    color:#6C9223;
  }
    .seite {
    font-size:11px;
    font-weight:bold;
  }
  .text {
    font-size:14px;
  }
  .button {
    font-family: Garamond;
    font-size: 14px;
    border: #A4BC34 1px solid;
    background-color:#6C9223;
  }
  .field {
    background-color:#2D361B;
    color: #FFFFFF;
    border: #A4BC34 1px solid;
  }
  .stern {
    color:red;
  }
  </style>
  </head>
<body bgcolor="#000000" text="#FFFFFF" marginwidth="0" marginheight="5" topmargin="5" leftmargin="0" link="#E2E3A1" vlink="#E2E3A1" alink="#E2E3A1">
<table width="90%" cellspacing="1" cellpadding="1" border="0" align="center" bgcolor="#A4BC34">
  <tr>
    <th bgcolor="#2D361B"><span class="headline">Merch</span></th>
  </tr>
  <tr>
    <td bgcolor="#000000">
    <br />
      <?
      
      //SCHRITT 1 - Alle Artikel im Überblick
      //noch keine Artikel ID gesetzt und $bestell soll leer sein und $add nich gesetzt sein
      if(!$a_id && $bestell == "" && $add == false)
      {
        $sql = "SELECT * FROM xtro_artikel ORDER BY a_id DESC";
        $res = mysql_query($sql);
        
        while($artikel = mysql_fetch_object($res))
        {
          //Ausgabe
          $file_name = $artikel->image;
          //Namensberechnung für Thumbnail
          $thumb_name = get_thumb_name($artikel->image);
          $src = "images/merch/$thumb_name";
          ?>
            <table width="70%" cellspacing="1" cellpadding="2" bgcolor="#A4BC34" align="center">
              <tr>
                <td bgcolor="#000000" rowspan="5" align="center" width="<?= (40+($config['thumbs_width'])) ?>"><br /><a href="main.php?mode=merch&a_id=<?= $artikel->a_id ?>" title="Artikel bestellen"><img src="<?= $src ?>" alt="Bild vom Artikel" border="0" /></a><br /><br /></td>
                <td bgcolor="#2D361B" width="*"><span class="headline"><?= $artikel->title?></span></td>
              </tr>
              <tr>
                <td bgcolor="#000000"><span class="text"><?= nl2br(stripslashes($artikel->desc)) ?></span></td>
              </tr>
              <tr>
                <td bgcolor="#000000"><span class="title">Preis:</span> <span class="text"><?= $artikel->preis ?> €/Stk.</span></td>
              </tr>
              <tr>
                <td bgcolor="#000000"><span class="text">Artikel verfügbar seit: <?= dating($artikel->time) ?></span></td>
              </tr>
              <tr>
                <th bgcolor="#000000"><a href="main.php?mode=merch&a_id=<?= $artikel->a_id ?>" title="Artikel bestellen"><span class="text">Artikel bestellen</span></a></th>
              </tr>
            </table>
            <br />
          <?
        }
      }
      //SCHRITT 2 - Ein Artikel im Detail
      //Artikel ID gesetzt (vom Link "Artikel bestellen übernommen) und 
      //$bestell soll leer sein und $add nicht gesetzt sein
      elseif($a_id != 0 && $bestell == "" && $add == false)
      {
        $sql = "SELECT * FROM xtro_artikel WHERE a_id = $a_id";
        $res = mysql_query($sql);
        
        if(mysql_num_rows($res))
        {
          //Ausgabe des Artikels
          $artikel = mysql_fetch_array($res);
          $desc = nl2br(stripslashes($artikel['desc']));
          $preis = $artikel['preis'];
          $verfuegbarkeit = $artikel['verfuegbarkeit'];
          $title = stripslashes($artikel['title']);
          $bestellungen = $artikel['bestellungen'];
          $datum = dating($artikel['time']);
          $img = $artikel['image'];
          
          //Namensberechnung für Thumbnail
          $thumb_name = get_thumb_name($img);
          $src = "images/merch/$thumb_name";
          $size = getimagesize("images/merch/$img");
          $width = $size[0];
          $height = $size[1];
          ?>
          <table width="70%" cellspacing="1" cellpadding="2" bgcolor="#A4BC34" align="center">
              <tr>
                <td bgcolor="#000000" rowspan="6" align="center" width="<?= (40+($config['thumbs_width'])) ?>"><br /><a href="javascript:window.open('inhalt/pic.php?a_id=<?= $a_id ?>','Bild','width=<?= $width ?>,height=<?= $height ?>'); focus()"><img src="<?= $src ?>" alt="Bild vom Artikel" border="0" /></a><br /><span class="text">Klick -> Großansicht</span><br /></td>
                <td bgcolor="#2D361B" width="*"><span class="headline"><?= $title?></span></td>
              </tr>
              <tr>
                <td bgcolor="#000000"><span class="text"><?= nl2br(stripslashes($desc)) ?></span></td>
              </tr>
              <tr>
                <td bgcolor="#000000"><span class="title">Preis:</span> <span class="text"><?= $preis ?> €/Stk.</span></td>
              </tr>
              <tr>
                <td bgcolor="#000000"><span class="text">Bestellungen seit <?= $datum ?>: <?= $bestellungen ?></span></td>
              </tr>
              <tr>
                <td bgcolor="#000000"><span class="text">Verfügbarkeit: <?= $verfuegbarkeit ?> Stk.</span></td>
              </tr>
              <tr>
                <th bgcolor="#000000"><a href="main.php?mode=merch&a_id=<?= $a_id ?>&sub=bestellen" title="Artikel bestellen"><span class="text">Weiter zur Bestellung</span></a></th>
              </tr>
            </table>
            <br>
          <?
        }
        else
        {
          header("Location main.php?mode=merch");
          exit;
        }
      }
      //SCHRITT 3 - Ein Formular zum ausfüllen der Daten für die Bestellung
      //Artikel ID gesetzt und $bestell soll gesetzt sein aber $add nicht
      elseif($a_id != 0 && $bestell == "bestellen" && $add == false)
      {
        $error = (isset($HTTP_GET_VARS['error'])) ? '<span style="color:red">'.$HTTP_GET_VARS['error'].'</span>' : "";
        $sql = "SELECT * FROM xtro_artikel WHERE a_id = $a_id";
        $res = mysql_query($sql);
        
        if(mysql_num_rows($res))
        {
          $artikel = mysql_fetch_array($res);
          
          $desc = nl2br(stripslashes($artikel['desc']));
          $preis = $artikel['preis'];
          $verfuegbarkeit = $artikel['verfuegbarkeit'];
          $title = stripslashes($artikel['title']);
          $bestellungen = $artikel['bestellungen'];
          $datum = dating($artikel['time']);
          $img = $artikel['image'];
          $hidden_fields = '<input type="hidden" name="a_id" value="'.$a_id.'" /><input type="hidden" name="sub" value="bestellen" />';
          echo $error;
          ?>
          <form action="main.php?mode=merch" method="post">
          <table width="70%" cellspacing="1" cellpadding="2" bgcolor="#A4BC34" align="center">
            <tr>
              <td colspan="2" bgcolor="#000000"><span class="text">Hier können Sie den von Ihnen gewählten Artikel bestellen. Füllen sie das Formular aus. Mit einem <span class="stern">*</span> markierte Felder sind Pflichtfelder und sind für die Bestellung zwingend notwendig. Nach dem Abschicken der Bestellung erhalten sie eine eMail mit allen weiteren Informationen die zur Abwicklung nötig sind. Zahlungsart ist Vorkasse.</span></td>
            </tr>
            <tr>
              <td bgcolor="#000000" colspan="2"><b>Artikel: <?= $title ?>, Verfügbarkeit: <?= $verfuegbarkeit ?></b></td>
            </tr>
            <tr>
              <td bgcolor="#000000">Vorname:</td>
              <td bgcolor="#000000"><input class="field" type="text" name="vorname" size="15" maxlenght="50" /> <span class="stern">*</span></td>
            </tr>
            <tr>
              <td bgcolor="#000000">Nachname:</td>
              <td bgcolor="#000000"><input class="field" type="text" name="nachname" size="15" maxlenght="50" /> <span class="stern">*</span></td>
            </tr>
            <tr>
              <td bgcolor="#000000">Sraße + Hausnr.:</td>
              <td bgcolor="#000000"><input class="field" type="text" name="straße" size="40" maxlenght="100" /> <span class="stern">*</span> <input class="field" type="text" name="hnr" size="2" maxlenght="3" /> <span class="stern">*</span></td>
            </tr>
            <tr>
              <td bgcolor="#000000">PLZ + Ort:</td>
              <td bgcolor="#000000"><input class="field" type="text" name="plz" size="6" maxlenght="10" /> <span class="stern">*</span> <input class="field" type="text" name="ort" size="20" maxlenght="50" /><span class="stern">*</span></td>
            </tr>
            <tr>
              <td bgcolor="#000000">Anzahl:</td>
              <td bgcolor="#000000"><input class="field" type="text" name="anzahl" size="3" maxlenght="3" value="1" /> <span class="stern">*</span></td>
            </tr>
            <tr>
              <td bgcolor="#000000">eMail:</td>
              <td bgcolor="#000000"><input class="field" type="text" name="email" size="20" maxlenght="40" /> <span class="stern">*</span></td>
            </tr>
            <tr>
              <td bgcolor="#000000">Telefon:</td>
              <td bgcolor="#000000"><input class="field" type="text" name="telefon" size="20" maxlenght="40" /></td>
            </tr>
            <tr>
              <td bgcolor="#000000">Bemerkung:</td>
              <td bgcolor="#000000"><textarea class="field" name="bemerkung" cols="30" rows="4">hier ggf. zb. T-Shirt Größe angeben</textarea></td>
            </tr>
            <tr>
              <td colspan="2" bgcolor="#000000" align="center" height="30"><?= $hidden_fields ?><input type="submit" name="add" value="Bestellung abschicken" class="button" /> - <input type="reset" name="reset" value="Zurücksetzen" class="button" /></td>
            </tr>
          </table>
          </form>
          <br />
          <?
        }
        else
        {
          header("Location main.php?mode=merch");
          exit;
        }
      }
      //SCHRITT 4 - Eintrag in die DB (ist noch nicht fertig das 
      //script weils ja so noch nich funktioniert
      //Artikel ID gesetzt und $bestell soll gesetzt und $add soll auch gesetzt sein
      elseif($a_id != 0 && $add == true && $bestell == "bestellen")
      {
        $id = (isset($HTTP_POST_VARS['a_id'])) ? $HTTP_POST_VARS['a_id'] : 0;
        $vorname = (isset($HTTP_POST_VARS['vorname'])) ? trim($HTTP_POST_VARS['vorname']) : "";
        $nachname = (isset($HTTP_POST_VARS['nachname'])) ? trim($HTTP_POST_VARS['nachname']) : "";
        $sraße = (isset($HTTP_POST_VARS['sraße'])) ? trim($HTTP_POST_VARS['sraße']) : "";
        $hnr = (isset($HTTP_POST_VARS['hnr'])) ? trim($HTTP_POST_VARS['hnr']) : "";
        $plz = (isset($HTTP_POST_VARS['plz'])) ? trim($HTTP_POST_VARS['plz']) : "";
        $ort = (isset($HTTP_POST_VARS['ort'])) ? trim($HTTP_POST_VARS['ort']) : "";
        $anzahl = (isset($HTTP_POST_VARS['anzahl'])) ? trim($HTTP_POST_VARS['anzahl']) : "";
        $email = (isset($HTTP_POST_VARS['email'])) ? trim($HTTP_POST_VARS['email']) : "";
        $bemerkung = (isset($HTTP_POST_VARS['bemerkung'])) ? trim(addslashes($HTTP_POST_VARS['bemerkung'])) : "";
        $telefon = (isset($HTTP_POST_VARS['telefon'])) ? trim($HTTP_POST_VARS['telefon']) : "";
        
        if(!$id || $vorname == "" || $nachname == "" || $sraße == "" || $hnr == "" || $plz == "" || $ort == "" || $anzahl == "" || $email == "")
        {
          header("Location main.php?mode=merch&a_id=$id&sub=bestellen&error=Pflichtfelder ausfüllen!");
          exit;
        }
        
        $sql = "INSERT INTO xtro_bestellungen (`a_id`, `bezahlt`, `anzahl`, `vorname`, `nachname`, `straße`, `hnr`, `plz`, `ort`, `email`, `telefon`, `bemerkung`) VALUES ($id,0,$anzahl,'$vorname','$nachname','$straße','$hnr','$plz','$ort','$email','$telefon','$bemerkung')";
        if(mysql_query($sql))
        {
          echo 1;
          $in_db = true;
        }
        else
        {
          $in_db = false;
        }
      }
      else
      {
        header("Location main.php?mode=merch");
        exit;
      }
    ?>
    </td>
  </tr>
</table>
</body>
</html>

hoffe der ist jetzt nicht zu lang :D

Nun mein Problem:
Bis zum Schritt 3 funktioniert alles (siehe Kommentare), wenn ich jedoch dann auf "Bestellung abschicken" klicke wird main.php?mode=merch aufgerufen aber der inhalt ist leer. Der Quelltext zeigt nur das an:
HTML:
<html>
{KOPF}
<body bgcolor="#000000" text="#FFFFFF" marginwidth="0" marginheight="5" topmargin="5" leftmargin="0" link="#E2E3A1" vlink="#E2E3A1" alink="#E2E3A1">
<table width="90%" cellspacing="1" cellpadding="1" border="0" align="center" bgcolor="#A4BC34">
  <tr>
    <th bgcolor="#2D361B"><span class="headline">Merch</span></th>

  </tr>
  <tr>
    <td bgcolor="#000000">
    <br />

d.h. also, das ab dem ersten Schritt nichts mehr ausgegeben wird. Das ist natürlich irgendwie komisch weil ich zum Schluss ja auch "else bla" geschreiben habe also müsste es ja zumindest das ausführen... ich hoffe ihr könnt mir helfen und mir evtl sagen wo der logische Fehler in meinem Script liegt. Sonst macht das Script alles was ich will. DB - Verbindung wird über include("inc.php") aufgerufen.

mfg, tholmer
 
Das Script wurde wahrscheinlich durch irgendein Exit unterbrochen. Ich würde mal einfach den Query-Befehl mit echo ausgeben, bevor die Überprüfung kommt, ob diese einen Inhalt besitzen. Dann hast du vielleicht schon mal einen Ansatzpunkt, was genau jetzt daran nicht stimmt.
Also einfach
PHP:
      elseif($a_id != 0 && $add == true && $bestell == "bestellen") 
      { 
        $id = (isset($HTTP_POST_VARS['a_id'])) ? $HTTP_POST_VARS['a_id'] : 0; 
        $vorname = (isset($HTTP_POST_VARS['vorname'])) ? trim($HTTP_POST_VARS['vorname']) : ""; 
        $nachname = (isset($HTTP_POST_VARS['nachname'])) ? trim($HTTP_POST_VARS['nachname']) : ""; 
        $sraße = (isset($HTTP_POST_VARS['sraße'])) ? trim($HTTP_POST_VARS['sraße']) : ""; 
        $hnr = (isset($HTTP_POST_VARS['hnr'])) ? trim($HTTP_POST_VARS['hnr']) : ""; 
        $plz = (isset($HTTP_POST_VARS['plz'])) ? trim($HTTP_POST_VARS['plz']) : ""; 
        $ort = (isset($HTTP_POST_VARS['ort'])) ? trim($HTTP_POST_VARS['ort']) : ""; 
        $anzahl = (isset($HTTP_POST_VARS['anzahl'])) ? trim($HTTP_POST_VARS['anzahl']) : ""; 
        $email = (isset($HTTP_POST_VARS['email'])) ? trim($HTTP_POST_VARS['email']) : ""; 
        $bemerkung = (isset($HTTP_POST_VARS['bemerkung'])) ? trim(addslashes($HTTP_POST_VARS['bemerkung'])) : ""; 
        $telefon = (isset($HTTP_POST_VARS['telefon'])) ? trim($HTTP_POST_VARS['telefon']) : ""; 

$sql = "INSERT INTO xtro_bestellungen (`a_id`, `bezahlt`, `anzahl`, `vorname`, `nachname`, `straße`, `hnr`, `plz`, `ort`, `email`, `telefon`, `bemerkung`) VALUES ($id,0,$anzahl,'$vorname','$nachname','$straße','$hnr','$plz','$ort','$email','$telefon','$bemerkung  ')"; 

echo $sql;
 
Danke, das mit dem exit stimmt. Ich habe es nochmal umgeschrieben und das script in 2 datein aufgeteilt... der Fehler liegt genau dort

PHP:
if(!$id || $vorname == "" || $nachname == "" || $sraße == "" || $hnr == "" || $plz == "" || $ort == "" || $anzahl == "" || $email == "")
        {
          header("Location main.php?mode=merch&a_id=$id&sub=bestellen&error=Pflichtfelder ausfüllen!");
          exit;
        }

der header will einfach nicht. Sonst gehts auch überall... aber wieso hier nicht weiß ich nich.
 
Dann lass doch mal den einen Query-Befehl einfach mal ausgeben. Dann siehst du ja, ob entweder alles keinen Wert hat, oder nur z.B. die ID keinen Wert besitzt. Dann kann man das Problem ein bißchen eingrenzen.
 
die tests hab ich schon alle durchgeführt... hing ja auch lange genug an dem script gestern nacht :D Aber danke, mitlerweile gehts, ahb alles bissl geändert
 
Zurück