Kuja23: Datenbankabfrage mit Formular

Hallo liebes Volk!

Bin völlig verzweifelt und hoffe mir kann hier jemand weiterhelfen.

Habe mir bei MYSQL eine Datenbank (BVA2) mit Inhalt angelegt. Hier gibt es die ID "Block". Nun möchte ich ein Formular kreieren bei dem ein Block von 1 - 6 eingegeben werden kann (es gibt nur 6 Blöcke). Je nachdem welche Daten man nun wünscht, sprich welche Nummer man eingibt, soll auf einer neuen Seite eine Tabelle mit Umweltdaten des jeweiligen Blockes erscheinen. Die Verknüpfung funktioniert soweit, ein bloßes Anzeigen der Daten klappt. Nur mit dem Formular hakts gewaltig und ehrlich gesagt bin ich ziemlich runter.
Hier mal der Quelltext:

<html>
<head>
<title>Abfrage</title>

</head>
<body>

Block: <form method="post">
<input type="text" size="10" name="Block">
<input type="submit" value="OK">
  </form>
<table border="1">
<?php
      $DB="*****";
      $SQL="SELECT * FROM BVA2 Where (Block ='$Block')";
      $Server="**********";
      $user="*****";
      $PW="******";
      $Conn=mysql_connect($Server,$user,$PW);
      mysql_select_db($DB,$Conn);
      $RS=mysql_query($SQL,$Conn);
        while($zeile=mysql_fetch_array($RS,MYSQL_ASSOC))
     {
       echo "<tr><td>".$zeile["Block"]."</td>".
    "<td>".$zeile["mgK"]."</td>".
            "<td>".$zeile["mgL"]."</td>".
            "<td>".$zeile["mgN"]."</td>".
            "<td>".$zeile["mgT"]."</td></tr>";
     }

mysql_free_result($RS);
     mysql_close($Conn);

?>
</table>
</body>
</html>

Ich weiß, dass da noch viel fehlt, stehe aber gerade auf dem Schlauch und weiß nicht ein nicht aus.

Schonmal danke!
Kuja

  1. Moin!

    Wenn ich dich richtig verstehe, ist das der Part der fu nktioniert. Die Anzeige der Daten. Du hast aber irgendein Problem mit der Eingabe der Daten. Dann zeig uns doch einfach den Problemcode. Sprich: wo ist das Formular und der die Daten verarbeitende Teil?

    btw: Wo komt denn $Block her?

    --
    Ich bin dafuer verantwortlich was ich sage, nicht dafuer, was Du verstehst.
    1. Grüße!

      Das Formular steckt ganz oben

      Block: <form method="post">

      <input type="text" size="10" name="Block">
      <input type="submit" value="OK">
        </form>

      Reicht es jetzt beim formular noch
      action="Datei.php"
      anzufügen, um auf dieser Datei.php dann auf die Daten zuzugreifen? Oder muss ich schon innerhalb dieser Datei (in welcher sich das Formular befindet) einen Datenbankzugriff ermöglichen?
      In der Datei.php sollten dann die Umweltdaten ausgeliefert werden, lies es wird auf die Datenbank verwiesen.

      <?php

      $DB="*****";
            $SQL="SELECT * FROM BVA2 Where (Block ='$Block')";
            $Server="**********";
            $user="*****";
            $PW="******";
            $Conn=mysql_connect($Server,$user,$PW);
            mysql_select_db($DB,$Conn);
            $RS=mysql_query($SQL,$Conn);

      Ich dachte Where (Block ='$Block') bedeutet, dass alle Daten ausgegeben werden, die unter dem jeweiligen Block (in der Datenbank) vermerkt sind (also mgL, mgT usw.).
      Diese sollen dann in einer Tabelle ausgegeben werden.

      <table border="1">

      while($zeile=mysql_fetch_array($RS,MYSQL_ASSOC))
           {
             echo "<tr><td>".$zeile["Block"]."</td>".
             "<td>".$zeile["mgK"]."</td>".
                  "<td>".$zeile["mgL"]."</td>".
                  "<td>".$zeile["mgN"]."</td>".
                  "<td>".$zeile["mgT"]."</td></tr>";
           }

      mysql_free_result($RS);
           mysql_close($Conn);

      ?>

      </table>

      Vielleicht könnt mir den Anstoß, also quasi das Grundgerüst dazu liefern, wie man über eine Formularanfrage bestimmte Daten ausgibt. Ich weiß irgedwas grundverkehrt gemacht zu haben bzw. irgendwas komplett vergessen zu haben.

      Völlig überfordert grüßt
      Kuja

      1. Hi!

        Das Formular steckt ganz oben

        Block: <form method="post">

        <input type="text" size="10" name="Block">
        <input type="submit" value="OK">
          </form>

        Das Formular enthaelt keine Daten und keine Aktion. Da passiert genau nix.

        Reicht es jetzt beim formular noch
        action="Datei.php"
        anzufügen, um auf dieser Datei.php dann auf die Daten zuzugreifen? Oder muss ich schon innerhalb dieser Datei (in welcher sich das Formular befindet) einen Datenbankzugriff ermöglichen?

        Wenn Datei.php Die Daten verarbeitet dann sollte das auch so passieren.

        In der Datei.php sollten dann die Umweltdaten ausgeliefert werden, lies es wird auf die Datenbank verwiesen.

        Also ist Datei.php fuer das Schreiben in die Datenbank und das Lesen aus der Datenbank zustaendig?

        Ich dachte Where (Block ='$Block') bedeutet, dass alle Daten ausgegeben werden, die unter dem jeweiligen Block (in der Datenbank) vermerkt sind (also mgL, mgT usw.).

        Das scheint der Fall zu sein. Aber woher kommt nun der Inhalt der Variable $Block? Die wird in deinen Beispielen nicht definiert. Es riecht leicht nach Sicherheitsluecke.

        Vielleicht könnt mir den Anstoß, also quasi das Grundgerüst dazu liefern, wie man über eine Formularanfrage bestimmte Daten ausgibt. Ich weiß irgedwas grundverkehrt gemacht zu haben bzw. irgendwas komplett vergessen zu haben.

        Mir schwant du hast vergessen dich zu informieren und evtl. etwas ueber Webentwicklung zu lernen, bevor Du damit anfaengst.

        Das Grundprinzip ist immer gleich. Du hast ein Formular mit Eingabeelementen. Hier kann der User mehr oder weniger sinnvolle Einstellungen taetigen. Dieses Formular kann allerdings schon durch die Inhalte einer Datenbank erstellt worden sein.

        Einmal abgeschickt, werden die Daten an eine Ressource uebergeben, die damit dan verschiedenen Dinge macht. Z.B. speichern oder auswerten und Resultate liefern.

        Bisher hast Du weder Inhalte in deinem Formular, noch wird beim Submit eine Ressource zur Verarbeitung dieser nichtexistenten Daten aufgerufen. Das duerften Fehler Nr. 1 und 2 in der Logik sein.

        --
        Ich bin dafuer verantwortlich was ich sage, nicht dafuer, was Du verstehst.
        1. Also in erster Datei das Formular

          Block: <form action="Datei.php" method="post">

          <input type="text" size="10" name="Block">
          <input type="submit" value="OK">
            </form>

          In disem Formular muss jetzt die Variable definiert werden, oder? Nur wie?

          Über dem Kopf?
          Etwa so
          <?php
          $_POST['Block']){
          $Block = $_POST['Block'];
          }
          ?>

          Also ist Datei.php fuer das Schreiben in die Datenbank und das Lesen aus der Datenbank zustaendig?

          Genau so soll es sein. Das Ganze soll in dieser Datei ausgegeben werden.

          1. Also hab das Ganze noch mal überdacht - klappt trotzdem nicht.
            Die Ausgabe soll nun erstmal in der gleichen Datei stattfinden. Sieht jetzt so aus:

            <form action="Test.php" method="post">

            <input name="Block" type="text">
            <input type="submit" value="Absenden">
            </form>

            <table border="1">
            <?php

            $Block = $_post['Block'];
                  $DB="******";
                  $SQL="SELECT * FROM BVA2 Where Block = '".$Block."'";
                  $Server="rdbs.rz.htw-dresden.de";
                  $user="*****";
                  $PW="*******";
                  $Conn=mysql_connect($Server,$user,$PW);
                  mysql_select_db($DB,$Conn);
                  $RS=mysql_query($SQL,$Conn);

            while($zeile=mysql_fetch_array($RS,MYSQL_ASSOC))
                 {
                   echo "<tr><td>".$zeile["Block"]."</td>".
                     "<td>".$zeile["mgK"]."</td></tr>".
                        "<td>".$zeile["mgL"]."</td>".
                        "<td>".$zeile["mgN"]."</td>".
            "<td>".$zeile["mgT"]."</td></tr>";
                 }

            mysql_free_result($RS);
                 mysql_close($Conn);

            ?>
            </table>
            </body>
            </html>

            Die Variable wurde jetzt definiert, oder? Wenn die Blocknummern jetzt identisch sind, sollte doch die TAbelle generiert werden. Funzt ni. Mist.

            1. Hi!

              Also hab das Ganze noch mal überdacht - klappt trotzdem nicht.

              Nicht genug. Mach dir bitte erst einmal detailliert Gedanken, wie das Spielchen von Requests und Responses im Web aussieht.

              Als erstes ist da ein Browser, der einen Request absendet und eine Seite mit dem Formular haben möchte. Was sieht der Server davon? Einen GET-Request nach dem Formular. Nochwas? Nein, Fall erledigt und vergessen.

              Der Anwender füllt nun das Formular aus und sendet es ab. Was sieht der Server? Einen POST-Request. Was soll er tun und was soll nach dem Tun als Response an den Browser gehen? Kommt darauf an, ob der Anwender alles richtig eingegeben hat. Wenn nicht, muss er solange das Formular vorgesetzt bekommen, bis er endlich alles richtig eingegeben hat. Erst dann darf die Verarbeitung erfolgen. Und in dem Fall bekommt er dann nicht mehr das Formular sondern ein "Fein gemacht" als Antwort.

              Eine Lösung für dieses tagtäglich unzählige Male verwendete Prinzip nennt sich übrigens Affenformular. Unter dem Suchbegriff findest du Lösungsansätze.

              $Block = $_post['Block'];

              1. $_POST schreibt sich mit Großbuchstaben. Bei Variablennamen kommt es auf die Schreibweise an (und bei Funktionen nicht).
              2. Das Umkopieren war, ist und bleibt sinnlos. Verwende $_POST['Block'] und nicht erst noch drei Zwischenvariablen.

              $SQL="SELECT * FROM BVA2 Where Block = '".$Block."'";

              Viel wichtiger als das Umkopieren von POST-Parametern ist die Beachtung des Kontextwechsels. Leider eine sehr beliebte Sicherheitslücke.

              $Server="rdbs.rz.htw-dresden.de";

              Ist die Ausbildung in der HTW so ungenügend, oder hast du nur nicht aufgepasst?

              echo "<tr><td>".$zeile["Block"]."</td>".
                       "<td>".$zeile["mgK"]."</td></tr>".
                          "<td>".$zeile["mgL"]."</td>".
                          "<td>".$zeile["mgN"]."</td>".
              "<td>".$zeile["mgT"]."</td></tr>";

              Auch hier sind wieder nicht beachtete Kontextwechsel zu sehen, diesmal in Richtung HTML.

              Die Variable wurde jetzt definiert, oder? Wenn die Blocknummern jetzt identisch sind, sollte doch die TAbelle generiert werden. Funzt ni. Mist.

              Stell zum Entwickeln das error_reporting auf E_ALL (und display_errors auf on) damit dir Fehler wie der Zugriff auf die nicht existierende Variable $_post angezeigt werden. Und dann übe dich im Debugging. Lass dir die Inhalte der Variablen anzeigen (am besten mit var_dump()) und vergleiche somit Wunsch mit Wirklichkeit.

              Lo!