Problem mit for-Schleife
Alex S.
- php
Hallo zusammen und fröhliche Weihnachten,
habe vor eine Suche zu programmieren. Bin schon relativ weit, allerdings hängt er sich bei einer for-Schleife immer wieder auf.
Hier erst einmal der Code:
---------------------------------------------
$suchbegriff = rtrim($_POST['suche']); // Leerzeichen am Ende des Strings löschen
$suchbegriff = ltrim($suchbegriff); // Leerzeichen am Anfang des Strings löschen
$suchbegriff = explode(" ", $suchbegriff); // String 2 Array
$link = mysql_connect($dbhost, $dbuser, $dbpass)
or die ("Could not connect");
mysql_select_db ($dbname)
or die ("Could not select database");
if (count($suchbegriff) >= 2) { // Falls mehrere Suchbegriffe
$query = "
SELECT *
FROM content
WHERE (
content_headline LIKE '%" . $suchbegriff[0] . "%' OR
content_content LIKE '%" . $suchbegriff[0] . "%')";
for ($i=1; $i=count($suchbegriff); $i++) {
$query .= "AND (
content_headline LIKE '%" . $suchbegriff[$i] . "%' OR
content_content LIKE '%" . $suchbegriff[$i] . "%')";
}
$query .= " LIMIT 0 , 30 ";
}
else { // Falls nur ein Suchbegriff eingegeben wurde
$query = "
SELECT *
FROM content
WHERE (
content_headline LIKE '%" . $suchbegriff['0'] . "%' OR
content_content LIKE '%" . $suchbegriff['0'] . "%'
) LIMIT 0 , 30 ";
}
---------------------------------------------
Wie ihr seht benötige ich die for-schleife bei der mysql Auswahl, um alle Begriffe durch die Datenbank suchen zu lassen muss dementsprechend die $query Variable die Werte enthalten.
Aber es endet komischerweise in einer Endlos-Schleife - aber warum? er hat doch als Ende count($suchbegriff).
Habt ihr einen Rat?
LG Alex
p.s. habe es schnell programmiert - die synthax ist nicht 100% - sorry
Hi,
for ($i=1; $i=count($suchbegriff); $i++) {
Willst Du $i mit $count vergleichen oder willst Du tatsächlich ne Zuweisung machen?
cu,
Andreas
Hi!
Willst Du $i mit $count vergleichen oder willst Du tatsächlich ne Zuweisung machen?
eigentlich dachte ich, dass die for-schleife so gebildet wird also
for (
$i=1; // Fange bei eins an
$i=count;($suchbegriff) // Höre auf, wenn alle suchbegriffe drin sind
$i++ // Mach das aufsteigend
)
oder habe ich mich da vertan?
gruß alex
Hi,
$i=1; // Fange bei eins an
Das wird vor der Schleife ausgeführt.
$i=count($suchbegriff); // Höre auf, wenn alle suchbegriffe drin sind
Mach so lange, wie die Bedingung wahr ist.
Wahr ist eine Zuweisung dann, wenn der zugewiesene Wert wahr entspricht.
Zahlen ungleich 0 gelten als wahr.
Deine Schleife wird also entweder gar nicht (Anzahl der Suchbegriffe == 0) oder unendlich oft (Anzahl > 0) - da sich in der Schleife die Anzahl nicht ändert.
$i++ // Mach das aufsteigend
Mach das am Ende jedes Schleifendurchlaufs.
)
oder habe ich mich da vertan?
Ja.
cu,
Andreas
Hallo Alex!
Ich schreib einfach mal ein paar Kommentare zu Deinen Zeilen.
$suchbegriff = rtrim($_POST['suche']); // Leerzeichen am Ende des Strings löschen
$suchbegriff = ltrim($suchbegriff); // Leerzeichen am Anfang des Strings löschen
Und wie wärs mit trim()?
$suchbegriff = explode(" ", $suchbegriff); // String 2 Array
[...]
$query = "
SELECT *
--> dclp FAQ: 16.14. Warum soll ich nicht SELECT * schreiben?
FROM content
WHERE (
content_headline LIKE '%" . $suchbegriff[0] . "%' OR
content_content LIKE '%" . $suchbegriff[0] . "%')";for ($i=1; $i=count($suchbegriff); $i++) {
Siehe PHP Manual: for.
(Eine Zuweisung mit = ist natürlich immer true -> Endlosschleife.)
Davon abgesehen würde ich dir hier eh zu foreach raten (siehe PHP Manual: foreach).
[...]
Aber es endet komischerweise in einer Endlos-Schleife - aber warum? er hat doch als Ende count($suchbegriff).
Siehe oben.
p.s. habe es schnell programmiert - die synthax ist nicht 100% - sorry
Wenn's nur die "Synthax" wäre ... (übrigens: Googlefight: Syntax vs. Synthax)
MfG
Götz
hi ihr beiden!
vielen Dank jetzt funktionierts!
frohe weihnachten noch!!1
gruß alex
Hi und auch frohe Weihnacht,
ich glaub, das kann nicht funktionieren, wegen deinem for-Aufruf:
| for ($i=1; $i=count($suchbegriff); $i++)
das $i=count... weißt den $i immer wieder denselber Wert zu. Dadurch wird es erhöht, bekommt, dann aber wieder den ersten Wert zugewiesen, wird erhört, bekommt wieder den ersten Wert zugewiesen, wird erhöht...... endlosschleife.
probiers mal damit:
for ($i=1; $i<=count($suchbegriff); $i++)
^--- "<=" nicht "="
Gruss olli