2016-07-25 37 views
0

Ich habe diese function:Funktion gibt nur einen Wert mehrfach

function get_content($text_to_match) { 
    $query = "SELECT * "; 
    $query .= "FROM table_name "; 
    $query .= "WHERE one_column_name LIKE '%{$text_to_match}%' OR another_column_name LIKE '%{$text_to_match}%'"; 
    $cont = mysqli_query($connection, $query); 
    if($content = mysqli_fetch_assoc($cont)) { 
     return $content; 
    } else { 
     return null; 
    } 
} 

Aber wenn ich es nennen mag:

<div> 
     <?php 
     for ($i = 1; $i < count(get_content("text_to_match")); $i++) { 
      echo '<article>' . 
       '<h3>' . get_content("text_to_match")["string1"] . '</h3>'. 
       '<p>' . get_content("text_to_match")["string2"] . '</p>' . 
       '</article>'; 
     } 
     ?> 
    </div> 

ich nur das erste Spiel in der DB so oft wiederholt, wie die Anzahl der gefundenen Gegenstände.

Wo bin ich falsch gelaufen?

+0

, was Sie versuchen zu tun ... bitte genau –

+0

mysqli_fetch_all? – splash58

+0

@raveenanigam, der vorletzte Satz erwähnt die Absicht deutlich. – Dut

Antwort

0

mit einigen Modifikationen in Kombination mit Tipps von @Anant und @Unix One ‚s Antwort, kam ich in dieser Arbeitslösung:

Funktionsdefinition

function get_content($text_to_match, $multiple=false) { 
     $query = "SELECT * "; 
     $query .= "FROM table_name "; 
     $query .= "WHERE one_column_name LIKE '%{$text_to_match}%' OR another_column_name LIKE '%{$text_to_match}%'"; 
     $cont = mysqli_query($connection, $query); 
     if ($multiple) { 
      $content_array = []; 
      while($content = mysqli_fetch_array($cont)) { 
      $content_array[] = $content; 
      } 
      return $content_array; 
     } else { 
      if($content = mysqli_fetch_assoc($cont)) { 
      return $content; 
      } else { 
      return null; 
      } 
     } 
    } 

Funktionsaufrufe

<?php 
    /* multiple items */ 
    foreach(get_content("text_to_match", true) as $content) { 
    echo '<article>' . 
      '<h3>' . $content["string1"] . '</h3>' . 
      '<p>' . $content["string2"] . '</p>' . 
     '</article>'; 
    } 
?> 

<?php 
    /* one item */ 
    echo get_content("text_to_match")["string"]; 
?> 
0

Verwendung dieser Code dann Daten richtig ist Schuld

while($content = mysql_fetch_array($cont)) 
{ 
    return $content; 

} 
+0

Nicht wirklich, gut versuchen – Dut

+0

@Dut nicht wirklich was? Sie helfen sich überhaupt nicht und stellen keine Beispieldateneingänge oder -ausgänge zur Verfügung, um zu helfen –

+0

@MikeMcMahon SIE SIND RICHTIG. Sogar in meiner Antwort habe ich alles gegeben, aber er reagiert nicht –

0

Ihre Logik holen. Sie rufen die Funktion get_content auf, um alle Übereinstimmungen für die Schleife abzurufen und einzelne Elemente aus der Liste zu entfernen. Dies ist:

  • schlechte Logik - der zweite Anwendungsfall keinen Sinn macht
  • übermäßige - Sie sollen nicht eine Datenbankabfrage nur für die Ausgabe eines bereits abgerufene Ergebnis

laufen müssen Was Sie wollen wahrscheinlich zu tun ist:

foreach (get_content('text_to_match') as $content) { 
    echo '<article>'; 
    echo '<h3>' . $content['string1'] . '</h3>'; 
    echo '<p>' . $content['string2'] . '</p>'; 
    echo '</article>'; 
} 
+0

passt nicht zur Rechnung, explodiert! – Dut

+2

Ich habe nicht Ihre Anwendung zu laufen, also müssen Sie reparieren, was auch immer "explodiert" bedeutet. Ich weise nur auf den Fehler in Ihrer Logik hin, um Ihnen bei der Behebung Ihres Problems zu helfen. –

+0

In andere Änderungen integriert ist dies hilfreich.Leider kann ich nicht upvote und es ist unvollständig, als akzeptiert zu markieren. – Dut