Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit sortieren

Einklappen

Neue Werbung 2019

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

  • Problem mit sortieren

    Hallo alle zusammen,

    bevor ich meine Frage stelle, möchte ich, dass ihr wisst, dass ich mich so gut wie gar nicht auskenne, diesen Fehler aber unbedingt lösen muss.

    Also, ich versuche es so genau wie möglich zu erklären, sodass ihr mir so antworten könnt, dass auf ich verstehe, worum es geht.

    Ich habe eine dynamische Seite, die verschiedene Betriebe auflistet. Nun habe ich ein Formular mit Optionsschaltergruppe. Dieses Formular soll die aufgelisteten Betriebe entweder nach den Betrieben selbst, nach Branche oder nach Bezirk sortieren.
    Also schicke ich das Formular mit dem Submit-Button wie folgt in die Datensatzgruppe:

    Code:
    <form action="kaufmann_unternehmen.php" method="post" name="sort_form">	
    	<table width="459">
    	  <tr>
    	  	<td width="94" height="23">Sortieren nach:</td>
    	    <td width="113">
    	      <input type="radio" name="sort" value="unternehmen" checked="checked"/>
            Unternehmen</td>
    	    <td width="78">
    	      <input type="radio" name="sort" value="branche" />
            Branche</td>
    		<td width="67">
    	      <input type="radio" name="sort" value="bezirk" />
            Bezirk</td>
    		<td width="83"><input name="sort_button" type="submit" value="sortieren" /></td>
    	  </tr>
    </table>
    </form>
    (action="kaufmann_unternehmen.php" ist die Seite, auf der sich auch dieses Formular befindet, sie wird also nur aktualisiert)

    Hierhin kommt es dann: (Die variable $bezirk in der Select abfrage erkläre ich danach.)

    PHP-Code:
    if ($_POST['sort']=="bezirk")
    {
    $sortieren="ORDER BY BB_Bezirk ASC";
    }
    else if (
    $_POST['sort']=="branche")
    {
    $sortieren="ORDER BY BR_Branchen ASC";
    }
    else
    {
    $sortieren="ORDER BY BB_Firmenname ASC";
    }

    mysql_select_db($database_vwg$vwg);
    $query_rs_unternehmenmitbranche "SELECT BB_Nr, BB_Firmenname, BB_Branche, `BB_Gewünschte Zielgruppe`, BB_Bezirk, BR_BranchenNr, BR_Branchen FROM bn_betriebsbesichtigung_neu, br_branchen WHERE (`BB_Gewünschte Zielgruppe` = 1 OR `BB_Gewünschte Zielgruppe` = 3) AND BB_Branche = BR_BranchenNr $bezirk $sortieren";
    $rs_unternehmenmitbranche mysql_query($query_rs_unternehmenmitbranche$vwg) or die(mysql_error());
    $row_rs_unternehmenmitbranche mysql_fetch_assoc($rs_unternehmenmitbranche);
    $totalRows_rs_unternehmenmitbranche mysql_num_rows($rs_unternehmenmitbranche); 
    Das funktioniert soweit auch, aber auf der Seite habe ich ebenfalls ein dynamisches Listenfeld mit Bezirken eingebaut, dass die Betriebe nur aus dem ausgewählten Bezirk angezeigt werden, was ebenfalls funktioniert. Hier der Code für das Listenfeld.

    PHP-Code:
        <form name="bezirk_auswahl" method="post" action="kaufmann_unternehmen.php">
                <select name="bezirk" size="1">
            <?php
    do {  
    ?>
            <option value="<?php echo $row_rs_bezirk['BB_Bezirk']?>
            <?php
            
    if ($_POST['bezirk']==$row_rs_bezirk['BB_Bezirk'])
            {
            echo 
    "selected='selected'";
            }
            
    ?>><?php echo $row_rs_bezirk['BB_Bezirk']?></option>
            
                    <?php
    } while ($row_rs_bezirk mysql_fetch_assoc($rs_bezirk));
      
    $rows mysql_num_rows($rs_bezirk);
        if(
    $rows 0) {
          
    mysql_data_seek($rs_bezirk0);
          
    $row_rs_bezirk mysql_fetch_assoc($rs_bezirk);
      }
    ?> 
          </select>
         
          <input type="submit" name="bezirk_button" value="anzeigen" />
        
        </form>
    Diese Formular sende ich ebenfalls per If-Anweisung in die Datensatzgruppe:

    PHP-Code:
    if ($_POST['bezirk'])
    {
    $bezirk="AND BB_Bezirk like '".$_POST['bezirk']."' ";
    }
    else
    {
    $bezirk="";

    Ich hoffe ihr habt das soweit verstanden. Es funktioniert auch soweit noch, aber wenn ich jetzt Betriebe nur aus einem bestimmten Bezirk anzeige und nur diese angezeigten sortieren will, funktioniert das mit dem Sortieren-Formular nicht, da er mir wieder alle Betriebe sortiert, weil er ja die seite aktualisiert (also action="die seite") und dadurch wieder alle Betriebe angezeigt werden.

    Habt ihr vielleicht eine Idee, wie ich nur die Betriebe sortieren kann, welche gerade angezeigt werden??

    danke im Voraus, und vergesst nicht, dass ich mit den meisten Ausdrücken nicht viel anfangen kann, also erklärt es mir bitte so einfach wie möglich.

  • #2
    Hallo Cirrha,

    zunächst ein herzliches willkommen auf phpfriend.de!

    An sich habe ich dein Problem noch nicht wirklich verstanden, man könnte aber mit einem hidden-Feld eine Steuer-Variable mit übergeben und falls diese gesetzt ist, die Bezirk-Geschichte mit einem zusätzlichen WHERE im Statement einschränken. Hast du mal ein Online-Beispiel des Formulars? Vielleicht hilft das beim vorstellen besser...

    Kommentar


    • #3
      würde es dir was helfen, wenn ich dir diese eine seite schicke? du wirst zwar keine daten angezeigt bekommen, könntest aber den code besser nachverfolgen.

      Kommentar


      • #4
        Hallo Cirrha,

        falls du die Möglichkeit einer Online-Vorschau hast, ziehe ich diese vor, ansonsten kannst du mir die Datei auch schicken.

        Kommentar


        • #5
          Wenn ich das richtig sehe hast du für jedes deiner Felder ein eigenes Formular.
          Damit wird immer nur von einem die Daten übertragen.

          Packe die beiden Felder in einen gemeinsammen <form> - Tag.
          Damit stehen dir dann auch beide Informationen in PHP zur Verfügung.

          Kommentar


          • #6
            Hy Varon,

            danke erstmals für den Tipp! Es würde einwandfrei funktionieren, wenn ich nicht auch noch ein zweites Listenfeld mit "Nur aus folgender Branche anzeigen:" hätte, dass heißt wenn ich alle drei Felder in ein Formular packen würde, würde er "Nur aus folgender Branche anzeigen:" und "Nur aus folgendem Bezirk anzeigen:" gleichzeitig senden und ich hätte 2 Filter.

            Kommentar


            • #7
              Das ist ja erstmal nicht verkehrt, denn vielleicht möchte ich ja mal nach beiden Dingen gleichzeitig Filtern.

              Erweiter dein Script so das man bei den Filtern kein Kriterium auswählen muss und ich sehe darin kein Problem.

              Bsp:

              PHP-Code:
                <select name="bezirk" size="1"> 
                  <option value=""> Alle </option>
                      <?php 
              do {   
              //...
              PHP-Code:

              if (!empty($_POST['bezirk'])) 

              $bezirk="AND BB_Bezirk like '".$_POST['bezirk']."' "
              //... 
              Außerdem solltest du externe Variablen nicht so ungeprüft in dein Query übernehmen.

              Kommentar


              • #8
                http://rapidshare.com/files/84539629/betriebe.jpg.html

                hier ein bild, um das ganze etwas verständlicher darzustellen...das problem ist, dass wenn ich zum beispiel betriebe nur aus "eisenstadt" anzeigen will nimmt er den wert, der in "branchen" steht mit.

                wie genau ist das mit dem !empty gemeint, denn im listenfeld steht doch immer ein wert.

                Kommentar


                • #9
                  Hola,

                  das Varon Dir sagen will ist, dass Du zwar prüfst, ob etwas in dem POST-Array steht, aber nicht was.
                  Damit öffnest Du diesem hier Tor und Tür: http://de.wikipedia.org/wiki/SQL-Injektion

                  Aber am besten gehst Du eins nach dem anderen an.


                  Bis dääähne.

                  Kommentar


                  • #10
                    Ich habe dein Problem schon verstanden.
                    Vermutlich hab ich mich nur unklar ausgedrückt.

                    Du musst deinen Filter so aufbauen das standard mäßig alle Bezirke und Branchen gewählt werden.
                    Und erst wenn gezielt einer ausgewählt wurde musst du Filtern.
                    Du musst ja in deine Listbox nicht nur Werte aus der Datenbank schreiben sondern
                    kannst auch selber noch in den Quelltext noch eigene option angeben.
                    Wichtig ist auch das wenn die beim <option> -tag das Atribut Value angibst wird dieser Übergeben
                    und nicht der wert zwischen "<option>" und "</opion>"

                    Bsp:
                    Code:
                    <select name="tier">
                    <option value="maus"> Katze </option>
                    Im POST oder GET Array würde nacher Maus stehen

                    Hier noch ein kleines Beispiel das du 1 zu 1 Übernehmen und testen kannst.
                    Dieses zeigt hoffenltich warauf ich hinaus will.

                    PHP-Code:
                    <?
                        if(isset($_POST['bezirk'],$_POST['branche']))
                        {
                            echo '<font color=red>Bezirk: ';
                            
                            if(empty($_POST['bezirk']))
                            {
                                echo 'ALLE wurden gewählt<hr>';
                            }
                            else
                            {
                                echo $_POST['bezirk'].'<hr>';
                            }
                            echo '</font>';
                            
                            echo '<font color=blue>Bezirk: ';
                            echo 'Branche: ';
                            
                            if(empty($_POST['branche'])) 
                            {
                                echo 'ALLE wurden gewählt<hr>';
                            }
                            else 
                            {
                                echo $_POST['branche'].'<hr>';
                            }
                            
                            echo '</font>';
                            
                            echo '[b]Hier Folgt eine Debug Ausgabe[/b]
                    ';
                            var_dump($_POST);
                            echo '<hr>';
                        }    
                    ?>

                        <form name="meine Auwahl" method="post" action="<? echo $_SERVER['SCRIPT_NAME'] ?>"> 
                        Bezirk: <select name="bezirk" size="1"> 
                        <option value=""> ALLE </option>
                        <option value="Berlin"> BERLIN </option>
                        <option value="Köln"> KÖLN </option>
                        </select>

                        Branche:
                        <select name="branche" size="1"> 
                        <option value=""> ALLE </option>
                        <option value="Automobiel"> Automobiel </option>
                        <option value="Käse"> Käse </option>
                        </select>
                        <input type="submit" value="anzeigen">
                        </form>

                    Kommentar


                    • #11
                      Hallo Cirrha,

                      ich habe mir den Code, den du geschickt hast genauer angesehen:

                      Für dein Problem musst du an sich nur feststellen, ob eine Auswahl für Bezirk _und_ Branche getroffen wurde und das in eine WHERE-Clause verpacken. Um das "gemeinsam" zu realisieren, solltest du _ein_ Formular verwenden, da du in der aktuellen Version immer nur _eine_ Information gleichzeitig erhälst. Verpacke also die Auswahl-Geschichten in _ein_ Formular und frage entsprechend die Parameter ab.

                      Kommentar


                      • #12
                        Hallo Cirrha,

                        konntest du mit meinen Hinweisen das Problem lösen?

                        Kommentar

                        Lädt...
                        X