Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Verständnisfrage bei n Übereinstimmungen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Verständnisfrage bei n Übereinstimmungen

    Hallo,

    ich hoffe ich bring das nun ordentlich rüber.

    Mein Problem steckt in einem Formular was Werte in der Datenbank überprüft und dementsprechend ausgibt.
    Was wunderbar funktioniert ist, wenn es mehrere Werte gibt >1 ( größer eins ) dann soll er mir die Auswahlmöglichkeit geben den bestimmten Wert zur weiterverarbeitung auszuwählen.
    ( er list ja nur alles aus was übereinstimmt und zeigt es dementsprechend an )

    Nur was ich nicht möchte ist, das mir diese Auswahl angezeigt wird wenn es nur einen Wert gibt der auf das Suchergebniss übereinstimmt.

    Wenn ich im Suchfeld 'test' eingebe, gibt er mir die Auswahl von Test1 und Test2 raus.Zeigt aber auch mit Limit1 das erste Ergebniss an was er findet.

    Wenn ich aber nun im Suchfeld ( zu testzwecken ) nur eine '1' eingebe kommt er auch zu der Auswahlmöglichkeit Test1 und zeigt mir auch Test1 extra noch an ( mit Limit1 aus der SQL-Abfrage ).

    Und hier kommt nun meine Verständnisfrage ... wenn ich nun eine Anfrage an SQL stelle und er nur einen Wert findet soll er nicht erst die Auswahlmöglichkeit zeigen sondern gleich den einen Wert ausgeben. Wie kann ich also die Abfrage so mit der IF-Klausel verknüpfen wenn ein Wert vorhanden zeige NICHT die Auswahl an.

    Code der Abfrage :
    Code:
    <!-- DIV haupt2 START --><div id="haupt2">
    <p>Ausgabe</p>
    <br />
    <hr />
    <!-- START-FORMULAR zum suchen der Eingabe des Users -->
    <form action="suche.php" method="GET">Name : &nbsp;&nbsp;&nbsp;
    <input type="text" name="such" /> &nbsp;&nbsp;&nbsp;
    <input type="submit" value="Suchen" />
    </form>
    <!-- PHP / MYSQL - Suchroutine -->
    <?php
    include '../connect.php';
    $user       =   $_GET['such'];
    $auswahl    =   $_GET['id'];
    
    
    if ($_GET['such'])                              // Wenn Suche gefüllt ist zeig das Suchergebniss an
        {
        if ($_GET['such'] AND ($_GET['id']))        // Wenn Suche und ID gefüllt ist zeig das Suchergebniss an
            {
            echo '<hr />';
    
            echo "User $user und $auswahl stehen";
            $weiter    =   mysql_query("SELECT * FROM `test` WHERE `ID` ='$auswahl' LIMIT 0 , 30");
            while ($zeig=mysql_fetch_array($weiter))
            {
            echo '<br />';
            echo 'Name :' . $zeig['Name'] . '<br />';
            echo 'Datum :' . date('d.m.Y');
            }
            exit;
            }
    
        echo '<hr />';
    
        echo "Eingabe <b>$user</b> wird verarbeitet<br />";
        $anzeigen   =   mysql_query("SELECT * FROM `test` WHERE `Name` LIKE '%$user%'");
        while ($zeig=mysql_fetch_array($anzeigen))      // Solange wie Übereinstimmungen vorhanden sind
        {
        echo '<a href="suche.php?such='.$user.'&id='.$zeig['ID'].'">'.$zeig['Name'].'</a><br />';
        }
        echo '<hr />';
        $anzeigen   =   mysql_query("SELECT * FROM `test` WHERE `Name` LIKE '%$user%' LIMIT 1");
        while ($zeig=mysql_fetch_array($anzeigen))      // Solange wie Übereinstimmungen vorhanden sind
    
        {
        echo 'Name :' . $zeig['Name'] . '<br />';
        echo 'Datum :' . date('d.m.Y');
        }
        }
    ?>
    <!-- DIV haupt2 ENDE --></div>

  • #2
    1. muss es nicht
    PHP-Code:
    if (isset($_GET['such'])) 
    lauten?
    2. würde ich es persönlich über method=post machen.
    3. für die Sicherheit noch
    PHP-Code:
    mysql_real_escape_string 
    ACHTUNG!!! SIGNATUR!!!
    PHP-Code:
    var_dump($gehirn); exit; 
    0 ??? WTF ? nervtag.de | freutag.net | friendmetr.com

    Kommentar


    • #3
      Um herraus zu finden, wie viele Ergebnisse es gibt, kannst du folgendes verwenden.
      mysql_num_rows
      Oder du verwendest count()

      Grundsätzlich sollte ganz oben in jedem skript was man progt folgendes stehen.
      PHP-Code:
      error_reporting(E_ALL|E_STRICT);
      ini_set('DISPLAY_ERROR',TRUE); 
      Genau so sollte man mysql_error() verwenden.

      Zum schluss macht es Sinn sich an das Eva Prinzip zu halten.
      EVA Prinzip

      würde ich es persönlich über method=post machen.
      Eine suche über post ist von der Usability her ungünstig. Verwende da mal den zurück button.

      Kommentar


      • #4
        war noch nicht fertig

        Kommentar


        • #5
          @MaiKaY

          Mit 'isset' hast Du recht, das ändere ich noch.

          @Creator

          stimmt, nur leider schmeist er mir gleich 'Undefined index: id' um die Ohren

          Wieso das, die Variable kann er doch auch erst erhalten sofern etwas abgesendet wurde ?!?! *ohje*

          Würde die Anfrage bei der Ausgabe so aussehen wenn ich über rows gehe :

          Code:
          $ausgabe = mysql_query('SELECT * FROM test')
          $anzahl = mysql_num_rows($ausgabe);
          
          if (isset($_GET['such'] AND (isset($anzahl['1']))
          {
           echo 'blabla';
          }
          elseif (isset($_GET['such'] AND (isset($anzahl['mehr als 2 ??']))
          {
           echo 'blabla2';
          }

          Kommentar


          • #6
            PHP-Code:
            If(mysql_num_rows($ausgabe) <= 1){
             echo 
            "bla";
            }else{
             echo 
            "bla2";

            ACHTUNG!!! SIGNATUR!!!
            PHP-Code:
            var_dump($gehirn); exit; 
            0 ??? WTF ? nervtag.de | freutag.net | friendmetr.com

            Kommentar


            • #7
              stimmt, nur leider schmeist er mir gleich 'Undefined index: id' um die Ohren
              Das bedeutet das id wohl nicht existiert.

              Würde die Anfrage bei der Ausgabe so aussehen wenn ich über rows gehe
              Probier es doch einfach mal aus.

              Get wird noch zu Post ... wollte erstmal schaun ob die Werte auch so übergeben werden wie erwünscht. Mit 'isset' hast Du recht, das ändere ich noch.
              Wie in #3 schon gesagt macht es kein Sinn für eine Suche.

              Kommentar


              • #8
                Zitat von Creator Beitrag anzeigen
                Das bedeutet das id wohl nicht existiert.

                Wie in #3 schon gesagt macht es kein Sinn für eine Suche.
                Danke Euch erstmal, ich fang nochmal von vorne an ... ich hab zu viel drin was noch viel zu falsch ist


                Ich muß später aber auf POST wieder zurück, da ich meine abfragen in der Index auf GET-Variablen überprüfe und die Seiten anzeige. Werd mir das noch mit den White-Listen anschaun ! Um vielleicht da noch etwas rauszubringen ( EVA )

                Nur was mich jetzt ernsthaft berührt ist die Fehlermeldung durch das Error_reporting ... es ist doch klar das ich keinen Wert habe sofern das Formular nicht abgeschickt wurde. Erst dann kann er einen Wert setzen der durch eine Variable gesetzt wird und ausgelesen wird.

                Wenn ich nun bevor alles startet die Variable mit einem Wert fülle, meckert er nicht aber sobald ich den Wert mit dem Formular ändern möchte hab ich das selbe Problem.

                Nun wird die Verständnisfrage viel zu groß ... daher erstmal Danke für die Hilfe und ich setz mich nochmal ran ! .... Erledigt ist es ja nicht, wird es dennoch geschlossen oder kann ich es so stehen lassen. Werd später nochmal darauf zurückkommen sofern ich weiterkomme

                Gruß MR

                Kommentar


                • #9
                  Ich muß später aber auf POST wieder zurück, da ich meine abfragen in der Index auf GET-Variablen überprüfe und die Seiten anzeige.
                  Du kannst ruhig weiter get verwenden. Du musst nur in deinem Form ein hiddenfeld erstellt und dein Action Parameter mit übergeben. Dann hast du ne url in dieser Form als Beispiel:
                  index.php?action=suche&suche=suchstring
                  Geht wunderbar.

                  Nur was mich jetzt ernsthaft berührt ist die Fehlermeldung durch das Error_reporting ... es ist doch klar das ich keinen Wert habe sofern das Formular nicht abgeschickt wurde. Erst dann kann er einen Wert setzen der durch eine Variable gesetzt wird und ausgelesen wird.
                  Index Fehler könnte man Ignorieren da man die Fehlermeldung ja auch wieder abschalten kann.
                  Allerdings wahne ich davor, weil es das debugen erschwärt. Solltest du dich mal wundern warum du keine Fehlermeldung bekommst und eine deiner Funktionen nicht Funktioniert könnte es durchaus an diesen Fehlern liegen du suchst dich dann wild.

                  Daher betrachte ich es als saubere Programmierung wenn man auch diese Indexfehler beseitigt.
                  Kannst ja ganz einfach mit isset Prüfen ob diese Variable existiert.

                  Werd mir das noch mit den White-Listen anschaun ! Um vielleicht da noch etwas rauszubringen ( EVA )
                  Eva ist ein muss. Ohne die einhaltung wirst du früher oder später weitere Probleme bekommen. Daher als Tip grundsätzlich beachten.

                  Kommentar


                  • #10
                    Oh man, ich glaub es nun zu haben.

                    Wenn ein Fehler da ist muß der ausgemerzt werden
                    Mein Fehler ( sofern ich nun richtig liege ) war einfach der das ich die Variable "zu früh" ausgelesen habe und nicht wie es wohl sein sollte erst wenn ich sie brauche.

                    Hab mit if abgefragt ob die Variable gesetzt wurde ansonsten fülle sie mit "nix" und mach weiter ... Wenn gesetzt dann überschreibe "nix" mit dem Wert der übergeben wurde.
                    Ja schau es klappt

                    Wegen später : derzeit läuft die Überprüfung mit
                    Code:
                    if(isset($_GET['site']))
                    switch($_GET['site'])
                    {
                    case 'aseite';
                    include('seite-a.php');
                    break;
                    }
                    somit übergibt er den Link : index.php?site=aseite

                    wenn ich jetzt auch mit einem hidden-feld arbeite würde dann index.php?site=aseite&site=yxc.php stehen.

                    doch das zermürbt mir die Überprüfung, sollte nichts übereinstimmen so springe auf das :

                    Code:
                        }
                        else{ // wenn Get Parameter 'site' kein Wert enthaelt
                        include('include/haupt.html');
                        }
                    und da alles noch extra zu setzen ... ohha

                    Aber da erstmal EVA zu gemüte führen, da wird sich noch was finden *hoff*

                    THX

                    Kommentar


                    • #11
                      index.php?site=aseite&site=yxc.php
                      Wenn man 2 mal den gleichen Parameter übergibt, dann passiert das schon mal.

                      Wenn gesetzt dann überschreibe "nix" mit dem Wert der übergeben wurde.
                      Für nix gibt es sogar ein Begriff schimpft sich NULL. Daher würde ich das machen:
                      PHP-Code:
                      <?php
                      $test 
                      null;
                      ?>

                      Kommentar


                      • #12
                        So nun geht es wie ich es haben wollte.
                        Wäre das also nun doch erstmal erledigt.

                        Code:
                        <?php
                        error_reporting(E_ALL|E_STRICT);
                        ini_set('DISPLAY_ERROR',TRUE);
                        include '../connect.php';
                        ?>
                        <div id="haupt2"><p>Ausgabe</p>
                        <hr />
                        <form action="auswertung.php" method="post">Name | Badge : &nbsp;&nbsp;&nbsp;
                        <input type="text" name="such" /> &nbsp;&nbsp;&nbsp;
                        <input type="submit" value="Suchen" />
                        </form>
                        <?php
                        echo '<hr />';
                        if(isset($_POST['such']))
                        {
                            $such   =   $_POST['such'];
                            echo 'Ihre Anfrage : '.$such.' <br />';
                            $anzeigen = mysql_query("SELECT * FROM test WHERE `Name` LIKE '%$such%'");
                            if(mysql_num_rows($anzeigen) <=1)
                            {
                            while ($zeig=mysql_fetch_array($anzeigen))
                            {
                                echo $zeig['Name'] .' '. date('d.m.Y').'<br />';
                            }
                            }
                            else
                            {
                                $anzeigen = mysql_query("SELECT * FROM test WHERE `Name` LIKE '%$such%'");
                                while ($zeig=mysql_fetch_array($anzeigen))
                            {
                                echo $zeig['Name'] . '<br />';
                            }
                            }
                        
                        }
                        ?>
                        <hr /><a href="auswertung.php">HAUPT</a>   <hr />
                        
                        <!-- DIV haupt2 ENDE --></div>

                        Kommentar


                        • #13
                          Zitat von Creator Beitrag anzeigen
                          Wenn man 2 mal den gleichen Parameter übergibt, dann passiert das schon mal.


                          Für nix gibt es sogar ein Begriff schimpft sich NULL. Daher würde ich das machen:
                          PHP-Code:
                          <?php
                          $test 
                          null;
                          ?>
                          *gg* da hab ich mich mit dem schreiben überschlagen ^^

                          das mit dem 'nix' sollte das auch bedeuten da ich das nicht gesetzt hatte, den nun wird er nur weitermachen sofern etwas vorhanden ist.



                          @Edit

                          kann man mir kurz noch sagen, wieso ich nix eingebe und bei drücken auf den submit-button meine Datenbank ausgelesen wird ?!?!?!


                          Übergibt er nun einen Wert 'null' beim absenden an die Datenbank und liest deshalb alles aus ... aber warum den das, vorher konnte ich auf submit drücken ohne das er was machte da ide variable=such noch keinen Wert hatte und ich hab ja nun auch keinen Wert übergeben ( auch kein 'null' )

                          Kommentar


                          • #14
                            Mach mal aus
                            PHP-Code:
                            if(mysql_num_rows($anzeigen) <=1
                            das
                            PHP-Code:
                            if(mysql_num_rows($anzeigen) ==1
                            ACHTUNG!!! SIGNATUR!!!
                            PHP-Code:
                            var_dump($gehirn); exit; 
                            0 ??? WTF ? nervtag.de | freutag.net | friendmetr.com

                            Kommentar


                            • #15
                              ist geändert !



                              hab Post zu Get gemacht und er zeigt mir nun ...php?such=

                              hier übergibt er nichts an die abfrage und nicht bedeutet ja alles.


                              @EDIT

                              wenn ich if ohne isset ausführe, kann ich auf submit drücken ohne das etwas kommt ... naja, dann halt so aber indexfehler erscheint damit auch wieder *schnief*

                              Kommentar

                              Lädt...
                              X