2016-07-07 13 views
1

私は自作の検索エンジンを使ってサイトを作っています。人々のsearchterms($ search)をデータベースに入れたいと思います。 $ searchがすでにデータベースにある場合、対応する数値(テーブルのAantal列)をいつでも上に移動したい。 テーブルに新しいsearchtermを追加するのに成功しましたが、すでに入っているものを更新しません。ちょうどAantal = 1で新しいエントリが作成されます。 ここで私のコードは、searchtermsはdbとテーブルの名前、Zoektermは列の名前のSearchTermsが行くた:SQLデータベースを更新するには

私の下手な英語のため申し訳ありません:-)

if ($search != null) { 
     $conn = new mysqli($servername, $username, $password, $dbname); 
    if ("SELECT * FROM searchterms WHERE Zoekterm = '{$search}'"){ 
      $inserts = "INSERT into searchterms values('". $search . "', '" . 1 . "')"; 
      if ($conn->query($inserts) === FALSE) { 
       echo "Error: " . $inserts . "</ br>" . $conn->error; 
     } 
    } 
    elseif (!"SELECT * FROM searchterms WHERE Zoekterm = '{$search}'") { 
     $i = mysqli_query($conn, "SELECT Aantal FROM searchterms WHERE Zoekterm = '{$search}'"); 
     $j = mysqli_fetch_row($i); 
     foreach ($j as $k) { 
      $k++; 
      echo "<p>$k</p>"; 
     } 
     $sql = "UPDATE searchterms SET Aantal='$k' WHERE Zoekterm = '$search'"; 
    } 
    $conn->close(); 
} 

答えて

1

これは完全に間違っている:

if ("SELECT * FROM searchterms WHERE Zoekterm = '{$search}'"){ 

if("string")は常にと評価されます- これらはクエリではありません。彼らはいくつかの文字を含むことが起こる文字列ですルークのようなSQL。 text/sqlは、データベースに送信して実行するまでクエリになりません。

そして、その上に

、あなたは私がよりこの問題を解決する必要がどのように説明していただけます sql injection attacks

+0

に弱いですか? – DagelijksGamer

+0

これらのクエリを実行します。あなたはすでに挿入物でそれをやっているので、私は文字列にSQLをダンプして、魔法のように - > exec()または - > query()を呼び出さずに表示できる理由が分かりません –

+0

$ conn-> exec($ sql);を追加しました。私が$ sqlを宣言している行のすぐ下にありますが、まだ動作しません...私はまだたくさんのことを学ぶ必要があります – DagelijksGamer

関連する問題