php wenn nichts im suchen dann letzter artikel anzeigen

gruebel-gruebel

Erfahrenes Mitglied
Hallo,

Ich habe eine Such-Funktion in meinen Menü und möchte dass, wenn etwas nicht vorhanden ist, einen Text ausgibt „ätsch“ oder so ähnlich und die letzte Anzeige von Artikeln soll dann weiterhin angezeigt werden. Zur Zeit zeigt er gar nichts an.

PHP:
else{ echo "ätsch";}
// Daran wird natürlich noch gearbeitet, erst mal funktionieren soll es.

Gruß
grübel grübel
 
Hi,

ein bischen mehr Code muss es schon sein. Zu dem kann ich nur sagen, dass es ein syntaktisch korrekter else-Zweig ist. ;)
Wenn Du mit Sessions arbeitest, kannst Du speichern, welche Artikel der User zuletzt gesehen hat und die dann bei erfolgloser Suche wieder ausgeben.

LG
 
Hi,
hier ist mehr Code.

Im Suchen klicke ich ein Land an und trage eine Nummer ein und klicke dann auf SUCHEN
Und es werden die Artikel angezeigt die der Kunde sehen wollte. Das funktioniert auch bestens.

Und wie du es auch richtig verstanden hast es muss ein ELSE Zweig sein. Weil wenn die Zahl z.B. 1000 wäre die es nicht gibt für das Land soll die Artikel zu sehen sein die auch schon da waren und der Hinweis das es den Artikel nicht gibt oder so ähnl.
Ich arbeite mit SESSION
Das query „sql“ ist für die Anzeige der Artikel zuständig.
Das query „suchen2“ ist für das Umwandeln des Landes in eine Zahl zuständig, nicht zum Anzeigen von Artikel zuständig.
Zu der id ganz unten wird dann noch die Seitenzahl dahintergeschrieben falls geblättert wird.
Jetzt bin ich gespannt ob ich mich verständlich ausgedrückt habe.
Der Code ist vielleicht ein wenig umständlich aber die lieben Anfänger.
Gruß

PHP:
if (isset($suchen) || isset($zugehoer)){

      if (isset($_GET["suchen"])){

       $_SESSION['minr'] = $_GET["minr"];    
       $_SESSION['land'] = $_GET['land'];    

$suchen2 = mysql_query("
                   SELECT
                        bm_datenbank.minr,
                        bm_datenbank.bm_id,
                        bm_versionen.bm_id,
                        bm_kategorien.kat_bez,
                        bm_kategorien.kat_id,
                        bm_datenbank.zugehoer
                    FROM
                        bm_datenbank,
                        bm_versionen,
                        bm_kategorien,
                        bm_kat
                    WHERE
                        bm_datenbank.bm_id = bm_versionen.bm_id
                    and
                        bm_versionen.bm_id = bm_kat.bm_id
                    and
                        bm_kategorien.kat_id = bm_kat.bm_kat
                    and
                        bm_kategorien.kat_bez = '".$_SESSION['land']."'
                    AND
                        bm_datenbank.minr = ".$_SESSION['minr']."
                    group by
                        bm_kategorien.kat_bez
                    ") or die(mysql_error());

       $suchen1 = mysql_fetch_assoc($suchen2);

                     $_GET["zugehoer"] = $suchen1['zugehoer'];
                     $_GET["su_menu1"] = $suchen1['kat_id'];

          $_SESSION["zugehoer"] = $_GET["zugehoer"];
          $_SESSION["menu1"] = $_GET["su_menu1"];


          $sql = "SELECT
                    `bm_datenbank`.`bm_bez1`,
                    `bm_datenbank`.`minr`,
                    `bm_datenbank`.`bm_id`,
                    `bm_versionen`.`vers_id`,
                    `bm_versionen`.`art_nr`,
                    `bm_versionen`.`t_preis`,
                    `bm_versionen`.`bild_a`,
                    `bm_versionen`.`bm_id`,
                    `bm_datenbank`.`zugehoer`,
                    `bm_kategorien`.`kat_id`,
                    `bm_kat`.`bm_kat`
               FROM
                    `bm_datenbank`,
                    `bm_versionen`,
                    `bm_kategorien`,
                    `bm_kat`
               WHERE
                    `bm_datenbank`.`bm_id` = `bm_versionen`.`bm_id`
               AND
                    `bm_versionen`.`bm_id` = `bm_kat`.`bm_id`
               AND
                    `bm_kategorien`.`kat_id` = ".$_SESSION["menu1"]."
               AND
                    `bm_datenbank`.`zugehoer` = ".$_SESSION["zugehoer"]."
               GROUP BY
                     bm_versionen.vers_id
               ";

            $zugehoer = $_SESSION["zugehoer"];
            $menu1 = $_SESSION["menu1"];
            $suchen = $_SESSION["suchen"];

 }

echo "<table class=\"weite1\"><tr><td>".$_SESSION['land']." &#8594 ".$_SESSION['minr']." und dazu gehörige</td></tr></table>";

             /*
             * Die variablen $zugehoer und $menu1 wird im sql query übergeben.
             */

$sql = "SELECT
                    `bm_datenbank`.`bm_bez1`,
                    `bm_datenbank`.`minr`,
                    `bm_datenbank`.`bm_id`,
                    `bm_versionen`.`vers_id`,
                    `bm_versionen`.`art_nr`,
                    `bm_versionen`.`t_preis`,
                    `bm_versionen`.`bild_a`,
                    `bm_versionen`.`bm_id`,
                    `bm_datenbank`.`zugehoer`,
                    `bm_kategorien`.`kat_id`,
                    `bm_kat`.`bm_kat`
               FROM
                    `bm_datenbank`,
                    `bm_versionen`,
                    `bm_kategorien`,
                    `bm_kat`
               WHERE
                    `bm_datenbank`.`bm_id` = `bm_versionen`.`bm_id`
               AND
                    `bm_versionen`.`bm_id` = `bm_kat`.`bm_id`
               AND
                    `bm_kategorien`.`kat_id` = ".$menu1."
               AND
                    `bm_datenbank`.`zugehoer` = ".$zugehoer."
               GROUP BY
                     bm_versionen.vers_id
               ";

              $id = $_SESSION["menu1"];
              $id .= "&zugehoer=";
              $id .= $_SESSION["zugehoer"];
              $_SESSION["id"] = $id;

}
 
Hi,

Der Code ist vielleicht ein wenig umständlich aber die lieben Anfänger.

Jo, verstehe nicht wirklich genau, was Du da treibst, vor Allem das Variablen-Geschubse von $_GET und $_SEESION, aber egal...
Machen wir's mal grundsätzlich: In Deiner Session hältst Du den vorherigen Zustand fest. Dann machst Du Deine Abfragen auf Basis der aktuellen $_GET-Parameter (übrigens: nicht ungeprüft an die DB übergeben, Stichwort SQL-Injection!). Ist die Suche erfolgreich, kannst Du die Session-Variablen aktualisieren und das Ergebnis ausgeben. Falls nicht, machst Du Deine Abfragen auf die (alten) Session-Variablen und verwirfst die $_GET-Parameter.

LG
 
Hi,

z.B., ob die Parameter, die da übergeben werden, auch gültige Werte haben oder den richtigen Typ. Man kann ja die URL frei manipulieren ;)
Bei einer Suche nach Text ist das natürlich schwierig, aber dann sollte man die Parameter im SQL-String zumindest escapen (mit mysql_real_escape_string). Such' einfach mal nach "SQL-Injection".

LG
 
Ich habe mir das mal durchgelesen und habe es so verstanden.
Soll das "mysql_real_escape_string" im suchen schon geschrieben werden oder erst im query, der dann zur DB geschickt wird.
vorher:
and
bm_kategorien.kat_bez = '".$_SESSION['land']."'
nachher:
and
bm_kategorien.kat_bez = '".mysql_real_escape_string($_SESSION['land'])."'
wäre das so Richtig.

Das ist mein SUCHEN.

PHP:
echo"<li><a href=\"$_SERVER[PHP_SELF]\">S U C H E N<!--[if IE 7]><!--></a><!--<![endif]-->
<!--[if lte IE 6]><table class=\"iefix\"><tr><td><![endif]-->";
       echo"<ul>";
          echo"<li>";
            echo "<form action=\"../index1.php\" method=\"GET\" >";

echo"<table>
   <tr>
     <td width=\"33%\">Land:</td>
     <td width=\"*%\"colspan=\"2\">

         <select class=\"ab_such\" name=\"land\" cellspacing=\"2\" cellpadding=\"2\"size=\"4\">";

                 $arr_land = array('BRD','Berlin','DDR');
                      foreach($arr_land as $str_land){
                 echo '<option value="'.$str_land.'"';
                      if (isset($_GET['land']) and $_GET['land'] == $str_land)
                 {
                         echo 'selected';
                 }
                         echo '>'.$str_land.'</option>';
                 }
echo "
     </select>
     </td>
     </tr>
     <tr>
       <td width=\"33%\">MiNr:</td>
       <td width=\"25%\">
          <input type=\"Text\" name=\"minr\" size=\"3\" value=\"".$_GET["minr"]."\"></td>
       <td width=\"*%\" align=\"center\">
          <input type=\"submit\" name=\"suchen\" value=\"suchen\"></td>";
echo "</tr>
  </table>";
echo" </form>";

       $_SESSION["suchen"] = $_GET["suchen"];
               $suchen = $_SESSION["suchen"];

       $_SESSION['minr'] = $_GET["minr"];     // z.B. 442
       $_SESSION['land'] = $_GET['land'];     // z.B Berlin

echo"</li>";
echo"</ul>";
 
Danke, dann werde ich mal alle query`s ändern.

Jetzt aber zum Thema
Ich weis zwar das ich eine if brauche ob es die $_SESSION["suchen"] und die
$_SESSION["zugehoer"] gibt oder nicht. Nur ich weis nicht wohin habe schon einiges ausprobiert. Dazu muss ich sagen, dass dieses if in der bestehenden if rein muss.
Die ich schon gesendet habe.
Hier noch mal der Anfang.
Gruß
PHP:
if (isset($suchen) || isset($zugehoer)){

      if (isset($_GET["suchen"])){

       $_SESSION['minr'] = $_GET["minr"];     // z.B. 442
       $_SESSION['land'] = $_GET['land'];     // z.B Berlin
 
Hi,

habe den Fehler mit dem Suchen behoben.
Jetzt möchte ich gerne wissen was ich alles in die SESSION ( und wie) speichern muss um die letzte Seite zuspeichern. Damit ich die Seite wieder laden kann, wenn im Suchen nichts gefunden wird.
Gruß
grübel grübel
 
Zurück