2016-04-25 13 views
-1

Ich habe alle Themen, die sich mit der Aufteilung von Zeichenfolgen in ein Array. Aber ich bin nicht wirklich auf meine Bedürfnisse gestoßen.Split-String in ein Array und verwenden Sie jedes Element des Arrays in einer Abfragezeichenfolge

In der Suchbox gibt ein Benutzer einen beliebigen String beliebiger Länge ein (ich kann die Länge der Wörter nicht angeben). Beim Senden sammelt das PHP-Skript den Wert als $ q.

Beispiel:

  1. Nehmen wir an, $q="users typed in search query of any length."
  2. php jedes Wort in $q in eine $stringArray wie in ("users","type","in","search","etc") aufzuspalten. for(each $stringArray as $i);
  3. Ausführen eine Abfrage mit jedem $i des Arrays Übereinstimmungen zu finden und alle Zeilen anzuzeigen, die eines $q entsprechen:
  4. php jedes Element des $stringArray wie in iterieren.

PHP CODE

<?php 
require_once('../data/conString_mysqli.php'); 

if(isset($_POST['services'])){$q = trim($_POST['services']);}else if(isset($_REQUEST['q'])){$q = trim($_REQUEST['q']);} 
else if(isset($_REQUEST['s'])){$s = trim($_REQUEST['q']);}else{header('Location:../home/');} 

?> 

<?php 

$stringArray = explode(" ", $q);//split using spaces 

foreach (array($stringArray) as &$q) { 
?> 

<?php 
//run a search query here 
$search_query = mysqli_query($connect,"SELECT * FROM service_providers WHERE INSTR(pname, '".$q."') OR INSTR(bizaddr, '".$q."') OR INSTR(bizname, '".$q."') OR INSTR(bizdesc, '".$q."') OR INSTR(pmobile, '".$q."') OR INSTR(pemail, '".$q."') OR INSTR(bizcat, '".$q."') OR INSTR(pmobile, '".$q."')ORDER BY bizname"); 

    $records = mysqli_num_rows($search_query); 
    if(!$records >= 1){ 
     die(mysql_error());//('<script type="text/javascript">alert("PROVIDERS SEARCH RESULT \n\nCould not find a match. \nTry using one word, exact words. \nYou can search by category. Just type the category name (tv repairs, air conditioning, painting, car repairs, carpentry, plumbing, tiles, rug, washing, catering, cakes, creams, computer, software, hardware etc. \n\nDo not use periods, commas, and other symbols!");window.location="test_array.php?q='.$q.'";<script>'); 
    }else { 
     while($row = mysqli_fetch_array($search_query)){ 
      $pcode = $row['pcode']; 
      $bizname = $row['bizname']; 
      $bizaddr = $row['bizaddr']; 
      $bizdesc = $row['bizdesc']; 
      $pname = $row['pname']; 
      $pmobile = $row['pmobile']; 
      $pemail = $row['pemail']; 
      if($row['bizcat'] ==''){ 
       $category = "UNKNOWN CATEGORY";} 
      else{$category = $row['bizcat'];} 
?> 
<?php 
      echo $pcode .'<br />'; 
      echo $bizname .'<br />'; 
      echo $bizaddr .'<br />'; 
      echo $bizdesc .'<br />'; 
      echo $category .'<br />'; 
      echo $pname .'<br />'; 
      echo $pmobile .'<br />'; 
      echo $pemail .'<br />'; 
      echo '--------------------' .'<br />'; 
      } 
     } 
?> 

<?php 
} 
?> 

Wenn ich diesen Code ausführen, es gibt einen Fehler zurück unter:

Notice: Array to string conversion in C:\Wamp\www\servicehub.ng\find\test_array.php on line 17 
+0

explode() gibt bereits ein Array zurück (oder boolean false bei einem Fehler), also warum werden Sie dieses Array wieder in ein Array schreiben? und Sie sollten wirklich mit einem Volltextindex arbeiten. es ist viel effizienter, eine einzige Volltextsuche durchzuführen als eine lange Reihe von 'instr()' –

+0

'array ($ stringArray)' um was? –

+0

@MarcB: Sie erstellen tatsächlich ein mehrdimensionales Array, das schlimmer ist ;-) – AbraCadaver

Antwort

0

On line 17

foreach (array($stringArray) as &$q) 

entfernen Array und Sie werden Code ohne diesen Fehler

foreach ($stringArray as $q) 

Darüber hinaus können Sie mysqli_fetch_array in mysqli feat assoc ändern, da nur assoziative Array abgerufen wird.

Und Sie können all diese Verkettung in $ search_query loswerden. Doppelquoute alles tun.

+0

"Ich habe einen tadellosen internationalen Ruf als Master Software Engineer, Programmierer und Social Media Evangelist." persönlich mache ich ein mittel geröstetes Käse-Sandwich. –

+0

@Dagon Sicher, sobald du den Käse gefunden hast. Sag * Käse *: D –

+0

Ok, @Nirpendra, ich werde Ihre Vorschläge versuchen. Ich werde hier zurückkommen, ob es funktioniert oder nicht. Vielen Dank. – Eyo

Verwandte Themen