Handsontable Data not posting to phpMyAdmin database using PDO query - mysql
I'm having trouble trying to send data from my handsontable table to my SQL database (phpMyAdmin). Data in this table is input by the user and when they click send it will insert all the data into an existing table in my database. Also, if they click load it will load all the all the rows from the database they are saving into. I'm currently working with the following scripts to try and send data to my database.
index.php (relevant code):
<!DOCTYPE html>
<html>
<head>
<title>SuburbMap</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="http://code.jquery.com/jquery-1.12.0.js"></script>
<script src="http://docs.handsontable.com/0.16.0/bower_components/handsontable/dist/handsontable.full.js"></script>
<link type="text/css" rel="stylesheet" href="http://docs.handsontable.com/0.16.0/bower_components/handsontable/dist/handsontable.full.min.css">
<script src="http://docs.handsontable.com/0.16.0/bower_components/numeraljs/languages/de.js"></script>
<link rel="stylesheet" type="text/css" href="assets/admin-tools/admin-plugins/admin-panels/adminpanels.css">
<link rel="stylesheet" type="text/css" href="assets/admin-tools/admin-forms/css/admin-forms.css">
<link rel="shortcut icon" href="assets/img/favicon.ico">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<Style>
#loader {
z-index:99999;
position: fixed;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
}
body {
background-color: white;
margin: 20px;
}
h2 {
margin: 20px 0;
}
.handsontable-table {
overflow: scroll;
position: absolute;
top: 0px;
bottom: 54px;
width: 100%;
}
</style>
</head>
<body>
<div id="example1" class="dataTable"></div>
<p>
<button name="load" id="load">Load</button>
<button name="save" id="save">Save</button>
<label><input type="checkbox" name="autosave" id="autosave" checked="checked" autocomplete="off"> Autosave</label>
</p>
<script>
var
$container = $("#example1"),
$console = $("#exampleConsole"),
$parent = $container.parent(),
autosaveNotification;
$container.handsontable({
startRows: 8,
startCols: 3,
rowHeaders: true,
colHeaders: ['First Name', 'Last Name', 'Email', 'District/Suburb', 'Zip/Postcode', 'Income', 'No. Items', 'Item/Job Description'],
columns: [
{},
{},
{},
{},
{},
{},
{},
{}
],
minSpareCols: 0,
minSpareRows: 1,
contextMenu: true,
contextMenu: {
callback: function(key, options) {
var m = "clicked: " + key;
window.console && console.log(m) || alert(m);
},
items: ['row_above', 'row_below', 'remove_row', 'undo', 'redo', 'copy', 'paste'],
contextMenuCopyPaste: {
swfPath: '/managers/handsontable/dist/ZeroClipboard.swf'
}
},
afterChange: function (change, source) {
if (source === 'loadData') {
return; //don't save this change
}
if ($parent.find('input[name=autosave]').is(':checked')) {
clearTimeout(autosaveNotification);
$.ajax({
url: "/managers/save.php",
dataType: "json",
type: "POST",
data: {changes: change}, //contains changed cells' data
success: function () {
$console.text('Autosaved (' + change.length + ' cell' + (change.length > 1 ? 's' : '') + ')');
autosaveNotification = setTimeout(function () {
$console.text('Changes will be autosaved');
}, 1000);
}
});
}
}
});
var handsontable = $container.data('handsontable');
$parent.find('button[name=save]').click(function () {
$.ajax({
url: "/managers/save.php",
data: {"data": handsontable.getData()}, //returns all cells' data
dataType: 'json',
type: 'POST',
success: function (res) {
if (res.result === 'ok') {
$console.text('Data saved');
}
else {
$console.text('Save error');
}
},
error: function () {
$console.text('Save error');
}
});
});
$parent.find('button[name=reset]').click(function () {
$.ajax({
url: "/managers/reset.php",
success: function () {
$parent.find('button[name=load]').click();
},
error: function () {
$console.text('Data reset failed');
}
});
});
$parent.find('input[name=autosave]').click(function () {
if ($(this).is(':checked')) {
$console.text('Changes will be autosaved');
}
else {
$console.text('Changes will not be autosaved');
}
$parent.find('button[name=load]').click(function () {
$.ajax({
url: "/load.php",
dataType: 'json',
type: 'GET',
success: function (res) {
var data = [], row;
for (var i = 0, ilen = res.MultipleTerritories.length; i < ilen; i++) {
row = [];
row[0] = res.MultipleTerritories[i].fname;
row[1] = res.MultipleTerritories[i].lname;
row[2] = res.MultipleTerritories[i].email;
row[3] = res.MultipleTerritories[i].suburb;
row[4] = res.MultipleTerritories[i].postcode;
row[5] = res.MultipleTerritories[i].revenue;
row[6] = res.MultipleTerritories[i].noitems;
row[7] = res.MultipleTerritories[i].typeitems;
data[res.MultipleTerritories[i].id - 1] = row;
}
$console.text('Data loaded');
handsontable.loadData(data);
}
});
}).click(); //execute immediately
});
</script>
</body>
</html>
The following Scripts Are called from the script above:
functions.php script:
function &getConnection(){
$db = new PDO('mysql:host=localhost;dbname=suburbma;charset=utf8', 'suburbma***', '*****');
function closeConnection ($db){
$db = NULL;
}
//create the database if does not exist
function createMultipleTerritoriesTable($db){
$db->exec("CREATE TABLE IF NOT EXISTS MultipleTerritories (id INTEGER PRIMARY KEY, fname TEXT, lname TEXT, email TEXT, suburb TEXT, postcode INTEGER, revenue INTEGER, noitems INTEGER, typeitems TEXT)");
}
function resetMultipleTerritoriesTable($db){
dropMultipleTerritoriesTable($db);
createMultipleTerritoriesTable($db);
loadDefaultMultipleTerritories($db);
}
function dropMultipleTerritoriesTable($db){
$db->exec("DROP TABLE IF EXISTS multiple_suburbs");
}
function loadDefaultMultipleTerritories($db){
$query = $db->prepare('INSERT INTO multiple_suburbs(id, fname, lname, email, suburb, postcode, revenue, noitems, typeitems) VALUES(:id, :fname, :lname, :email, :suburb, :postcode, :revenue, :noitems, :typeitems)');
$data = array(
array(
'id' => 1,
'fname' => '',
'lname' => '',
'email' => '',
'suburb' => '',
'postcode' => '',
'revenue' => '',
'noitems' => '',
'typitems' => ''
),
array(
'id' => 2,
'fname' => '',
'lname' => '',
'email' => '',
'suburb' => '',
'postcode' => '',
'revenue' => '',
'noitems' => '',
'typitems' => ''
),
array(
'id' => 3,
'fname' => '',
'lname' => '',
'email' => '',
'suburb' => '',
'postcode' => '',
'revenue' => '',
'noitems' => '',
'typitems' => ''
),
array(
'id' => 4,
'fname' => '',
'lname' => '',
'email' => '',
'suburb' => '',
'postcode' => '',
'revenue' => '',
'noitems' => '',
'typitems' => ''
),
array(
'id' => 5,
'fname' => '',
'lname' => '',
'email' => '',
'suburb' => '',
'postcode' => '',
'revenue' => '',
'noitems' => '',
'typitems' => ''
),
array(
'id' => 6,
'fname' => '',
'lname' => '',
'email' => '',
'suburb' => '',
'postcode' => '',
'revenue' => '',
'noitems' => '',
'typitems' => ''
),
array(
'id' => 7,
'fname' => '',
'lname' => '',
'email' => '',
'suburb' => '',
'postcode' => '',
'revenue' => '',
'noitems' => '',
'typitems' => ''
),
array(
'id' => 8,
'fname' => '',
'lname' => '',
'email' => '',
'suburb' => '',
'postcode' => '',
'revenue' => '',
'noitems' => '',
'typitems' => ''
)
);
foreach($data as $index => $value){
$query->bindValue(':id', $value['id'], PDO::PARAM_INT);
$query->bindValue(':fname', $value['fname'], PDO::PARAM_STR);
$query->bindValue(':lname', $value['lname'], PDO::PARAM_STR);
$query->bindValue(':email', $value['email'], PDO::PARAM_STR);
$query->bindValue(':suburb', $value['suburb'], PDO::PARAM_STR);
$query->bindValue(':postcode', $value['postcode'], PDO::PARAM_INT);
$query->bindValue(':revenue', $value['revenue'], PDO::PARAM_INT);
$query->bindValue(':noitems', $value['noitems'], PDO::PARAM_INT);
$query->bindValue(':typeitems', $value['typeitems'], PDO::PARAM_STR);
$query->execute();
}
}
function &loadMultipleTerritories($db){
$select = $db->prepare('SELECT * FROM multiple_suburbs ORDER BY id ASC LIMIT 100');
$select->execute();
return $select;
}
function multiple_suburbsTableExists($db){
$result = $db->query("SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='multiple_suburbs'");
$row = $result->fetch(PDO::FETCH_NUM);
return $row[0] > 0;
}
save.php:
<?php
require_once('functions.php');
try {
//open the database
$db = getConnection();
createMultipleTerritoriesTable($db);
$colMap = array(
0 => 'fname',
1 => 'lname',
2 => 'email',
3 => 'suburb',
4 => 'postocde',
5 => 'revenue',
6 => 'noitems',
7 => 'typeitems'
);
if (isset($_POST['changes']) && $_POST['changes']) {
foreach ($_POST['changes'] as $change) {
$rowId = $change[0] + 1;
$colId = $change[1];
$newVal = $change[8];
if (!isset($colMap[$colId])) {
echo "\n spadam";
continue;
}
$select = $db->prepare('SELECT id FROM multiple_suburbs WHERE id=? LIMIT 1');
$select->execute(array(
$rowId
));
if ($row = $select->fetch()) {
$query = $db->prepare('UPDATE multiple_suburbs SET `' . $colMap[$colId] . '` = :newVal WHERE id = :id');
} else {
$query = $db->prepare('INSERT INTO multiple_suburbs (id, `' . $colMap[$colId] . '`) VALUES(:id, :newVal)');
}
$query->bindValue(':id', $rowId, PDO::PARAM_INT);
$query->bindValue(':newVal', $newVal, PDO::PARAM_STR);
$query->execute();
}
} elseif (isset($_POST['data']) && $_POST['data']) {
$select = $db->prepare('DELETE FROM multiple_suburbs');
$select->execute();
for ($r = 0, $rlen = count($_POST['data']); $r < $rlen; $r++) {
$rowId = $r + 1;
for ($c = 0, $clen = count($_POST['data'][$r]); $c < $clen; $c++) {
if (!isset($colMap[$c])) {
continue;
}
$newVal = $_POST['data'][$r][$c];
$select = $db->prepare('SELECT id FROM multiple_suburbs WHERE id=? LIMIT 1');
$select->execute(array(
$rowId
));
if ($row = $select->fetch()) {
$query = $db->prepare('UPDATE multiple_suburbs SET `' . $colMap[$c] . '` = :newVal WHERE id = :id');
} else {
$query = $db->prepare('INSERT INTO multiple_suburbs (id, `' . $colMap[$c] . '`) VALUES(:id, :newVal)');
}
$query->bindValue(':id', $rowId, PDO::PARAM_INT);
$query->bindValue(':newVal', $newVal, PDO::PARAM_STR);
$query->execute();
}
}
}
$out = array(
'result' => 'ok'
);
echo json_encode($out);
closeConnection($db);
}
catch (PDOException $e) {
print 'Exception : ' . $e->getMessage();
}
?>
reset.php:
<?php
require_once('functions.php');
try {
$db = getConnection();
resetMultipleTerritoriesTable($db);
closeConnection($db);
}
catch (PDOException $e) {
print 'Exception : ' . $e->getMessage();
}
load.php:
<?php
/**
* This is an example code that shows how you can load Handsontable data from server using PHP with PDO (SQLite).
* This code is not intended to be maximally efficient nor safe. It is for demonstrational purposes only.
* Changes and more examples in different languages are welcome.
*
* Copyright 2012, Marcin Warpechowski
* Licensed under the MIT license.
* http://github.com/handsontable/handsontable/
*/
require_once('functions.php');
try {
//open the database
$db = getConnection();
if(!multiple_suburbsTableExists($db)){
resetMultipleTerritoriesTable($db);
}
//select all data from the table
$result = loadMultipleTerritories($db);
$out = array(
'multiple_suburbs' => $result->fetchAll(PDO::FETCH_ASSOC)
);
echo json_encode($out);
// close the database connection
closeConnection($db);
}
catch (PDOException $e) {
print 'Exception : ' . $e->getMessage();
}
?>
Related
Trying to get property 'parameter' of non-object
Hello i have an api in Laravel i'm trying to get a value from a table column Json response it already in the table json response but when i get it its says: Trying to get property 'parameter' of non-object i'm so new on laravel so i'm really lost with this The Function i use when i call the api it go to $parameter = $value->parameter; And then stop and say in PriceDetailHolder(): Trying to get property 'parameter' of non-object I showed 2 functions because i don't really know where is the problem exactly public static function PriceDetailHolder($booking_prices, $booking_id = null, $currency = null): array { if (!empty($booking_id) && $booking_id !== null) { /** * #var $booking Booking */ $booking = Booking::query()->find($booking_id); $currency = $booking->CountryArea->Country->isoCode; } $holder[] = [ 'highlighted_text' => trans('admin.message665'), 'highlighted_text_color' => '333333', 'highlighted_style' => 'BOLD', 'highlighted_visibility' => true, 'small_text' => 'eee', 'small_text_color' => '333333', 'small_text_style' => '', 'small_text_visibility' => false, 'value_text' => trans('admin.message665'), 'value_text_color' => '333333', 'value_text_style' => '', 'value_textvisibility' => false ]; foreach ($booking_prices as $key => $value) { $code = ''; if (!empty($value->code)) { $code = "({$value->code})"; } $parameter = $value->parameter; /** * #var $parameterDetails PricingParameter */ $parameterDetails = PricingParameter::query()->find($parameter); if ($parameterDetails === null) { $prameterName = $parameter; } else { if ((int)$parameterDetails->parameterType === 13) { $applicable = (int)$parameterDetails->applicable === 1 ? trans('api.message174') : trans('api.message175'); /** * #var $priceCardValue PriceCardValue */ $priceCardValue = PriceCardValue::query()->where([['price_card_id', '=', $value->price_card_id], ['pricing_parameter_id', '=', $parameter]])->first(); $code = "($priceCardValue->parameter_price %)\n" . $applicable; } $prameterName = $parameterDetails->ParameterApplication . $code; } $holder[] = [ 'highlighted_text' => $prameterName, 'highlighted_text_color' => '333333', 'highlighted_style' => 'NORMAL', 'highlighted_visibility' => true, 'small_text' => 'eee', 'small_texot_clor' => '333333', 'small_text_style' => '', 'small_text_visibility' => false, 'value_text' => $currency . ' ' . $value->amount, 'value_text_color' => '333333', 'value_text_style' => '', 'value_textvisibility' => true ]; } return $holder; } public function End(EndTripRequest $request) { $merchant_id = $request->user('api-driver')->merchant_id; $validator = Validator::make($request->all(), [ 'booking_id' => [ 'required', 'integer', Rule::exists('bookings', 'id')->where(static function ($query) { $query->where('booking_status', TripStatus::STARTED); }), ], 'latitude' => 'required', 'longitude' => 'required', 'tip_amount' => 'nullable|numeric', ]); if ($validator->fails()) { $errors = $validator->messages()->all(); return response()->json(['result' => '0', 'message' => $errors[0], 'data' => []]); } /** * #var $configuration BookingConfiguration */ $configuration = BookingConfiguration::query()->where('merchant_id', $merchant_id)->first(); $booking_id = $request->booking_id; /** * #var $booking Booking */ $booking = Booking::with('PriceCard')->find($booking_id); /** * #var $bookingDetails BookingDetail */ $bookingDetails = BookingDetail::booking($booking_id)->first(); $service_type_id = (int)$booking->service_type_id; if (!in_array($service_type_id, [1, 5], false)) { $start_meter_value = $bookingDetails->start_meter_value; $customMessages = [ 'gt' => trans_choice('api.endmeter', 3, ['value' => $start_meter_value]), ]; $validator = Validator::make($request->all(), [ 'send_meter_image' => 'required', 'send_meter_value' => 'required|integer|gt:' . $start_meter_value, ], $customMessages); if ($validator->fails()) { $errors = $validator->messages()->all(); return response()->json(['result' => '0', 'message' => $errors[0], 'data' => []]); } } $request->user('api-driver')->free_busy = 2; $request->user('api-driver')->total_trips += 1; $request->user('api-driver')->save(); /** * #var $user \App\User */ $user = $booking->User; ++$user->total_trips; $user->save(); if ($request->hasFile('send_meter_image')) { $bookingDetails->end_meter_value = $request->send_meter_value; $request->file('send_meter_image'); $send_meter_image = $request->send_meter_image->store('service'); $bookingDetails->end_meter_image = $send_meter_image; } $pricing_type = $booking->PriceCard->pricing_type; $price_card_id = $booking->price_card_id; $key = $configuration->google_key; $endAddress = GoogleController::GoogleLocation($request->latitude, $request->longitude, $key); $endAddress = $endAddress ?: 'Address Not found'; $endTimeStamp = time(); $bookingDetails->end_timestamp = $endTimeStamp; $bookingDetails->end_latitude = $request->latitude; $bookingDetails->end_longitude = $request->longitude; $bookingDetails->end_location = $endAddress; $bookingDetails->accuracy_at_end = $request->accuracy; $bookingDetails->save(); $start_timestamp = $bookingDetails->start_timestamp; $seconds = $endTimeStamp - $start_timestamp; $hours = floor($seconds / 3600); $mins = floor($seconds / 60 % 60); //$secs = floor($seconds % 60); $timeFormat = sprintf('%02d H %02d M', $hours, $mins); $rideTime = round(abs($endTimeStamp - $start_timestamp) / 60, 2); $from = $bookingDetails->start_latitude . ',' . $bookingDetails->start_longitude; $to = $request->latitude . ',' . $request->longitude; $coordinates = ''; $bookingData = new BookingDataController(); $bookingData->ActivateRefer($booking->id); /** * Calculate the distance based on service type. */ switch ($service_type_id) { case '1': $bookingcoordinates = BookingCoordinate::query()->where('booking_id', $request->booking_id)->first(); $pick = $booking->pickup_latitude . ',' . $booking->pickup_longitude; $drop = $booking->drop_latitude . ',' . $booking->drop_longitude; $distanceCalculation = new DistanceCalculation(); $distance = $distanceCalculation->distance($from, $to, $pick, $drop, $bookingcoordinates['coordinates'], $merchant_id, $key); $distance = round($distance); $coordinates = $bookingcoordinates['coordinates']; break; case '5': $distance = GoogleController::GoogleShortestPathDistance($from, $to, $key); $distance = round($distance); break; default: $distance = $bookingDetails->end_meter_value - $bookingDetails->start_meter_value; $distance *= 1000; } /** * Calculate Trip Amount based on Pricing Type */ switch ($pricing_type) { case '1': case '2': $newArray = PriceController::CalculateBill($price_card_id, $distance, $rideTime, $booking_id, $bookingDetails->wait_time, (double)$bookingDetails->dead_milage_distance, (double)$booking->User->outstanding_amount); /** * Check if trip went through a toll gate */ if (!empty($configuration->toll_api)) { $newTool = new Toll(); $toolPrice = $newTool->checkToll($configuration->toll_api, $from, $to, $coordinates, $configuration->toll_key); if (is_array($toolPrice) && array_key_exists('cost', $toolPrice) && $toolPrice['cost'] > 0) { $parameter[] = ['price_card_id' => $price_card_id, 'booking_id' => $booking_id, 'parameter' => 'TollCharges', 'amount' => sprintf('%0.2f', $toolPrice['cost']), 'type' => 'CREDIT', 'code' => '']; $newArray[] = $parameter; } } $newExtraCharge = new ExtraCharges(); $carditnewArray = array_filter($newArray, static function ($e) { return ($e['type'] === 'CREDIT'); }); $amount = array_sum(Arr::pluck($carditnewArray, 'amount')); if ($booking->number_of_rider > 1) { $amount += $booking->PriceCard->extra_sheet_charge; } $booking_time = (int)$booking->booking_type === BookingType::RIDE_NOW ? $booking->created_at->toTimeString() : $booking->later_booking_time; $timeCharge = $newExtraCharge->NightChargeEstimate($price_card_id, $booking_id, $amount, $booking_time); if (!empty($timeCharge)) { $charge = array_sum(Arr::pluck($timeCharge, 'amount')); $amount += $charge; $newArray = array_merge($newArray, $timeCharge); } /** * Check and calculate surge price */ if ((int)$booking->PriceCard->sub_charge_status === 1) { $surge = (int)$booking->PriceCard->sub_charge_type === 1 ? $booking->PriceCard->sub_charge_value : bcdiv($amount, $booking->PriceCard->sub_charge_value, 2); $amount += $surge; $parameter = ['price_card_id' => $price_card_id, 'booking_id' => $booking_id, 'parameter' => 'Surge-Charge', 'amount' => sprintf('%0.2f', $surge), 'type' => 'CREDIT', 'code' => '']; $newArray[] = $parameter; } $discoutArray = array_filter($newArray, static function ($e) { return ($e['type'] === 'DEBIT'); }); /** * Check if there's a promo code applied to this booking */ if (!empty($discoutArray)) { $promoDiscount = sprintf('%0.2f', array_sum(Arr::pluck($discoutArray, 'amount'))); $bookingDetails->promo_discount = $promoDiscount; $amount = $amount > $promoDiscount ? $amount - $promoDiscount : '0.00'; } else { $bookingDetails->promo_discount = '0.00'; } /** * Check if a driver or user is referee */ $referDiscount = $bookingData->Refer($booking->user_id); if ($referDiscount !== NULL) { switch ($referDiscount->offer_type) { case '1': $referAmount = $amount; $amount = 0; break; case '2': $referAmount = ($amount * $referDiscount->referral_offer_value) / 100; $amount -= $referAmount; break; case '3': $referAmount = $referDiscount->referral_offer_value; $amount = $amount < $referAmount ? 0 : $amount - $referAmount; break; default: $referAmount = 0; break; } $parameter[] = ['price_card_id' => $price_card_id, 'booking_id' => $booking_id, 'parameter' => 'Promotion', 'amount' => sprintf('%0.2f', $referAmount), 'type' => 'DEBIT', 'code' => '']; array_push($newArray, $parameter); } $billDetails = json_encode($newArray); $bookingDetails->total_amount = sprintf('%0.2f', $amount); $payment = new Payment(); if ($amount > 0) { $payment->MakePayment($booking->id, $booking->payment_method_id, $amount, $booking->user_id, $booking->card_id); } else { $payment->UpdateStatus($booking->id); } $bookingDetails->bill_details = $billDetails; $bookingDetails->save(); \App\Http\Controllers\Helper\CommonController::Commission($booking_id, $amount); if ($booking->User->outstanding_amount) { User::query()->where('id', $booking->user_id)->update(['outstanding_amount' => NULL]); } break; case '3': $amount = ''; break; default: $amount = ''; break; } if ($service_type_id === 5) { $poolRide = new PoolController(); $poolRide->DropPool($booking, $request); } $distance = round($distance / 1000, 2) . ' Km'; $booking->booking_status = TripStatus::COMPLETED; $booking->travel_distance = $distance; $booking->travel_time = $timeFormat; $booking->travel_time_min = $rideTime; $booking->final_amount_paid = sprintf('%0.2f', $amount); $booking->save(); $user_id = $booking->user_id; $message = 'Driver End Ride'; $userdevices = UserDevice::getLastDevice($booking->user_id); $playerids = [$userdevices->player_id]; $data = $bookingData->BookingNotification($booking); Onesignal::UserPushMessage($playerids, $data, $message, 1, $booking->merchant_id); return response()->json(['result' => '1', 'message' => trans('api.message15'), 'data' => $booking]); } Its coming from a table [{"price_card_id":3,"booking_id":"42540","parameter":1,"amount":"1.50","type":"CREDIT","code":""},{"price_card_id":3,"booking_id":"42540","parameter":2,"amount":"0.00","type":"CREDIT","code":""},{"price_card_id":3,"booking_id":"42540","parameter":3,"amount":"0.00","type":"CREDIT","code":""},{"price_card_id":3,"booking_id":"42540","parameter":4,"amount":"0.00","type":"CREDIT","code":""},{"price_card_id":3,"booking_id":"42540","parameter":5,"amount":"0.00","type":"DEBIT","code":""},[{"price_card_id":3,"booking_id":"42540","parameter":"Promotion","amount":10,"type":"DEBIT","code":""}]] Please tell me to show you anything if i'm wrong i'm really sorry for my poor knowledge in all this but i'm just in the first step to learn
So a quick look at your code the code that fails is $value->parameter. That value comes from $booking_prices, so the issue lies in the objects returned when iterating booking_prices does not have the property parameter. You could remove the error by doing $parameter = $value->parameter ?? null; // null as default value or by figuring out why the parameter attribute does not always exist.
JSON to VB.NET Deserialize Coding
I have a column in a table where all the details of the bill are getting stored. My brother used PHP web project to do that. Now I am trying to deserialize in VB.NET Here is the PHP code (Controller) public function add_to_list() { $this->load->model('product_model', 'Product'); $pdts = $this->Product->get_data(true); $available = $this->in_cart($this->input->post('id')); $cart_qty = $available ? $available : 0; if (!is_numeric($this->input->post('qty')) || !$this->input->post('id')) { $res['success'] = false; $res['msg'] = "Please enter the valid input"; } else { $discount_percentage = $this->input->post('discount_percentage') ? $this->input->post('discount_percentage') : 0; $discount_rate = $pdts->selling_price * ($discount_percentage / 100); $final = $pdts->selling_price - $discount_rate; $igst = $pdts->igst; $igst_amt = calculate_price_by_precentage($this, $final, $pdts->igst); $gross = $pdts->selling_price; $total = $final + $igst_amt; // $total = $gross + $igst_amt; $available_qty = 5; $data = array( 'id' => $pdts->id, 'qty' => $this->input->post('qty'), 'price' => $pdts->final_price, 'name' => $pdts->product, 'options' => array( 'product_id' => $pdts->id, 'product_hsn' => $pdts->hsn, 'product_name' => $pdts->product, 'product_unit' => $pdts->unit, 'product_rate' => $pdts->selling_price, 'product_mrp' => $pdts->mrp, 'product_gst' => $pdts->igst, 'product_cgst' => $pdts->cgst, 'product_gst_amount' => $igst_amt * $this->input->post('qty'), 'product_net_rate' => $pdts->cost_price, 'product_qty' => $this->input->post('qty'), 'product_free' => 0, 'product_discount_percentage' => $discount_percentage, 'product_discount_rate' => $discount_rate, 'product_total' => $total * $this->input->post('qty'), 'available_qty' => $available_qty, 'category' => $pdts->category, 'rate' => $pdts->selling_price, 'gross' => $gross, 'igst' => $igst, 'cgst' => $igst / 2, 'sgst' => $igst / 2, 'igst_amount' => $igst_amt, 'cgst_amount' => $igst_amt / 2, 'sgst_amount' => $igst_amt / 2, 'total' => $total //final_price($this, $pdts->selling_price, calculate_price_by_precentage($this, $pdts->selling_price, $pdts->discount), calculate_price_by_precentage($this, $pdts->selling_price, $pdts->sgst)) ) ); $this->cart->insert($data); $this->pageViewData['final_discount'] = $this->input->post('discount') == '' ? '0' : $this->input->post('discount'); $this->pageViewData['final_discount_percentage'] = $this->input->post('discount_percentage') == '' ? '0' : $this->input->post('discount_percentage'); $this->pageViewData['ajax'] = true; $res['success'] = true; $res['msg'] = $this->load->view('order/cart_item', $this->pageViewData, true); } echo json_encode($res); } And this is how the cell Value looks. > a:1:{s:32:"b3712e169500f4754be4a6a681220a96";a:7:{s:2:"id";s:2:"69";s:3:"qty";d:1;s:5:"price";d:26.25;s:4:"name";s:28:"Seeded > Dates 200gm Wet > Dates";s:7:"options";a:26:{s:10:"product_id";s:2:"69";s:11:"product_hsn";s:8:"08041020";s:12:"product_name";s:28:"Seeded > Dates 200gm Wet > Dates";s:12:"product_unit";s:2:"GM";s:12:"product_rate";s:5:"26.25";s:11:"product_mrp";s:2:"35";s:11:"product_gst";s:2:"12";s:12:"product_cgst";s:1:"6";s:18:"product_gst_amount";d:3.149999999999999911182158029987476766109466552734375;s:16:"product_net_rate";s:5:"24.70";s:11:"product_qty";s:1:"1";s:12:"product_free";i:0;s:27:"product_discount_percentage";i:0;s:21:"product_discount_rate";d:0;s:13:"product_total";d:29.39999999999999857891452847979962825775146484375;s:13:"available_qty";i:5;s:8:"category";s:9:"AD > Seeded";s:4:"rate";s:5:"26.25";s:5:"gross";s:5:"26.25";s:4:"igst";s:2:"12";s:4:"cgst";i:6;s:4:"sgst";i:6;s:11:"igst_amount";d:3.149999999999999911182158029987476766109466552734375;s:11:"cgst_amount";d:1.5749999999999999555910790149937383830547332763671875;s:11:"sgst_amount";d:1.5749999999999999555910790149937383830547332763671875;s:5:"total";d:29.39999999999999857891452847979962825775146484375;}s:5:"rowid";s:32:"b3712e169500f4754be4a6a681220a96";s:8:"subtotal";d:26.25;}} That looks a lot to me. As a beginner, I need a big help from you guys to get this done.
PHP json_encode JSON_NUMERIC_CHECK with 5808e70581507
Hi I'm experiencing some difficulties with the json_encode function in PHP. I have an object with a hash (uniq ID) but it can have this format 5808e70581507 and because of the "e" surrounded with numbers I think json_encode is trying to set this fellow as an integer. My object looks like this : stdClass Object ( [id] => 16 [title] => userinf2 [desc] => Travail → [startoff] => 2016-10-20 05:00:00 [stop] => 2016-10-20 13:00:00 [status] => 1 [allDay] => 0 [code_mode] => M [uid] => 31250 [gid] => 502935 [recurrence_id] => [recurrence_mode] => [recurrence_repeat_every] => [recurrence_repeat_day] => [recurrence_end_mode] => [recurrence_end_date] => [recurrence_end_number] => [multiple_timeschedule_id] => 5808e70581507 [start] => 2016-10-20 05:00:00 [end] => 2016-10-20 13:00:00 [color] => #7AE7BF [className] => working uid_31250 code_mode_M gid_502935 ) Is there a way to make this working as it is ? The code : echo json_encode($events[6], JSON_NUMERIC_CHECK); var_dump($events[6]->multiple_timeschedule_id); // string(13) Assignment code : function _oms_planning_planning_get() { try { global $user; $intervenants = _oms_planning_get_cab_intervenants(); $sql = 'SELECT * FROM planning_event WHERE 1=1 AND ('; $params_sql = array(); foreach ($intervenants as $key => $a_user) { $sql .= ' uid =:uid' . $key . ' OR '; $params_sql[':uid' . $key] = $a_user->uid; } $sql = substr($sql, 0, -3); $sql .= ')'; $result = db_query($sql, $params_sql); $db_events = $result->fetchAll(); $events = array_map(function ($db_event) use ($intervenants) { $db_event->start = $db_event->startoff; $db_event->end = $db_event->stop; $db_event->color = (isset($db_event->gid) && intval($db_event->gid) > 0) ? _oms_planning_planning_get_color_from_gid($db_event->gid) : _oms_planning_planning_get_color_from_uid($intervenants, $db_event->uid); $db_event->className = ($db_event->status == 1) ? 'working ' : 'idleness '; $db_event->className .= 'uid_' . $db_event->uid . ' '; $db_event->className .= 'code_mode_' . $db_event->code_mode . ' '; $db_event->className .= 'gid_' . $db_event->gid; return $db_event; }, $db_events); return $events; } catch (Exception $e) { print_r($e); } } Mysql column type : multiple_timeschedule_id varchar(200) utf8_general_ci
How to transform this array in a json?
I have this relation CompanyhasMany Branch And using $this->Company->find('all') output this: (int) 1 => array( 'Company' => array( 'id' => '4', 'nome' => 'Somov', 'diretores' => 'Marcelo, Carl' ), 'Branch' => array( (int) 0 => array( 'id' => '3', 'nome' => 'Serra', 'rua' => 'Rua teste 2 exttttt', 'numero' => '22', 'estado' => 'ES', 'cidade' => 'Etc', 'cep' => '', 'responsavel' => '', 'company_id' => '4', 'cnpj' => '' ) ) ), (int) 2 => array( 'Company' => array( 'id' => '5', 'nome' => 'Soimpex', 'diretores' => '' ), 'Branch' => array() ) ) I want to transform this in a json like this to use with Highchart: [{ name: NAME OF COMPANY (nome), data: NUMBER OF BRANCHS }, { name: NAME OF COMPANY (nome), data: NUMBER OF BRANCHS }] How I do this convertion? Thanks
This will return a json object with only one result. If we use previous example, can be done like this: $arr = $this->Company->find('all'); // fetch the array $arr1 = array(); foreach ($arr as $value) { $tmp = array(); $tmp['name'] = $value['Company']['nome']; $tmp['data'] = count($value['Branch']); $arr1[] = $tmp; } return json_encode($arr1);
<?php $sql=mysql_query("select * from Posts limit 20"); $response = array(); $posts = array(); while($row=mysql_fetch_array($sql)) { $title=$row['title']; $url=$row['url']; $posts[] = array('title'=> $title, 'url'=> $url); } $response['posts'] = $posts; $fp = fopen('results.json', 'w'); fwrite($fp, json_encode($response)); fclose($fp); ?> This will generate a file called results.json file where your php file is stored on your online server, taking url and title variables from your MySQL db, you can change the variable names to what you want to fetch.
The whole idea is about like this $arr=$this->Company->find('all'); // fetch the array $arr1=array(); foreach ($arr as $value) { $arr1['name']=$value['Company']['nome']; //some more manual transform to desire format } return json_encode($arr1);
Insert data with insert_batch
I'm using the following statement to insert data in mysql with codeigniter. $this->db->insert_batch($table, $query); $query is generated dynamically can have different number of columns on each array element and maybe the number of elements may differ on condition array ( 0 => array( 'column1'=>'insert1', 'column2'=>'insert2' ), 1 => array( 'column1'=>'insert1'; 'column2'=>'insert2', 'column4'=>'insert4' ) ) could this cause an error or handles codigniter from deafult? I'm building up the query as it follows foreach ($sql_xml as $children) { $children = $this->xml2array($children); foreach ($children as $index => $child) { if ($child != 'feed_id') { $keys[$index] = $child; } } } switch (strtolower($this->config[0]->affiliate)) { case 'case1': $target_xml = $target_xml->productItems; break; case 'case2': $target_xml = $target_xml; break; default : break; } $query = array(); $data = array(); foreach ($target_xml as $feeds) { $feeds = $this->xml2array($feeds); $columns = new RecursiveIteratorIterator(new RecursiveArrayIterator($feeds)); foreach ($columns as $index => $column) { if (array_key_exists($index, $keys)) { if($column != ''){ $data[$keys[$index]] = $column; $data['feed_id'] = $this->id; } //*TODO //$data['affiliate'] = "'.$this->config[0]->affiliate.'"; } } $query[] = $data; } if (count($query > 0)) { foreach ($query as $t){ $this->db->insert($table, $t); } }
The array's would need to have the same amount of "columns". So what I would recommend is the following (setting certain columns to null if no there is no data): array ( 0 => array( 'column1' => 'insert1', 'column2' => 'insert2', 'column3' => null, 'column4' => null ), 1 => array( 'column1' => 'insert1', 'column2' => 'insert2', 'column3' => 'insert3', 'column4' => 'insert4' ) ) Also, your syntax is invalid and it would cause an error since you are using a ; instead of an , on the first column insert.