Thay inval thanh isset có sao không.? ubercart cancel form checkout

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
ntsieucom's picture

Notice: Undefined index: cart_order in uc_cart_checkout_form_cancel() (line 340 of /home/truongsonjsc.com/public_html/sites/all/modules/ubercart/uc_cart/uc_cart.pages.inc).

Dòng 340:
function uc_cart_checkout_form_cancel($form, &$form_state) {
if (intval($_SESSION['cart_order']) > 0) {
uc_order_comment_save($_SESSION['cart_order'], 0, t('Customer cancelled this order from the checkout form.'));
unset($_SESSION['cart_order']);
}

Em đã fix lỗi bằng cách fix lỗi bằng các thay intval thành isset.

Vậy intval và isset khác nhau như thế nào, và việc thay đổi như thế có gây ra lỗi gì không, em fix rồi thì không thấy bị nữa, nhưng không biết được tác hại của nó thế nào. mong được giúp đỡ. cảm ơn @Group_Drupal_Vietnam

Comments

Để chắc ăn

ntsieucom's picture

Vì hok biết nên em đã để chắc chắn hơn em thay

function uc_cart_checkout_form_cancel($form, &$form_state) {
if (intval($_SESSION['cart_order']) > 0) {
uc_order_comment_save($_SESSION['cart_order'], 0, t('Customer cancelled this order from the checkout form.'));
unset($_SESSION['cart_order']);
}

thành

function uc_cart_checkout_form_cancel($form, &$form_state) {
if (intval(isset($_SESSION['cart_order'])) > 0) {
uc_order_comment_save($_SESSION['cart_order'], 0, t('Customer cancelled this order from the checkout form.'));
unset($_SESSION['cart_order']);
}

intval thì giá phải là số

MinhVN's picture

intval thì giá phải là số nguyên.
isset thì kiểm giá trị có tồn tại không.
Bạn thay như vậy không sao cả, chỉ chắc chắc hơn thôi :)

Intval() sẽ parse giá trị đầu

zinferro's picture

Intval() sẽ parse giá trị đầu vào thành kiểu int, nếu giá trị đầu vào != int thì sẽ trả về 0

Isset() dùng để kiểm tra giá biến truyền vào đã được set giá trị hay chưa, sẽ return "true" hoặc "false",

như vậy "if ( intval(isset($_SESSION['cart_order'])) >0 )" cũng chẳng khác gì "if(isset($_SESSION['cart_order']))", vì nó đều trả về "0"(false) hoặc "1"(true) :D

Mục đích của if gốc khi bạn chưa thay đổi < if (intval($_SESSION['cart_order']) > 0) {.... > là nhằm kiểm tra xem trong giỏ hàng của bạn đã có sản phẩm chưa (nếu có thì số lương > 0, nếu không có thì số lượng = 0) ,

Nếu $_SESSION['cart_order'] đã được set = 0 trước đó rồi, và nếu bạn dùng isset ( $_SESSION['cart_order']) thì nó sẽ luôn trả về "true" => sẽ có 1 vài trường hợp xảy ra không đúng với mục đích ban đầu. Nhưng mình nghĩ khác biệt này cũng không quan trọng lắm.

intval và isset khác nhau như thế nào

Hoangmainet's picture

intval và isset khác nhau như thế nào, và việc thay đổi như thế có gây ra lỗi gì không, em fix rồi thì không thấy bị nữa, nhưng không biết được tác hại của nó thế nào. mong được giúp đỡ