Uttara Info Tech
Uttara Info Tech

Reputation: 75

How to print or store html select tag with selected attribute based on values in PHP/Laravel?

I want to print the following code with Laravel/PHP as html code. but it always print value="cancelled">Cancelled ! How I print or store the following html code in php/laravel?

    $row = Order::first();
    $csrf_token = csrf_token();
    echo '
    <form action="'.$row->update_url.'" method="post" class="form-inline">
        <input type="hidden" name="_method" value="PUT">
        <input type="hidden" name="_token" value="'.$csrf_token.'">
        <select name="status" id="status" onchange="this.form.submit()" class="form-control">
            <option '.$row->status == "pending" ? "selected" : " ".' value="pending">Pending</option>
            <option '.$row->status == "confirmed" ? "selected" : " ".' value="confirmed">Confirmed</option>
            <option '.$row->status == "shipped" ? "selected" : " ".' value="shipped">Shipped</option>
            <option '.$row->status == "delivered" ? "selected" : " ".' value="delivered">Delivered</option>
            <option '.$row->status == "returned" ? "selected" : " ".' value="returned">Returned</option>
            <option '.$row->status == "cancelled" ? "selected" : " ".' value="cancelled">Cancelled</option>
        </select>
    </form>';
    die();

my main target is adding one column in datatables using yajrabox.

                    <select name="status" id="status" class="form-control"        >
                        <option value="pending" {{$order->status == 'pending' ? 'selected' : ''}}>Pending</option>
                        <option value="confirmed" {{$order->status == 'confirmed' ? 'selected' : ''}}>Confirmed</option>
                        <option value="shipped" {{$order->status == 'shipped' ? 'selected' : ''}}>Shipped</option>
                        <option value="delivered" {{$order->status == 'delivered' ? 'selected' : ''}}>Delivered</option>
                        <option value="returned" {{$order->status == 'returned' ? 'selected' : ''}}>Returned</option>
                        <option value="cancelled" {{$order->status == 'cancelled' ? 'selected' : ''}}>Cancelled</option>
                    </select>

where my yajra code look like this

            return \DataTables::of($data)
                    ->addIndexColumn()
                    ->addColumn('invoiceno', function($row){
                        return $field=  <<<EOT
                        <a href="$row->full_url" class="badge badge-danger">$row->invoice_no</a>
EOT;
                    })
                    ->addColumn('orderStatus',function($row){
                        $csrf_token = csrf_token();
                        return $field = '
                        <form action="'.$row->update_url.'" method="post" class="form-inline">
                            <input type="hidden" name="_method" value="PUT">
                            <input type="hidden" name="_token" value="'.$csrf_token.'">
                            <select name="status" id="status" onchange="this.form.submit()" class="form-control">
                                <option '.$row->status == "pending" ? "selected" : "".' value="pending">Pending</option>
                                <option '.$row->status == "confirmed" ? "selected" : "".' value="confirmed">Confirmed</option>
                                <option '.$row->status == "shipped" ? "selected" : "".' value="shipped">Shipped</option>
                                <option '.$row->status == "delivered" ? "selected" : "".' value="delivered">Delivered</option>
                                <option '.$row->status == "returned" ? "selected" : "".' value="returned">Returned</option>
                                <option '.$row->status == "cancelled" ? "selected" : "".' value="cancelled">Cancelled</option>
                            </select>
                        </form>';
                    })
                    ->rawColumns(['invoiceno', 'orderStatus'])                    })
                    ->make(true);

Upvotes: 0

Views: 335

Answers (1)

Greg Schmidt
Greg Schmidt

Reputation: 5099

The . concatenation operator is of higher precedence than the ternary operator, so your code is not doing what you think it is. Replace lines like this:

<option '.$row->status == "pending" ? "selected" : " ".' value="pending">Pending</option>

with lines like this:

<option ' . ($row->status == "pending" ? "selected" : " ") . ' value="pending">Pending</option>

Specifically, note the parentheses around ($row->status == "pending" ? "selected" : " ")

Upvotes: 1

Related Questions