Abfrage und ausgabe

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

  • Abfrage und ausgabe

    ich hoff mal ich bin im richtigen thread.
    Ich habe mir eine SQL Datenbank erstellt. Die Datenbank heißt "datenbank" und die Tabelle "tabelle". Zwei Spalten, Name, Vorname. Jetzt versche ich schon stundenlang eine einfache Suchmaske und Ergbebnisseite zu erstellen. Ob mir da jemand helfen kann. (die Verbindung zur Datenbank funktioniert)

    die Suchmaske

    PHP-Code:
    <?

    mysql_connect("localhost","root","");
    mysql_select_db("Name");
    ?>


    <head>
    <title></title>
    </head>

    <body>

    <form name="search" action="ergebnis.php" method="POST">

    <input type="text" name="objekt" size="100" />
    <p>
    <p>
    <input name="submit" type="submit" value="&gt;&gt;&nbsp;Finden&nbsp;&lt;&lt;" />

    </Body>
    </HTML>
    -------------------------------------------------------------

    und hier die Ergebnisseite

    PHP-Code:
    <?php

    error_reporting
    (E_ALL);
    mysql_connect("localhost","root","") OR die("Keine Verbindung möglich: " mysql_error());
    mysql_select_db("datenbank") OR die(mysql_error());
    $sql ="SELECT * FROM tabelle WHERE Name LIKE '%' " ;
    $result mysql_query($sql) OR die(mysql_error());
    ?>



    <head>
    <title></title>
    </head>

    <body>

    <table width="80%" border="1">
    <tr>
    <td>ID</td>
    <td>Name</td>
    <td>Vorname</td>
    </tr>

    <?php
    while ($datensatz mysql_fetch_array($result))
    {

    echo 
    "<td>",$datensatz['id'],"</td>";
    echo 
    "<td>",$datensatz['Name'],"</td>";
    echo 
    "<td>",$datensatz['Vorname'],"</td>";
    }
    ?>
    </table>

    </body>
    </html>
    eine funktionierende korrektur wäre echt super. Blick da irgendwie nicht mehr durch (bekomme keine fehlermeldungen)

  • #2
    Nach was willst du denn suchen? Ich würde deinen Input-Feldern in der Suchmaske aussagekräftigere Namen geben als name="objekt" z.B. name="name"

    Dein Fehler liegt in der Abfrage:

    PHP-Code:
    $sql ="SELECT * FROM tabelle WHERE Name LIKE '%' " 
    Mit dieser Abfrage gibst du alle Datensätze aus, weil er jeden Datensatz sucht, der beliebige Zeichen (%) enthält.

    Wenn du den Namen des Input-Feldes so geändert hast, wie ich es dir vorgeschlagen habe, dann müsste die Abfrage wie folgt aussehen:

    PHP-Code:
    $sql "SELECT * FROM tabelle WHERE Name = '".$_POST["name"]."'"
    oder

    PHP-Code:
    $sql "SELECT * FROM tabelle WHERE Name LIKE '%".$_POST["name"]."%'"
    Bei der zweiten Vriante wird jeder Datensatz angezeigt, in welchem der eingegebene String ins Input-Feld "name" im Attribut "Name" vorkommt. Dabei ist egal, ob davor, danach oder weder noch etwas steht.

    Kommentar


    • #3
      echt genial pascal007,

      ich sitze hier stundenlang herum und du machst das ding in ein paar sekunden. vielen dank schonmal

      was wäre wenn ich jetzt ein zweites such-attribut im suchformular hinzufügen wöllte, zb. noch den "nachnamen" dann muss ich doch bestimmt in der zeile

      PHP-Code:
      $sql "SELECT * FROM tabelle WHERE Name LIKE '%".$_POST["name"]."%'"
      auch noch was einfügen

      Kommentar


      • #4
        Du solltest dir mal das anschauen: SQL-Injektion.
        *blubb*

        Kommentar


        • #5
          Ja, dann musst du das halt auch noch in die MySQl-Abfrage schreiben:

          PHP-Code:
          $sql "SELECT * FROM tabelle WHERE Name LIKE '%".$_POST["name"]."%' AND Nachname LIKE '%".$_POST["nachname"]."%'"
          Es würde dir sicherlich nicht schaden, dich mal ein bisschen in die Grundlagen von MySQL einzuarbeiten .

          Original geschrieben von deathcakeman
          Du solltest dir mal das anschauen: SQL-Injektion.
          Ja das ist natürlich auch noch ein Punkt, aber den habe ich bei einem solch einfachen Beispiel einfachheitshalber weggelassen.

          Wenn man es sicher machen will, dann müsste man obige Abfrage folgendermassen umgestalten, da man sonst fremden Code einschleusen könnte:

          PHP-Code:
          $name strip_tags($_POST["name"]); // Entfernen von PHP- und HTML-Code mittels strip_tags()
          $nachname strip_tags($_POST["nachname"]); // Entfernen von PHP- und HTML-Code mittels strip_tags()

          $sql "SELECT * FROM tabelle WHERE Name LIKE '%$name%' AND Nachname LIKE '%$nachname%'"
          Zuletzt geändert von pascal007; 21.10.2007, 22:00.

          Kommentar


          • #6
            *hust*
            mysql_real_escape_string
            Freedom is a state of mind. Not a state in which we live.

            troxdev.ch | animefieber

            Kommentar


            • #7
              Original geschrieben von TroX
              *hust*
              mysql_real_escape_string
              Geht natürlich auch .

              Kommentar


              • #8
                Original geschrieben von pascal007
                Geht natürlich auch .
                Du solltest das auch weglassen, weil deine Option nicht gegen SQL-Injection vorgeht
                *blubb*

                Kommentar


                • #9
                  ja es scheint zu klappen, danke euch jungs

                  werde mich auch mehr damit befassen

                  Kommentar


                  • #10
                    Original geschrieben von deathcakeman
                    Du solltest das auch weglassen, weil deine Option nicht gegen SQL-Injection vorgeht
                    Okay, danke für den Hinweis, ich habe bis dato immer gemeint, beides erzielt die Wirkung. Hab ich mich offenbar getäuscht .

                    Kommentar


                    • #11
                      da wäre vll noch ein kleinigkeit, ich weiß das nervt, hätte ich ne seite
                      mit vielen bsp. würde ich versuchen es selber herauszufinden, aber
                      fragen kostet ja nix

                      wenn ich so eine ausgabe haben möchte wie müsste ich das machen

                      id 1
                      name schmidt
                      vorname hans

                      id 3
                      name meier
                      vorname stefan

                      usw.


                      also das quasi das ergebnis in einer vorgefertigten maske erscheint
                      und die dann so oft untereinander angezeigt wird wie man
                      ergebnisse bekommt. (mit den überschriften, der formatierung usw.)

                      ist das überhaupt machbar

                      ich habe das hier versucht, damit bekomme ich zwar die ergebnisse
                      an die stelle wo sie hin sollen, aber es wird nur jeweils eins angezeigt, was auch logisch ist:

                      PHP-Code:
                      $ausgabe "Einträge:<br />\n";
                          
                      $row mysql_fetch_assoc($result);

                      if(
                      is_array($row))
                      {
                      foreach(
                      $row as $key => $val) {
                      $ausgabe .= $key " : " $val "<br />";
                      }
                      }

                      ?> 
                      angezeigt wird mit bsp
                      PHP-Code:
                      <? echo $row['Name'] ?>
                      für hilfreiches wissen wäre ich sehr dankbar

                      Kommentar


                      • #12
                        Da hattest du es doch schon mal fast gehabt . Nur sollte man vllt. Punkte und keine Kommas nehment beim zusammenhängen der Strings und Variabeln und ich würde mysql_fetch_object() nehmen (dann fallen auch die Punkte weg):

                        PHP-Code:
                        <?php
                        while ($datensatz mysql_fetch_object($result))
                        {

                        echo 
                        "<td>$datensatz->id</td>";
                        echo 
                        "<td>$datensatz->Name</td>";
                        echo 
                        "<td>$datensatz->Vorname</td>";
                        }
                        ?>
                        Les dir mal diese Seite komplett durch. Danach hast du dir wenigstens mal die Grundlagen zu Gemüte geführt . Und das ist ja nicht so viel zum durcharbeiten und sollte auch Antwort auf solche Fragen wie du sie oben gestellt hast geben.
                        Zuletzt geändert von pascal007; 22.10.2007, 06:18.

                        Kommentar


                        • #13
                          eine gute seite für anfänger wie mich, gleich bei den FAVs abgespeichert

                          habe jetzt nur so zum testen oben

                          PHP-Code:
                          $anzahl count($result); 
                          eingegeben und dann vor die ausgabe

                          PHP-Code:
                          <?php echo $anzahl?>
                          witziger weise wird da immer nur 1 angezeigt, obwohl ich mehrere ergebnisse bekommen müsste. und zwischen

                          PHP-Code:
                          <?php
                          while ($datensatz mysql_fetch_object($result))
                          {

                          echo 
                          "<td>$datensatz->id</td>";
                          echo 
                          "<td>$datensatz->Name</td>";
                          echo 
                          "<td>$datensatz->Vorname</td>";
                          }
                          ?>
                          und

                          PHP-Code:
                           <?php
                              
                          while ($datensatz mysql_fetch_array($result))
                              {

                              echo 
                          "<td>",$datensatz['id'],"</td>";
                              echo 
                          "<td>",$datensatz['Name'],"</td>";
                              echo 
                          "<td>",$datensatz['Vorname'],"</td>";
                              
                              } 
                          ?>
                          habe ich bis auf die vereinfachte schreibweise keinen unterschied feststellen können.

                          auf der seite hab ich dann

                          PHP-Code:
                          <?php
                            $abfrage 
                          "SELECT url, urlname FROM links";
                            
                          $ergebnis mysql_query($abfrage);
                            while(
                          $row mysql_fetch_object($ergebnis))
                              {
                              echo 
                          $row->url;
                              }
                            
                          ?>
                          gesehen, mit dem man dann alle ergebnisse an beliebige stellen bringen kann. Nur habe ich statt url ein * stehen, da bei mir alle Spalten angesprochen werden, was muss dann hinter das ->
                          die ergebnisse werden dann wieder mit "row und spalte" ausgegeben, nur wenn ich dann wieder nur ein ergebnis bekomme, funktioniert zwar die abfrage, nützt dann aber nix, da ich eigentlich mehrere ergebnisse untereinender bekommen müsste.

                          (die halbe nacht wach, und jetzt schon wieder vor dem ding)

                          Kommentar


                          • #14
                            habe jetzt nur so zum testen oben
                            $anzahl = count($result);
                            eingegeben und dann vor die ausgabe
                            <?php echo $anzahl?>
                            witziger weise wird da immer nur 1 angezeigt, obwohl ich mehrere ergebnisse bekommen müsste. und zwischen
                            Schade, dass $result KEIN ARRAY ist.

                            habe ich bis auf die vereinfachte schreibweise keinen unterschied feststellen können.
                            Na. Unterschiede gibts schon. Nur sollte man Strings und Variablen schon richtig trennen. Vorzugsweise mit Punkten statt Kommata. Ob du jetzt Arrays oder Objekte verwendest, ist egal. Wichtig ist nur, dass du richtig drauf zugreifst.

                            Das Problem im letzten Absatz deines Posting verstehe ich nicht.

                            Kommentar


                            • #15
                              @TobiaZ wegen dem letzten absatz (warum einfach wenn ich das auch kompliziert erklären kann^^)

                              also die momentane ausgabe bsp.
                              __________________
                              ID | Name | Vorname |
                              ----------------------------------------------------------------
                              1 |schulze |hans |2 |meier |peter |3| schmidt |karl | (usw.)
                              ----------------------------------------------------------------
                              soll ne tabelle darstellen^^, die ausgabe stimmt, nur optisch geht das nun garnicht.

                              so schon eher,
                              bei einen ergebnis
                              ________
                              ID |1|
                              Name | schulze |
                              Vorname| hans|

                              bei zwei ergebnissen

                              ___________________
                              ID |1 |
                              Name | schulze |
                              Vorname| hans |
                              ------------------------------
                              __________________
                              ID |2|
                              Name | schulze|
                              Vorname| gustav|
                              -------------------------------
                              usw.
                              also die tabelle pro ergebnis untereinander dargestellt, inkl. überschriften usw. Wenn ich das versuche, bekomme ich leider immer nur ein suchergebnis. da gibts doch bestimmt einen trick womit die tabelle dann quasi untereinander kopiert wird.

                              lässt sich mit worten blöd erklären

                              Kommentar

                              Lädt...
                              X