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直到1,因为前一个count()给了您1。但这是索引的总数,最后一个索引仍然是0.

将其更改为:

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

更好的是,只需使用foreach

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

$x这会隐式计算索引。
您可能仍然需要更改AND填充物的最后进入检测。(通常您首先创建一个子字符串数组,然后implode()使用填充符" AND "。)

YadaYada:还要注意未过滤的输入。对文本字符串使用数据库转义功能。不过,使用 PDO 和准备好的语句要容易得多。

于 2013-01-12T16:51:58.843 回答
0

因为$keyword_array数组没有$x密钥。

于 2013-01-12T16:52:35.283 回答
0

事实证明,要克服,只需一个词:

error_reporting(0);

问题是,通知是否包含在错误中?

于 2013-01-13T06:30:06.073 回答