繁体   English   中英

警告:非法的字符串偏移量错误

[英]Warning: Illegal string offset error

我正在尝试用php创建一个简单的搜索引擎,如果用户输入关键字,他们可以按事件名称或位置进行搜索。 然后按日期顺序显示结果。 大部分已从另一个站点获取,但我正在尝试对其进行转换。

有人可以简单地向新手解释以下错误,以及如何纠正错误?

/home/ubuntu/workspace/test/test.php:49:array(5){'eventID'=>字符串(1)“ 1”'eventName'=>字符串(8)“令人兴奋”'eventLocation'=>字符串(7)“体育场”'开始'=>字符串(10)“ 2017-04-01”'过期'=>字符串(10)“ 2017-04-30”}警告:/ home中的字符串偏移'eventName'不合法第50行上的/ubuntu/workspace/test/test.php调用堆栈:0.0003 238624 1. {main}()/home/ubuntu/workspace/test/test.php:0 1

<?php
session_start();
//include files
include 'header/header.php';
include 'nav/navigation.php';
include 'init.php';
$expires = strtotime($_POST["expires"]);
$expires = date('Y-m-d', $expires);
$events =  "";
$find = $_POST['find'];
$field = $_POST['field'];
$searching = true;

if(isset($_POST["submit"])) {
if(!empty($_POST["events"])) {
    $searching = false;
}
   //This is only displayed if the user submitted the form 
if($searching == true) 
{
    echo "<h2>Results</h2><p>"; 
    //If the user did not enter a search term, they receive an error 
    if ($find == "") 
    { 
        echo "<p>You forgot to enter a search term"; 
        exit; 
    } 

    // Otherwise we connect to the database 
    //$result = mysqli_query($connection,$query) or exit ("Error in query: 
$query. ".mysqli_error($connection));

    // We preform a bit of filtering 
    $find = strtoupper($find); 
    $find = strip_tags($find); 
    $find = trim ($find); 

    //Now we search for our search term, in the field the user specified
    $mysqli = new mysqli('localhost', 'root', '', 'c3470438');
    $query = "SELECT * FROM events WHERE upper(eventLocation) 
LIKE'%STADIUM%'";
    $result = $mysqli->query($query);
    //Temporarily echo $query for debugging purposes    
    //echo "$query";
    //exit;
    //And display the results 
    $row = $result->fetch_array(MYSQLI_ASSOC);
    echo "<br>";
    foreach($row as $item) {
        var_dump($row);
        echo $item['eventName'];
        exit();
    }
    exit;


    //This counts the number or results. If there aren't any, it gives an 
explanation 
    $anymatches=mysql_num_rows($data); 
    if ($anymatches == 0) { 
        echo "Sorry, but we can not find an entry to match your query<br>
 <br>"; 
    } 

    //And reminds the user what they searched for 
    echo "<b>Searched For:</b> " .$find; 
} 

}

?>


 <fieldset>
<legend><h2>Events</h2></legend>
<form name="search" method="post" action="<?=$PHP_SELF?>">  
<tr> <th> <td>
   <fieldset>
     <legend>Find all events</legend>
     <input type="radio" name="events" <?php if (isset($events) && 
$events=="all") echo "checked";?>value="all"> Display all events
     </fieldset>
     <fieldset>
     <legend>Find events by date</legend>
    <input type="date" name="date" min="<?php echo date("Y-m-d");?>" 
max="2025-01-01" value="<?php echo date("Y-m-d");?>">
    </fieldset>
    <fieldset>
    <legend>Find events by keywords</legend>
    <input type="hidden" placeholder='Search by keyword'name="searching" 
value="yes" />
     Search for: <input type="text" name="find" /> in 
     <Select NAME="field">
     <Option VALUE="eventName">Event Name</option>
     <Option VALUE="eventLocation">Event Location</option>
     </Select>
 <input type="hidden" name="searching" value="yes" />
 <input type="submit" name="submit" value="submit" />
 </form>
    </fieldset>
    <button name="submit" value="submit" type="submit" class="button 
expanded">Submit </button>
    <button type="reset" value="Clear"class="button expanded"> 
Clear</button>
</fieldset>
</select> </td></tr>
<?php
//include files
include 'footer/footer.php';
?>
<script src="js/vendor/jquery.js"></script>
<script src="js/foundation.min.js"></script>
<script>

 </script>
 </body>

$result->fetch_array(MYSQLI_ASSOC)返回一行,但是您正在使用它,就好像它返回了所有行一样。 因此,您的foreach会迭代该行中的每个字段,而不是每一行,因此您正在尝试访问字符串的数组键。

像这样使用一段时间:

while($row = $result->fetch_array(MYSQLI_ASSOC)){
    echo $row['eventName'];
}

另外,您使用的不是mysqli的mysql_num_rows 而是使用$result->num_rows

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM