Alex S.: Problem mit for-Schleife

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

  1. Hi,

    for ($i=1; $i=count($suchbegriff); $i++) {

    Willst Du $i mit $count vergleichen oder willst Du tatsächlich ne Zuweisung machen?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. 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

      1. 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

        --
        Warum nennt sich Andreas hier MudGuard?
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. 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

    --
    Losung für Sonntag, 26. Dezember 2004
    Der Herr ist gerecht in allen seinen Wegen und gnädig in allen seinen Werken. (Psalm 145,17)
    Die Prophetin Hanna trat auch hinzu zu derselben Stunde und pries Gott und redete von ihm zu allen, die auf die Erlösung Jerusalems warteten. (Lukas 2,38)
    (Losungslink)
    1. hi ihr beiden!

      vielen Dank jetzt funktionierts!
      frohe weihnachten noch!!1

      gruß alex

  3. 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