PHP-未定义索引

PHP-未定义索引,php,Php,PHP新手,关于stackoverflow的第一篇帖子。。。从我读过的教程中,我“有点”不受注入的影响,我知道我正在从搜索表单中正确地传递变量。我遇到的问题是当我试图阅读结果时;我收到他们的“未定义索引”错误,我不知道为什么。我盯着这本书看了一整天,准备把头发拔出来。有人能给我指出正确的方向吗?是的,我知道,不要用root;这是纯粹的演示和托管本地,直到我有一切顺利了。谢谢你的帮助-杰森 if(isset($_POST['submit'])){ if(isset($_GET['go'])

PHP新手,关于stackoverflow的第一篇帖子。。。从我读过的教程中,我“有点”不受注入的影响,我知道我正在从搜索表单中正确地传递变量。我遇到的问题是当我试图阅读结果时;我收到他们的“未定义索引”错误,我不知道为什么。我盯着这本书看了一整天,准备把头发拔出来。有人能给我指出正确的方向吗?是的,我知道,不要用root;这是纯粹的演示和托管本地,直到我有一切顺利了。谢谢你的帮助-杰森

if(isset($_POST['submit'])){
    if(isset($_GET['go'])){
        if(preg_match("%[a-zA-Z0-9_-]%", $_POST["booktext"])){
            $searchvalue=$_POST["booktext"];

            // create connection

            $user="root";
            $password="";
            $database="bookcat_data";
            $host="127.0.0.1:3306";
            $searchtype=$_POST["searchtype"];

            $con=mysqli_connect($host, $user, $password, $database);

            if (mysqli_connect_errno()) {
                echo "Failed to connect to MySQL: " . mysqli_connect_error();
            }

            $sql = "SELECT Book.BookID, Book.Title, Book.AuthorSort, Publisher.Publisher, Book.PublishDate, Book.ISBN FROM ((Book LEFT JOIN Edition ON Book.EditionID = Edition.EditionID) LEFT JOIN PrintedBy ON Book.PrintedByID = PrintedBy.PrintedByID) LEFT JOIN Publisher ON Book.PublisherID = Publisher.PublisherID WHERE " . $searchtype . " LIKE '%" . $searchvalue . "%' ORDER BY Book.Title;";

            $result=mysqli_query($con,$sql);

            switch($searchtype) {
                case "Book.Title":
                    $header="Book Title";
                    break;
                case "Book.AuthorSort":
                    $header="Author";
                    break;
            }


            echo '<title>' . $header . ' Search for "' . $searchvalue . '"</title>';
            echo '<h3 align="center">' . $header . ' Search for "' . $searchvalue . '" - Sorted by Title</h3>';
            echo '<table cellpadding="3" cellspacing="2" border="1" id="catalogs" class="center">';
            echo '<tr><th>Book Title</th><th>Author</th><th>Publisher</th><th>Publish Date</th><th>ISBN</th>';

            while($row=mysqli_fetch_array($result)) {
                $BookID=$row['Book.BookID'];
                $BookTitle=$row['Book.Title'];
                $Author=$row['Book.AuthorSort'];
                $Publisher=$row['Publisher.Publisher'];
                $PublishDate=$row['Book.PublishDate'];
                $ISBN=$row['Book.ISBN'];

                echo '<tr>';
                echo '<td><a href=\'bookinfo.php?id=$BookID\'>' . $BookTitle . '</td>';
                echo '<td>' . $Author . '</td>';
                echo '<td>' . $Publisher . '</td>';
                echo '<td>' . $PublishDate . '</td>';
                echo '<td>' . $ISBN . '</td>';
                echo '</tr>';
                }


            echo '</table>';

            mysqli_free_result($result);

            mysqli_close($con);
    }
}
else{
    echo "<p>Please enter an appropriate search</p>";
}
}
if(isset($\u POST['submit'])){
如果(isset($_GET['go'])){
如果(preg_匹配(“%[a-zA-Z0-9_-]%”,$_POST[“booktext”])){
$searchvalue=$\u POST[“booktext”];
//创建连接
$user=“root”;
$password=“”;
$database=“bookcat\u数据”;
$host=“127.0.0.1:3306”;
$searchtype=$\u POST[“searchtype”];
$con=mysqli_connect($host、$user、$password、$database);
if(mysqli\u connect\u errno()){
echo“未能连接到MySQL:”.mysqli_connect_error();
}
$sql=“选择Book.BookID,Book.Title,Book.AuthorSort,Publisher.Publisher,Book.PublishDate,Book.ISBN FROM((Book.EditionID上的Book LEFT JOIN Edition=Edition.EditionID)Book.PrintedByID=PrintedByID=PrintedByID)Book.PublisherID=Publisher.PublisherID上的LEFT JOIN Publisher,其中“$searchtype.”类似“%””.$searchvalue.“%”按书的顺序。标题;“;
$result=mysqli\u查询($con,$sql);
交换机($searchtype){
案例“书名”:
$header=“书名”;
打破
案例“Book.AuthorSort”:
$header=“Author”;
打破
}
回显“.$header.”搜索“.$searchvalue.”;
回显'.$header.'搜索'.$searchvalue.'''.-按标题排序';
回声';
echo“书名作者或出版商出版日期ISBN”;
while($row=mysqli\u fetch\u数组($result)){
$BookID=$row['Book.BookID'];
$BookTitle=$row['Book.Title'];
$Author=$row['Book.AuthorSort'];
$Publisher=$row['Publisher.Publisher'];
$PublishDate=$row['Book.PublishDate'];
$ISBN=$row['Book.ISBN'];
回声';
回音“.$BookTitle.”;
回音“.$Author.”;
回显“.$Publisher.”;
回显“.$PublishDate.”;
回音“.$ISBN.”;
回声';
}
回声';
mysqli_免费_结果($result);
mysqli_close($con);
}
}
否则{
echo“请输入适当的搜索”

”; } }
SQL查询返回不带表前缀的列名。访问数组元素时删除此前缀。因此
$row['BookID']
而不是
$row['Book.BookID']

PHP调试的关键工具是使用var_dump,如果您使用var_dump($row);您将能够看到用于数组的实际索引,并根据需要访问它们。哪一行导致了错误?您可能需要删除索引中的表名部分。因此,与其使用
$row['Book.BookID']
,不如尝试使用
$row['BookID']
找到5842个结果,并启用“PHP-未定义索引”!Patrick-正确,$row[…]变量是导致问题的原因。非常感谢你!就是这样D