Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Formular und Ausgabe auf der gleiche Webseite

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Formular und Ausgabe auf der gleiche Webseite

    Hallo zusammen

    habe folgendes vor und weiss nicht, wie ich das realisieren kann...

    Ich habe eine MySQL-Datenbanktablle angelegt, die auch schon befuellt ist mit ein paar Tausend Datensaetzen. Mit Hilfe eines Formulars sollen nun nur die Datensaetze ausgebenen werden, die zu den Daten passen, die im Formular eingegeben wurden.

    OK, das was Du grad gelesen hast, habe ich schon realisiert, naemlich mit zwei Dateien:

    Eine Datei zur Anzeige des Formulars:

    PHP-Code:
    <html xmlns="http://www.w3.org/1999/xhtml">
    <
    head>
      <
    title>Hello!</title>
      <
    meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    </
    head>
    <
    body>
    <
    form action="ausgabe.php" target="Ausgabe" method="post">
         
    Ihr Name:<input type="Text" name="name"><br>
         
    Rennen:<input type="Text" name="race"><br>
         <
    input type="Submit" value="Absenden">
    </
    form>
    </
    body>
    </
    html

    ...und eine zweite Datei "ausgabe.php" zur Anzeige des Ergebnisses:

    PHP-Code:
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <title>Hello!</title>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    </head>
    <body>
    <?php
    echo "Hier nun die Ausgabe:<br><br>";
    $link mysql_connect("localhost""root""pwd")
    or die(
    "Keine Verbindung möglich: " mysql_error());
    echo 
    "Verbindung zum Datenbankserver erfolgreich<br><br>";
    mysql_select_db("aks_results") or die("Auswahl der Datenbank fehlgeschlagen");
    mysql_query("SET NAMES 'utf8'");
    $name $_POST["name"];
    $race $_POST["race"];
     
    echo 
    "SELECT * FROM s_results where s_runner_name like '%".$name."%' and s_race_name like '%".$race."%'<br><br>";
    $abfrage "SELECT * FROM s_results where s_runner_name like '%".$name."%' and s_race_name like '%".$race."%'";
    $ergebnis mysql_query($abfrage);
    $menge mysql_num_rows($ergebnis);
    echo 
    "Es wurde(n) ".$menge." Eintrag/aege gefunden!<br>";
    echo 
    "<table border=\"1\">";
    while(
    $row mysql_fetch_object($ergebnis))
       {
          echo 
    "<tr><td>$row->s_result_id</td><td>$row->s_race_name</td><td>$row->s_runner_name</td><tr>";
       }
    echo 
    "</table>";
    ?>
    </body>
    </html>
    In zwei verschiedenen Dateien klappt das ja auch ganz gut, allerdings wird beim Aufrufen der Datei ausgabe.php aus dem Formular heraus das Formular quasi ausgeblendet/ueberschrieben. Nun moechte ich gerne das Formular und die Ausgabe zusammen in einem Browser-Fenster haben. Und jedesmal, wenn ich den Inhalt des Formulars veraendere und den Absenden-Button druecke, soll die Ausgabe im gleichen Fenster angepasst werden.


    Sicher doch ganz einfach zu loesen, oder? Danke fuer Eure Hilfe.

    PS. Ausprobiert habe ich schonmal HTML-Frames (schmaler Frame oben fuer Formular und Rest der Browser-Fensters fuer die Ausgabe), da habe ich allerdings das Problem, dass nach Klicken auf Absenden im unteren Frame der PHP-Code der Ausgabe-Datei angezeigt wird....

  • #2
    mach doch einfach Dein Form oben und dann ein
    if($_SERVER['REQUEST_METHOD'] == 'POST'){
    // hier kommt jetzt deine ganze ausgabe logik rein...
    }

    Kommentar


    • #3
      Danke vielmals HPR1974, klappt prima....

      Kommentar


      • #4
        Das funktioniert zwar, aber so wird der Bereich in der IF-Abfrage ausgeführt egal von wo die POST-Daten kommen oder welches Formular die Daten sendet, kann ja mal vorkommen das 2 Formulare an die selbe Datei senden (z.B. wenn man alles über ne index.php laufen lässt). Deswegen sollte man sich das glaube ich besser nicht so angewöhnen.

        PHP-Code:
        if(isset($_POST['name_des_submit_buttons']))
        {


        So wirds nur ausgeführt wenn wirklich das gewünschte Formular abgesendet wird, natürlich nur wenn man den verschiedenen Submit-Buttons auch verschiedene Namen gibt.

        Bei einem Formular das per Enter abgesendet (z.B. Suchfeld) wird sollte man auf den Wert eines Textfeldes prüfen, denn durchs das Enter wird nicht in jedem Browser der Submit-Button mitgesendet

        Kommentar


        • #5
          Das ganze nennt sich Affenformular (ein guter Suchbegriff für weitere Recherchen) und könnte in deinem Fall etwa so aussehen:
          PHP-Code:
          <!DOCTYPE html PUBLIC "-//W3C//DtD XHTML 1.0 Transitional//EN"
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns='http://www.w3.org/1999/xhtml'>
          <head>
            <title>Hello!</title>
            <meta http-equiv='content-type' content='text/html; charset=UTF-8' />
          </head>
          <body>
          <?php
          if (isset($_POST['abgeschickt')){
              echo 
          'Hier nun die Ausgabe:<br /><br />';
              
          $link mysql_connect('localhost''root''pwd')
                  or die(
          'Keine Verbindung m&ouml;glich: ' mysql_error());
              echo 
          'Verbindung zum Datenbankserver erfolgreich<br /><br />';
              
          mysql_select_db('aks_results') or die('Auswahl der Datenbank fehlgeschlagen');
              
          mysql_query('SET NAMES 'utf8'');    
              
          $name $_POST['name'];
              
          $race $_POST['race'];
           
              
          $abfrage "
                  SELECT
                      s_result_id,
                      s_race_name,
                      s_runner_name
                  FROM 
                      s_results 
                  WHERE
                      s_runner_name LIKE '%
          $name%'
                  AND
                      s_race_name LIKE '%
          $race%'";
          // echo "$abfrage<br />";  // Testausgabe, falls nötig
              
          $ergebnis mysql_query($abfrage) or exit(mysql_error());
              
          $menge mysql_num_rows($ergebnis);
              echo 
          'Es wurde(n) $menge Eintrag/&auml;ge gefunden!<br />';
              echo 
          "<table border='1'>";
              while(
          $row mysql_fetch_object($ergebnis)){
                  echo 
          "<tr><td>$row->s_result_id</td><td>$row->s_race_name</td><td>$row->s_runner_name</td><tr>";
              }
              echo 
          '</table>';
          }
          else{
              echo 
          "
                  <form action='" 
          $_SERVER['PHP_SELF'] . "' method='post'>
                       Ihr Name: <input type='text' name='name' /><br />
                       Rennen: <input type='text' name='race' /><br />
                       <input type='hidden' name='abgeschickt' />
                       <input type='submit' value='Absenden' />
                  </form>"
          ;
          }
          </
          body>
          </
          html>
          Gruss
          L

          Kommentar


          • #6
            @lazydog: danke dafuer, das klappt auch prima, fuer meine Zwecke mit einem kleinen Nachteil, da ich ja entweder nur das Formular oder das Ergebnis sehe

            @cycap: das ist eine schoene Ergaenzung, die ich gleich eingebaut habe


            JETZT ist mit aber nochwas aufgefallen: nach Abschicken des Formulars wird das Ergebnis unterhalb des Formulars angezeigt --> OK
            LEIDER ist nun der Inhalt des Formulars geloescht --> nicht so schoen ;-(

            PHP-Code:
             
            <body>
            <form method="post" >
            <table>
            <tr><td>Name</td><td>Rennen</td></tr>
            <tr><td><input type="Text" name="nameRun"></td>
            <td><input type="Text" name="race"></td></tr>
            </table>
            <input type="Submit" value="Absenden" name="Res_Filter">
            </form>
             
            <?php
            if(($_SERVER['REQUEST_METHOD'] == 'POST') and (isset($_POST['nameRun'])) ){
             
            echo 
            "Hier nun die Ausgabe:<br><br>";
            $link mysql_connect("localhost""root""pwd")
            or die(
            "Keine Verbindung möglich: " mysql_error());
            echo 
            "Verbindung zum Datenbankserver erfolgreich<br><br>";
            mysql_select_db("aks_results") or die("Auswahl der Datenbank fehlgeschlagen");
            mysql_query("SET NAMES 'utf8'");
            $name $_POST["nameRun"];
            $race $_POST["race"];
             
            echo 
            "SELECT * FROM s_results where s_runner_name like '%".$name."%' and s_race_name like '%".$race."%'<br><br>";
            $abfrage "SELECT * FROM s_results where s_runner_name like '%".$name."%' and s_race_name like '%".$race."%'";
            $ergebnis mysql_query($abfrage);
            $menge mysql_num_rows($ergebnis);
            echo 
            "Es wurde(n) ".$menge." Eintrag/aege gefunden!<br>";
            echo 
            "<table border=\"1\">";
            while(
            $row mysql_fetch_object($ergebnis))
               {
                  echo 
            "<tr><td>$row->s_result_id</td><td>$row->s_race_name</td><td>$row->s_runner_name</td><tr>";
               }
            echo 
            "</table>";
             
            }
             
            ?>
            </body>
            </html>
            Wie kann ich denn die urspruenglichen Suchbegriffe behalten? Ich vermute, die werden geloescht, da ja die Seite neu aufgerufen wird. Muesste ich diese Werte per $_POST[] in die Values des Formulars eintragen?

            Danke fuer Feedback. Ich probier derweils natuerlich weiter fleissig...

            Kommentar


            • #7
              Zitat von b_i_g_b_o Beitrag anzeigen
              Wie kann ich denn die urspruenglichen Suchbegriffe behalten? Ich vermute, die werden geloescht, da ja die Seite neu aufgerufen wird. Muesste ich diese Werte per $_POST[] in die Values des Formulars eintragen?
              Warum fragst du wenn du doch weisst wies geht?

              Kommentar


              • #8
                Danke fuer die Bestaetigung...

                Kommentar


                • #9
                  Ich habe dir eigentlich aus nur so viel Code geschrieben, um dich auf ein paar andere Dinge hinzuweisen:
                  • Wenn du im Header schon xhtml deklarierst, benutze auch xhtml, dh. alle Tags geschlossen und alle Tag- und Attribut-Bezeichnungen, ebenso Attributwerte klein geschrieben
                  • kein SELECT * FROM v.a. wenn du nur drei Attribute brauchst
                  • Code bitte vernünftig einruecken
                  • Auch SQL-Code kann anständig formatiert werden
                  • mysql_error() immer abfragen
                  • Error-Reporting einschalten
                  Wenn man all das berücksichtigt, nehme ich jetzt nochmals meinen Code, aber so das das Formular immer, und vor dem Resultat angezeigt wird, und die Werte in den Feldern auch erhalten bleiben
                  PHP-Code:
                  <!DOCTYPE html PUBLIC "-//W3C//DtD XHTML 1.0 Transitional//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                  <html xmlns='http://www.w3.org/1999/xhtml'>
                  <head>
                    <title>Hello!</title>
                    <meta http-equiv='content-type' content='text/html; charset=UTF-8' />
                  </head>
                  <body>
                  <?php
                  error_reporting
                  (E_ALL);
                  $name = isset($_POST['name']) ? $_POST['name'] : '';
                  $name = isset($_POST['race']) ? $_POST['race'] : '';
                  echo 
                  "
                      <form action='" 
                  $_SERVER['PHP_SELF'] . "' method='post'>
                              Ihr Name: <input type='text' name='name' value='
                  $name'/><br />
                              Rennen: <input type='text' name='race' value='
                  $race' /><br />
                              <input type='hidden' name='abgeschickt' />
                              <input type='submit' value='Absenden' />
                      </form>"
                  ;
                  }
                  if (isset(
                  $_POST['abgeschickt')){
                      echo 
                  'Hier nun die Ausgabe:<br /><br />';
                      
                  $link mysql_connect('localhost''root''pwd')
                          or die(
                  'Keine Verbindung m&ouml;glich: ' mysql_error());
                      echo 
                  'Verbindung zum Datenbankserver erfolgreich<br /><br />';
                      
                  mysql_select_db('aks_results') or die('Auswahl der Datenbank fehlgeschlagen');
                      
                  mysql_query('SET NAMES 'utf8'');
                   
                      
                  $abfrage "
                          SELECT
                              s_result_id,
                              s_race_name,
                              s_runner_name
                          FROM 
                              s_results 
                          WHERE
                              s_runner_name LIKE '%
                  $name%'
                          AND
                              s_race_name LIKE '%
                  $race%'";
                  // echo "$abfrage<br />";  // Testausgabe, falls nötig
                      
                  $ergebnis mysql_query($abfrage) or exit(mysql_error());
                      
                  $menge mysql_num_rows($ergebnis);
                      echo 
                  'Es wurde(n) $menge Eintrag/&auml;ge gefunden!<br />';
                      echo 
                  "<table border='1'>";
                      while(
                  $row mysql_fetch_object($ergebnis)){
                          echo 
                  "<tr><td>$row->s_result_id</td><td>$row->s_race_name</td><td>$row->s_runner_name</td><tr>";
                      }
                      echo 
                  '</table>';
                  }
                  </
                  body>
                  </
                  html>
                  Vergleiche jetzt bitte auch mal die Lesbarkeit mit deinem Code
                  Gruss
                  L

                  Kommentar


                  • #10
                    lazydog, danke vielmals. Ich werd mein Bestes geben, um meinen Code ebenso leserlich zu gestalten...

                    Kommentar

                    Lädt...
                    X