Autor Zpráva
jarda-mb
Profil *
Mám problém s následující funkcí, po jejím zavolání se obsah pole v db s údajem o počtu kusů zvýší o dvojnásobek hodnoty proměnné $pd_qty, stejná situace nastává při obou dotazech (UPDATE i INSERT), řeším to už nějakou dobu, asi se nad tím už nedokážu rozumně zamyslet, jakýkoliv nápad uvítám, díky

<?php
# funkce pridani polozky nakupu do databaze
function addToBasket() {
  # smazat prosle zaznamy
  deleteExpiredBasket();
  # session_id aktualniho zakaznika
  $cc_session_id = session_id();
  # promenne z formulare
  $pd_id = $_POST['pd_id']; # id produktu
  $pd_qty = $_POST['pd_qty']; # pocet ks produktu
  $ref_id = $_POST['ref_id']; # id referencni stranky
  if($pd_id == '' || $pd_qty == '' || $ref_id == '') {
    # chybi vystup z formulare, presmerujeme na vychozi stranku
    header("Location: ".$this->makeURL('shop', '', ''));
    exit;
  }
  $tbl = $this->db['dbase'].".".$this->db['prefix']."cart";
  # pokud je $pd_qty mensi nez jedna, zobrazime hlasku a zastavime script
  if($pd_qty < 1) {
    $pd_err = "<div>\n  Zadejte prosím množství v kladných hodnotách!<br />\n  <a href='".$this->makeURL($ref_id, '', '')."'>Zpět</a>\n</div>\n";
    return $pd_err;
    exit;
  } else {
    # existuje produkt s danym pd_id a session_id jiz v databazi?
    if(mysql_result(mysql_query("SELECT count(*) FROM $tbl WHERE $tbl.pd_id = $pd_id AND $tbl.cc_session_id = '$cc_session_id'"), 0)) {
      # pokud ano, navysime pocet kusu
      if(!mysql_query("UPDATE $tbl SET pd_qty = pd_qty+$pd_qty, c_date = ".time()." WHERE $tbl.pd_id = $pd_id AND $tbl.cc_session_id = '$cc_session_id'")) {
        $pd_err = "<div>\n  Vyskytla se chyba při ukládání do DB!<br />\n  ".mysql_error()."\n</div>\n";
        return $pd_err;
        exit;
      } else {
        # vse probehlo v poradku, presmerujeme na vychozi stranku
        header("Location: ".$this->makeURL($ref_id, '', ''));
      }
    } else {
      # pokud ne, pridame novy zaznam
      if(!mysql_query("INSERT INTO $tbl (pd_id, pd_qty, cc_session_id, c_date) VALUES ('".$pd_id."', '".$pd_qty."', '".$cc_session_id."', '".time()."')")) {
        $pd_err = "<div>\n  Vyskytla se chyba při ukládání do DB!<br />\n  ".mysql_error()."\n</div>\n";
        return $pd_err;
        exit;
      } else {
        # vse probehlo v poradku, presmerujeme na vychozi stranku
        header("Location: ".$this->makeURL($ref_id,'',''));
      }
    }
  }
}
?>
Alphard
Profil
jarda-mb:
Nevoláte tu funkci třeba 2x po sobě? Pro testovací účely tam vložte exit (za dotaz na databázi) a spusťte akci.
jarda-mb
Profil *
Alphard:
zkusím, zkoušel jsem místo dotazů do db jenom zobrazovat obsah proměnný $pd_qty, ale vždy to zobrazilo jenom to, co jsem zadal do formuláře...
jarda-mb
Profil *
Alphard:
výborná práce, vyzkoušeno, vše funguje, díky moc, můžete to označit jako vyřešené
Moderátor Alphard: "označit jako vyřešené" kéž by to šlo…

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: