-1

I made a public function View() under a class Delivary(). But in line 40 I return $arr. Now it show Undefined variable: arr when my data table is empty. Notice: Undefined variable: arr in C:\xampp\htdocs\online shop\dataAccessLayer\dalDelivary.php on line 40

My code is:

class Delivary {

public $place;
public $address;
public $amount;
public $date;
public $payment;
public $walletnumber;
public $user_id;

public function DB()
{
    $connection = mysqli_connect("localhost","root","","project");
    return $connection;
}

public function Insert()
{
    $sql = "INSERT INTO delivery (place, address, amount, `date`,payment, walletnumber, user_id) VALUES 
    ('$this->place', '$this->address', '$this->amount', '$this->date', '$this->payment', '$this->walletnumber', '$this->user_id');";
    if(mysqli_query($this->DB(), $sql))
    {
        return true;
    }
        return false;
}

public function View()
{
    $sql = "SELECT delivery.delivery_id, service.area, delivery.address, delivery.amount, delivery.date, delivery.payment, delivery.walletnumber, delivery.user_id FROM delivery, service WHERE service.service_id = delivery.place";
    $result = mysqli_query($this->DB(),$sql);
    while($d = mysqli_fetch_row($result))
        {
            $arr[] = $d; 
        }
        return $arr; //line 40
}
public function Delete()
    {
        $sql = "DELETE FROM delivery WHERE delivery_id = '".$this->delivery_id."'";
        if(mysqli_query($this->DB(), $sql))
        {
            return true;
        }
        return false;
    }}

2 Answers2

1

Change

public function View()
{
    $sql = "SELECT delivery.delivery_id, service.area, delivery.address, delivery.amount, delivery.date, delivery.payment, delivery.walletnumber, delivery.user_id FROM delivery, service WHERE service.service_id = delivery.place";
    $result = mysqli_query($this->DB(),$sql);
    while($d = mysqli_fetch_row($result))
        {
            $arr[] = $d; 
        }
        return $arr; //line 40
}

TO

    public function View()
    {
        $arr = [];
        //Please correct the following SQL statement as per your requirement.
        $sql = "SELECT delivery.delivery_id, service.area, delivery.address, delivery.amount, delivery.date, delivery.payment, delivery.walletnumber, delivery.user_id FROM delivery, service WHERE service.service_id = delivery.place";
        $result = mysqli_query($this->DB(),$sql);
        while($d = mysqli_fetch_row($result))
            {
                $arr[] = $d; 
            }
        return $arr; //line 40
    }

And the error should go. Since you are directly pushing to $arr in the while loop, PHP is not able to find $arr in case where your query returns 0 records. Since your query returns 0 records, it doesnt execute the code in while loop and hence PHP is not aware of $arr.

Hannan
  • 514
  • 2
  • 13
0

You're accessing $arr like an array before it's been defined as one. To eliminate this notice (Which is more a warning than an error), simply define the array before you use it:

$arr = [];
while($d = mysqli_fetch_row($result))
{
     $arr[] = $d; 
}
return $arr; //line 40

Make sure you're checking for errors from the return of the mysqli_query function:

$conn = $this->DB();
$sql = "SELECT delivery.delivery_id, service.area, delivery.address, delivery.amount, delivery.date, delivery.payment, delivery.walletnumber, delivery.user_id FROM delivery, service WHERE service.service_id = delivery.place";
$result = mysqli_query($conn, $sql);
if ( !$result ) {
    echo "There was an error executing this query: ", mysqli_error($conn);
    exit;
}
$arr = [];
while($d = mysqli_fetch_row($result))
{
    $arr[] = $d; 
}
return $arr;
Blue
  • 22,608
  • 7
  • 62
  • 92
  • After Use your code my database don't show anything – Syed Mohammad Ibrahim Khalil Jul 07 '17 at 04:51
  • Pet peeve: Delivary is spelled wrong. It should be Delivery. Check my updated answer for how to check for mysql errors. – Blue Jul 07 '17 at 05:01
  • Thanks for your help. Now my problem is solved. just change sql query "select * from delivery"; and add $arr = []; – Syed Mohammad Ibrahim Khalil Jul 07 '17 at 05:13
  • What do you mean just change sql query? – Blue Jul 07 '17 at 05:20
  • Change $sql = "SELECT delivery.delivery_id, service.area, delivery.address, delivery.amount, delivery.date, delivery.payment, delivery.walletnumber, delivery.user_id FROM delivery, service WHERE service.service_id = delivery.place"; to $sql = "SELECT * from delivery"; – Syed Mohammad Ibrahim Khalil Jul 07 '17 at 05:26
  • 1
    It's not my job to change your SQL query. You posted an issue about a NOTICE error from your $arr not being defined. That issue has been solved. Just because you're getting a SQL error, which appears to be another issue entirely, doesn't negate that this answer has solved your question. Changing the sql statement offers absolutely nothing that would help future readers. – Blue Jul 07 '17 at 05:37
  • Here is also a array problem. your solve was also right. need to add $arr = []; which i was also mention please check. – Syed Mohammad Ibrahim Khalil Jul 07 '17 at 08:17