2016-05-17 21 views
2

私はクラスのコンテキストのWebサイトで作業しています。私はmysqlデータベーステーブルに移動し、一致した結果を返す検索フィールドを実行しています。mysql phpで検索

私はこのコードを作成しますが、動作しません。エラーは「文字列変換の配列」のようなものです。私は何時間も検索して解決策を見つけることができません。ここに私のコードは次のとおりです。

<?php 
if(!empty($_POST)){ 

    $searchstring['string'] = $_POST['string']; 
    $productManager = new ProductManagement(); 

    $results = $productManager->searchProduct($searchstring); 

    if (!$results) { 
     echo "nothing found"; 
    } else { 
     while($row = $results->fetch_array(MYSQLI_ASSOC)) { 

      echo ' 


      <div class="col-sm-4 col-lg-4 col-md-4"> 
       <div class="thumbnail"> 
        <img src="'. $row ['image'] .'" alt="" width="320px" weight="150px"> 
        <div class="caption"> 
         <h4 class="pull-right">€'. $row ['price'] .'</h4> 
         <h4><a href="#">'. $row ['name'] .'</a> 
         </h4> 
         <p><strong>Size:</strong> '. $row ['size'] .'</p> 
         <p class="pull-right"><a class="btn btn-info" href="view.php?id='. $row ['id_shirt'] .'" role="button">Ver</a></p> 
        </div> 
       </div> 
      </div> 

      '; 

     } 
    } 
} 

と:

public function searchProduct($searchstring) 
{ 
    $results = $this->_database->performQuery("SELECT * FROM `shirts` WHERE name LIKE '%".$searchstring."%'"); 
    return($results); 

} 

私はあなたが私に感謝を助けることを願って!

+0

を? – Mike

+0

エラーのように、配列 'searchstring'を作成して、SQLで文字列のように使用しようとしました。 –

+0

は、クエリ行で公開されています。 –

答えて

3

単純にこれを使用する:

$searchstring = $_POST['string']; 

はこのinsted:

$searchstring['string'] = $_POST['string']; 
0

を私のコメントで述べたように、次の2つの方法のひとつを修正することができます。

のどちらかのような$searchstring文字列を作る:

$searchstring = $_POST['string']; 

または選択した配列値を使用するようにSQLを変更します。エラーの原因となっている何行

$results = $this->_database->performQuery("SELECT * FROM shirts WHERE name LIKE '%".$searchstring['string']."%'"); 
+1

これはSQLインジェクションの脆弱性に対処していません。ユーザー提供のデータを決してクエリーに入れないでください。 – Mike

+2

@Mikeが述べたように、プロダクションにふさわしいコードでは、次のようにクエリをパラメータ化したいと思う:http://stackoverflow.com/questions/26543097/mysqli-bind-parameter-like-with-wildcard –

+0

ありがとうそれを意味して、私はこれを念頭に置いています:) –