[PHP & MySQL] Immer noch Problem: geht nicht, wenn Wert % annimmt.

bambi.bummler
Hallo fröhlich
Für die Galerie von Invidia habe ich ein Formular, bei dem man wählen kann, ob man alle ansehen will oder nur spezifische Rassen, Farben, und so. Wenn man alle ansehen will habe ich als Wert %.

Als SQL habe ich nun:

SELECT id FROM bilder WHERE status = 'frei' AND farbe LIKE '$farbe'

Wenn ich den WHERE teil auf status beschränke kommen 20 Seiten, wenn ich das aber so nehme kommen gerade mal 4, sprich: es wird nicht alles angezeigt. Was kann das sein?

LG, Tia
Julia712
Hey,
was hast du denn in der Variable $farbe drin stehen?
Der zeigt dir ja nur an, wo der Status frei ist und wo die Farbe gleich dem Filter ist.

Lg, Julia
bambi.bummler
Die Farbe wird bedingt durch ein Feld in dem man die Farben auswählen kann, zB. Fuchs, Rappe, Schimmel, Buckskin, etc. Dann bei Rasse die verschiedenen Rassen wie zB. Berber, Araber, etc. Und dann bei Art Vollblut, Pony, Barock, etc.
Und dann gibt es bei allen drei Feldern den Punkt 'Alle' bei dem der Wert % annimmt.
Julia712
Hey,

klingt ja alles ganz logisch ^.^
Filtert der denn richtig und macht die Mukken nur bei dem 'alle' oder sucht der generell nicht alles raus?


Lg, Julia
Katharina Weber
Du hast doch die Farbe auch in der Datenbank stehen oder?

Warum schreibst du dann farbe LIKE $farbe und nicht ganz einfach farbe ='$farbe'

Sofern das Datenbankfeld auch farbe heißt. Theoretisch müsste es dann gehen.

Viele Grüße, Katharina
Julia712
Bei 'ner Abfrage ist LIKE und = ein und das gleiche xD
Katinka
LIKE und = sind alles andere als gleich!!!! bitte hier nicht falsche infos verteilen!!!!

in dem fall wie oben verwendet, entspricht es dem gleichen, und könnte der abfrage mühe machen, da LIKE eigendlich nicht nach etwas bestimmtem sucht sondern mindestens eine variabele drinne hat. zB wenn man nach LIKE '$farbe%' suchen würde, $farbe könnte dann als rot definiert werden und gefunden würde auch rotgrün.
bambi.bummler
Das LIKE verwende ich, da der Wert etwas spezifisches ABER AUCH % annehmen kann, wenn ALLE gesucht werden. Meines Wissensstandes nach geht es nicht wenn ich nach % suche und = verwende.

Wenn ich nach "alle" suche kommen nicht alle. Eigentlich müssten 400 Bilder ausgegeben werden, kommen tun jedoch nur 100 oder so. Und wenn ich eine Farbe einstelle kommen neuerding nur noch die Araber. Ich poste hier jetzt mal das Formular und die ganze SQL.

Formular:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
<form action="aussehen.php?sec=ja" method="post" name="form1" target="content" id="form1">
  <p>W&auml;hle nun aus den verschiedenen Kriterien, wie dein Charakter aussehen soll.<br />
  </p>
  <table width="30%" border="0" align="center">
    <tr>
      <td class="zeilegreen"><strong>Farbe</strong></td>
      <td class="zeileblue"><select name="farbe" class="zeileblue" id="farbe">
        <option value="%">Alle</option>
        <option value="Schimmel">Schimmel </option>
        <option value="Rappe">Rappe</option>
        <option value="Brauner">Brauner</option>
        <option value="Fuchs">Fuchs</option>
        <option value="Palomino">Palomino</option>
        <option value="Buckskin">Buckskin</option>
        <option value="Falbe">Falbe</option>
        <option value="Schecke">Schecke</option>
        <option value="Sonstige">Sonstige</option>
      </select>      </td>
    </tr>
    <tr>
      <td class="zeilegreen"><strong>Art</strong></td>
      <td class="zeileblue"><select name="art" class="zeileblue" id="art">
        <option value="%">Alle</option>
        <option value="Warmblut">Warmblut</option>
        <option value="Vollblut">Vollblut</option>
        <option value="Kaltblut">Kaltblut</option>
        <option value="Barock">Barock</option>
        <option value="Pony">Pony</option>
        <option value="Fohlen">Fohlen</option>
      </select>      </td>
    </tr>
    <tr>
      <td class="zeilegreen"><strong>Rasse</strong></td>
      <td class="zeileblue"><select name="rasse" class="zeileblue" id="rasse">
        <option value="%">Alle</option>
        <option value="Araber">Araber</option>
        <option value="Berber">Berber</option>
        <option value="Friese">Friese</option>
        <option value="Shetland Pony">Shetland Pony</option>
      </select>      </td>
    </tr>

    <tr>
      <td colspan="2" class="zeilegreen"><input name="button" type="submit" class="zeileblue" id="button" value="Senden" /></td>
    </tr>
  </table>
  <p>&nbsp;    </p>
</form>


Abfrage:
php:
1:
2:
3:
$abfrage "SELECT * FROM bilder WHERE status = 'frei' AND farbe LIKE '$farbe' ORDER BY id ASC  LIMIT $start$eintraege_pro_seite";
                                                                                    $ergebnis mysql_query($abfrage);
                                                                                    while($row mysql_fetch_object($ergebnis))


Da habe ich jetzt aber aus "Fehlersuchgründen" mal nur die farbe drinnen, wenn es dann halbwegs gehen sollte kommen auch die abfragen nach art und rasse wieder mit rein.
Katinka
ähm... du fragst auch nit alle ab,

LIMIT $start, $eintraege_pro_seite

damit lässte nur n teil ausgeben!
bambi.bummler
Das ist mir vollkommen klar. Ich hab ja ne Blätterfunktion drinnen. Aber es gibt nicht alle Seiten aus. Lasse ich den Teil weg "WHERE farbe LIKE '$farbe'" gibt die Seite mir 20 Seiten aus oder so. Füge ich es wieder an kommen nur 5 Seiten, bei gleicher Einstellung, nämlich das Alle ausgegeben werden sollen.

[CODE]
$seite = $_GET["seite"];


if(!isset($seite))
{
$seite = 1;
}





$eintraege_pro_seite = 15;



$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;

$farbe = $_POST["farbe"];
$art = $_POST["art"];
$rasse = $_POST["rasse"];

$abfrage = "SELECT * FROM bilder WHERE status = 'frei' AND farbe LIKE '$farbe' ORDER BY id ASC LIMIT $start, $eintraege_pro_seite";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{


$id = $row->id;
$url = $row->url;
$farbe = $row->farbe;
$art = $row->art;
$rasse = $row->rasse;
$fotograf = $row->fotograf;
$homepage = $row->homepage;

echo "
<table width=\"400\" border=\"0\" align=\"center\">
<tr>
<td class=\"zeilegreen\"><b>&raquo; $id</b></td>
</tr>
<tr>
<td class=\"zeileblue\"><img src='$url' border='0'><br>
<a href='$homepage' target='_blank'>(C) $fotograf</a></td>
</tr>
<tr>
<td class=\"zeilegreen\">
<b>Farbe:</b> $farbe<br>
<b>Art: </b> $art<br>
<b>Rasse: </b> $rasse
</td>
</tr>
</table>

";
}




$result = mysql_query("SELECT id FROM bilder WHERE status = 'frei' AND farbe LIKE '$farbe'");
$menge = mysql_num_rows($result);


$wieviel_seiten = $menge / $eintraege_pro_seite;


echo "<div align=\"center\">";


for($a=0; $a < $wieviel_seiten; $a++)
{
$b = $a + 1;


if($seite == $b)
{
echo " <b>$b</b> ";
}


else
{
echo " <a href=\"?seite=$b&farbe=$farbe&rasse=$rasse&art=$art&sec=b\">$b</a> ";
}


}
echo "</div>";

[\CODE]

Und hier mal wie die Seite aussieht:
Klick
Julia712
@ Katinka:
1. Kann man das auch etwas freundlicher sagen und
2. gibt der bei mir bei LIKE und = immer absolut das gleiche aus -ganz egal, was ich abfrage.

@ Tiamat:
Sorry für Spam...
Katinka
Zitat:
Original von Julia712
@ Katinka:
1. Kann man das auch etwas freundlicher sagen und
2. gibt der bei mir bei LIKE und = immer absolut das gleiche aus -ganz egal, was ich abfrage.

@ Tiamat:
Sorry für Spam...


dann hast du schlicht und einfach den sinn von LIKE noch nicht begriffen!

Tiamat:

was passiert wenn du = verwendest? rechtschreib fehler beachtet?
bambi.bummler
Ich habe jetzt alle LIKE's mit = ausgetauscht und passieren tut: Es werden 3 Seiten zu je 15 Bildern ausgegeben. Da macht 45 Bilder werden gezeigt. Dabei müssten es 347 Bilder sein, die ausgelesen werden. Also 24 Seiten. Kanst auch gern nachschauen, habs jetzt mal so drin mit allem als =.
http://invidia-fatalis.com/aussehen.php
Katinka
anschauen können wirn it, du hast n login Augenzwinkern

zum restlichen thema:
Rechtschreibung? würd ja sagen zeig mal deine datenbank aber da wirste selber gucken müssen wegen rechtschreibfehler, den danach hört es sich an sry
bambi.bummler
Achja, ich Doofie xD

Ich hab mal die DB im Anhang, jedenfalls nen Screen von der Struktur.
Katinka
und die farben der pferde oder was es sind hassu alles richtig geschrieben?
bambi.bummler
sowohl in db, als auch im select, ja.Das Problem kommt ja auch nicht wenn ich nach Farbe oder so sortieren lass, dann klappt alles. Das Problem besteht nur, wenn ich ALLE ausgeben will, sprich, wenn der Wert % annimmt.
Katinka
dann gehen mir ehrlich gesagt die ideen aus...
bambi.bummler
mh... trotzdem danke für deine bemühungen, er muckt wirklich nur rum, wenn der wert % annimmt.
1Sm!le
Umgehung: Überprüfe, ob er alle ausgeben soll, und wenn ja, lasse die ganze Bedingung weg in deiner SQL-Anfrage.