Gegen Bilderklau - Das Original (https://www.gegen-bilderklau.net/index.php)
- Design, Website, Copyright (https://www.gegen-bilderklau.net/board.php?boardid=80)
--- Homepagehilfe (https://www.gegen-bilderklau.net/board.php?boardid=27)
---- Homepagehilfe - Archiv (https://www.gegen-bilderklau.net/board.php?boardid=139)
----- [PHP & MySQL] Immer noch Problem: geht nicht, wenn Wert % annimmt. (https://www.gegen-bilderklau.net/thread.php?threadid=153812)
Geschrieben von bambi.bummler am 14.04.2009 um 21:19:
Immer noch Problem: geht nicht, wenn Wert % annimmt.
Hallo
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
Geschrieben von Julia712 am 15.04.2009 um 11:30:
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
Geschrieben von bambi.bummler am 15.04.2009 um 21:47:
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.
Geschrieben von Julia712 am 15.04.2009 um 21:56:
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
Geschrieben von Katharina Weber am 15.04.2009 um 23:50:
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
Geschrieben von Julia712 am 16.04.2009 um 00:22:
Bei 'ner Abfrage ist LIKE und = ein und das gleiche xD
Geschrieben von Katinka am 16.04.2009 um 00:27:
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.
Geschrieben von bambi.bummler am 16.04.2009 um 08:44:
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ä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> </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.
Geschrieben von Katinka am 16.04.2009 um 10:09:
ähm... du fragst auch nit alle ab,
LIMIT $start, $eintraege_pro_seite
damit lässte nur n teil ausgeben!
Geschrieben von bambi.bummler am 16.04.2009 um 13:17:
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>» $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
Geschrieben von Julia712 am 16.04.2009 um 15:41:
@ 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...
Geschrieben von Katinka am 16.04.2009 um 17:16:
| 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?
Geschrieben von bambi.bummler am 16.04.2009 um 17:21:
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
Geschrieben von Katinka am 16.04.2009 um 17:22:
anschauen können wirn it, du hast n login
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
Geschrieben von bambi.bummler am 16.04.2009 um 17:25:
Achja, ich Doofie xD
Ich hab mal die DB im Anhang, jedenfalls nen Screen von der Struktur.
Geschrieben von Katinka am 16.04.2009 um 17:29:
und die farben der pferde oder was es sind hassu alles richtig geschrieben?
Geschrieben von bambi.bummler am 16.04.2009 um 17:29:
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.
Geschrieben von Katinka am 16.04.2009 um 17:30:
dann gehen mir ehrlich gesagt die ideen aus...
Geschrieben von bambi.bummler am 16.04.2009 um 17:31:
mh... trotzdem danke für deine bemühungen, er muckt wirklich nur rum, wenn der wert % annimmt.
Geschrieben von 1Sm!le am 16.04.2009 um 20:08:
Umgehung: Überprüfe, ob er alle ausgeben soll, und wenn ja, lasse die ganze Bedingung weg in deiner SQL-Anfrage.
Forensoftware: Burning Board, entwickelt von WoltLab GmbH