0

この問題を解決するのを手伝ってください:

if($_POST["keyword"]) {
$keyword       = $_POST["keyword"];
$keyword       = trim($keyword);
$keyword_array = explode(" ",$keyword);
$numberofwords = (integer)count($keyword_array);
require("server.php");
$link = open_koneksi();
$tbl_name      = "author";
$query         = "SELECT COUNT(*) as num FROM $tbl_name WHERE " ;
   for ($x = 0; $x<= $numberofwords; $x++) {
      $query .= "author LIKE '%$keyword_array[$x]%'";
      if ( $x <  $numberofwords ) {
         $query .= " AND ";
      }
   }
   echo("<SCRIPT>document.location.href='?p=result';</SCRIPT>");

}

プログラムセグメントのコードが実行されると、次のような警告が表示されます。

Notice: Undefined offset: 1 in C:\xampp\htdocs\bijang\result.php on line 111

障害の場所は次のコードを参照してください:

$query .= "author LIKE '%$keyword_array[$x]%'";

これを修正するにはどうすればよいですか?

4

3 に答える 3

3

あなたの問題はおそらくこれです:

  for ($x = 0; $x<= $numberofwords; $x++) {
                 ##

前に が与えられたので、0までインデックスをカウントしています。しかし、それはインデックスの総数であり、最後のインデックスはまだ.1count()10

次のように変更します。

  for ($x = 0; $x < $numberofwords; $x++) {
                  #

さらに良いことに、次を使用してforeachください。

  foreach ($keyword_array as $x => $kw) {

$xこれは、インデックスを暗黙的にカウントします。おそらく、フィラー
の最後のエントリ検出を変更する必要があります。AND(通常、最初に部分文字列の配列を作成し、次に fill をimplode()使用し" AND "ます。)

YadaYada: フィルタリングされていない入力にも注意してください。テキスト文字列にはデータベースのエスケープ機能を使用します。ただし、PDO と準備済みステートメントを使用する方がはるかに簡単です。

于 2013-01-12T16:51:58.843 に答える
0

克服するために、たった一言:

error_reporting(0);

問題は、通知がエラーの一部として含まれていたかどうかです。

于 2013-01-13T06:30:06.073 に答える
0

配列にキー$keyword_arrayがないためです。$x

于 2013-01-12T16:52:35.283 に答える