Le message suivant s'affiche lorsque les notifications sont activées:
Remarque: une valeur numérique non bien formée rencontrée
https://i.stack.imgur.com/lcI4P.png
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Product; use App\Cart; use App\orders; use DB; use Auth; class CartController extends Controller { public function add(){ $id = request('id'); $product = Product::find($id); $oldCart = session()->has('cart') ? session()->get('cart') : null; $cart = new Cart($oldCart); $cart->add($product, $product->id); request()->session()->put('cart', $cart); return response()->json($cart->totalQty); } // public function add22(){ // $id = request('id'); // $product = Product::find($id); // $oldCart = session()->has('cart2') ? session()->get('cart2') : null; // $cart = new Cart($oldCart); // $cart->add($product, $product->id); // request()->session()->put('cart2', $cart); // return response()->json($cart->totalQty); // } public function add2($id) { $product = Product::find($id); $oldCart = session()->has('cart') ? session()->get('cart') : null; $cart = new Cart($oldCart); $cart->add($product, $product->id); request()->session()->put('cart', $cart); // dd(session()->get('cart')); return back(); } public function index(){ if(session()->has('cart')) { $products = session()->get('cart')->items; } // elseif(session()->has('cart2')) // { // $products = session()->get('cart2')->items; // } else { $products = 'nothing'; } $currency = DB::table('currency')->get(); return view('basket', compact('products', 'currency')); } public function order(){ if(session()->has('cart')) { $products = session()->get('cart')->items; } // elseif(session()->has('cart2')) // { // $products = session()->get('cart2')->items; // } else { $products = 'nothing'; } $currency = DB::table('currency')->get(); return view('order', compact('products', 'currency')); // return view('order'); } public function store(Request $request){ $this ->validate(request(), [ 'name'=>'required', 'address'=>'required', 'auth'=>'required', ]); if(Auth::check()) { $orders = orders::create([ 'name' => $request['name'], 'description' => $request['address'], 'auth' => $request['auth'], ]); } $cart = session()->get('cart'); $message = "ÐмÑ: ".request('name')."\nÐдÑеÑ:".request('address')."\nÐаказаннÑе ÑоваÑÑ:"; foreach($cart->items as $product) { $message .= $product['item']['name']." * ".$product['qty'].", Цена - ".$product['item']['entityprice']*$product['qty']."\n"; } $message .= "\nÐÑого: ".$cart->totalPrice." Ñг\n"; $subject = "Ðаказ ÑоваÑа"; $headers = 'From: info@hansolomed.kz' . "\r\n" . 'Reply-To: info@hansolome.kz' . "\r\n". 'X-Mailer: PHP/' . phpversion(); mail('015@i-marketing.kz', $subject, $message, $headers); request()->session()->forget('cart'); } public function remove($id){ $oldCart = session()->has('cart') ? session()->get('cart') : null; $cart = new Cart($oldCart); $cart->removeItem($id); if(count($cart->items) > 0){ session()->put('cart', $cart); }else{ session()->forget('cart', $cart); } return redirect()->back(); } public function redis($id){ $oldCart = session()->has('cart') ? session()->get('cart') : null; $cart = new Cart($oldCart); $cart->reduceByOne($id); session()->put('cart', $cart); return redirect()->back(); }
}
3 Réponses :
Je pense que user3783243 a raison. Utilisez floatval () ou intval (), puis vous pouvez les multiplier.
<?php echo e(number_format( floatval( session()->get(cart)->totalPrice, 0, ',',' ')* floatval($currency[0]->coefficient) ; ?>
Cela peut masquer la notification mais ne pas corriger la racine du problème, ce qui rend le débogage difficile. C'est similaire au masquage des avis par l'opérateur @
. Quelque part, une chaîne semble contenir une valeur non numérique. Imaginez que c'est '50 '$50'
et qu'il est traité comme 0
Je suppose que le contenu n'est que du mauvais type, «20» au lieu de 20. Bien sûr, floatval () n'est pas pour vérifier ou nettoyer les mauvaises entrées / valeurs comme «50 $».
Vous calculez avec une chaîne number_format
qui ne renvoie pas de nombre formaté valide.
echo e(number_format( session()->get(cart)->totalPrice * $currency[0]->coefficient , 2, ',', '' ));
imprime 1 001
.
'1 001' * 2
lance un avis et calcule 2
(1 * 2), pas 2001.90
comme prévu.
Votre format signifie 0
décimales, ,
comme point décimal et de l' espace en tant que groupe de séparateur de milliers. Utilisez les formats numériques uniquement pour la sortie, ne calculez pas avec des nombres formatés.
Vous voulez probablement:
echo number_format(1000.95, 0, ',', ' ');
Pour l'alternative https://github.com/bumbummen99/LaravelShoppingcart qui est le projet fourchu de https://github.com/Crinsane/LaravelShoppingcart et prend également en charge les dernières versions de Laravel.
Il existe une méthode appelée Cart::totalFloat()
qui retournera votre valeur flottante pour le total du panier.
############### OU #################
Pour ce package, convertissez simplement le format des nombres en valeurs entières ou flottantes. Un exemple est montré ci-dessous
$ num = '1 200 998,255';
########## POUR LES VALEURS FLOTTEUR ##########################
echo filter_var($num, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
# sortie: 1200998.255
########## POUR LES VALEURS ENTIÈRES ##########################
echo filter_var($num, FILTER_SANITIZE_NUMBER_INT);
# sortie: 1200998
Je suppose que
$product
contient des chaînes, pas des entiers, donc PHP doit les convertir en entiers pour faire le calcul. La conversion jette cet avis.@ user3783243 La conversion émet un avis uniquement lorsque la chaîne n'est pas numérique.