2016-04-25 28 views
-1

私は配列に文字列を分割するすべてのトピックを検索しました。しかし、私は実際に私のニーズに関係するものを実際に遭遇していません。配列を配列に分割し、配列の各項目をクエリ文字列で使用する

検索ボックスで、ユーザーは任意の長さの文字列を入力します(単語の長さはわかりません)。送信時に、PHPスクリプトは値を$ qとして収集します。

例:

  1. のは$q="users typed in search query of any length."
  2. PHPが("users","type","in","search","etc")のよう$stringArray$qの各単語を分割するとしましょう。
  3. のよう$stringArrayの各項目を反復するPHP:for(each $stringArray as $i);
  4. はマッチを見つけると$qのいずれかに一致するすべての行を表示するために、アレイの各$iを使用してクエリを実行します。

PHPコード

<?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 
} 
?> 

私はこのコードを実行すると、それは下のエラーを返します。配列を削除し、あなたが持っているでしょう17

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

ラインで

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

explode()はすでに配列(または失敗した場合はブール値false)を返すので、その配列を配列に型キャストするのはなぜですか?あなたは本当に全文索引を使うべきである。 'instr()'の一連の文字列よりも単一の全文検索を行うほうが効率的です –

+0

'array($ stringArray)' um what? –

+0

@MarcB:実際には多次元配列を作成しています;-) – AbraCadaver

答えて

0

そのエラーのないコード

foreach ($stringArray as $q) 

また、mysqli_fetch_arrayをmysqli featch assocに変更できるのは、連想配列のみを取得するためです。

そして、$ search_queryですべての連結を取り除くことができます。ダブルクオートはすべてそれを行う。

+0

"私は、ソフトウェアエンジニア、プログラマー、ソーシャルメディアのエバンジェリストとして、国際的に評価の高い企業です。個人的に私は平均のトーストチーズサンドウィッチを作る。 –

+0

@ダゴン確かに、チーズを見つけたら。 *チーズ*:D –

+0

Ok、@Nirpendra、私はあなたの提案をお試しください。それがうまくいくかどうか私はここに戻ってきます。ありがとう。 – Eyo

関連する問題