如何解决此错误:(警告:非法字符串偏移)和(注意:未初始化的字符串偏移量:0)

时间:2017-10-14 03:29:55

标签: php mysql web

我们说我有search.php和edit.php。 在search.php中,他们可以删除和更新一些记录。 如果用户点击了"更新"按钮,系统会将用户重定向到另一个名为edit.php的页面。 我成功调用了itemid。 但这发生了......

<?php 
        $itemid = $_GET["itemid"];                                  
        $description = "";
        $classification = "";
        $unit = "";
        $quantity = "";
        $price = "";
        $reorder = "";
        $status ="";

        $record = MYDB::query(
                            "select
                                *
                             from   
                                item
                             where
                                itemid = ? ",
                             array($itemid),
                             "SELECT"
                        );  

        if(count($record) > 0)
        {
            $record = $record[0];
            $description = $description['description'];
            $classification = $classification['classification'];
            $unit = $unit['unit'];
            $quantity = $quantity['quantity'];
            $price = $price['price'];
            $reorder = $reorder['reorder'];
            $status = $status['status'];
        }
        else 
        {
            echo '<div class="fail">';
            echo  '<b>FAIL!</b> Item Not Found!</div>';
            die();
        }

        if(isset($_POST["btnsubmit"]))
        {
            if(isset($_POST["description"])){
                $description=ucwords(trim($_POST["description"]));
            }
            else{
                echo "Please Enter description";
            }
            if(isset($_POST["classification"])){
                $classification=ucwords(trim($_POST["classification"]));
            }
            else{
                echo "Please Enter classification";
            }
            if(isset($_POST["unit"])){
                $unit=ucwords(trim($_POST["unit"]));
            }
            else{
                echo "Please Enter unit";
            }
            if(isset($_POST["quantity"])){
                $quantity=ucwords(trim($_POST["quantity"]));
            }
            else{
                echo "Please Enter quantity";
            }
            if(isset($_POST["price"])){
                $price=ucwords(trim($_POST["price"]));
            }
            else{
                echo "Please Enter Price";
            }
            if(isset($_POST["reorder"])){
                $reorder=ucwords(trim($_POST["reorder"]));
            }
            else{
                echo "Please Enter reorder";
            }
            if(isset($_POST["status"])){
                $status=ucwords(trim($_POST["status"]));
            }
            else{
                echo "Please Enter status";
            }
        }

    ?>

这是错误,

警告:非法字符串偏移

注意:未初始化的字符串偏移量:0

2 个答案:

答案 0 :(得分:1)

这看起来像罪魁祸首

$record = $record[0];

您无法将变量设置为none数组,而其自身将成为具有未初始化值的数组。那只是疯狂的谈话...... :)

你认为你想用这条线做什么?

假设$ record [0]存在并且它有某种id,你可以做......

$record_id = $record[0];

但是你正在为所有其他项目使用关联数组,那么0的索引在哪里进入图片......

您需要执行$ record的var_dump来检查您是否达到了预期效果。

答案 1 :(得分:1)

该错误基本上意味着您通过不存在的键调用数组。我会告诉你哪个键,但你没有提供具体的变量。

说我有这个数组:

$array = ('some_real_key' => 'a very important value');

现在,如果我调用此$array['some_fake_key'],假设我们的数组没有some_fake_key,那么它将产生您看到的错误。同样适合您的0 offset

您在代码中调用它:

$record = $record[0];

这意味着没有0偏移量,这可能意味着一系列事情......再次提供的数据不足。但它将遵循上述相同的例子。

要解决这些问题,您可以使用array_key_exists()

if ( array_key_exists( 'some_real_key', $array )
{
    echo $array['some_real_key'];
}
else if ( array_key_exists( 'some_fake_key', $array )
{
    echo $array['some_fake_key'];
}

这将仅输出第一个数组键;并且不会输出任何错误。

更新

考虑到这一点,我认为您的错误可能来自您的变量,如下所示:

        $record = $record[0];
        $description = $description['description'];
        $classification = $classification['classification'];
        $unit = $unit['unit'];
        $quantity = $quantity['quantity'];
        $price = $price['price'];
        $reorder = $reorder['reorder'];
        $status = $status['status'];

你不是来自阵列的setting他们;您可能想要拨打$record['key']而不是$description = $description['description'];

例如,这看起来像:

$description = $record['description'];
// ... so on ...