Autor Zpráva
_fantomas
Profil
Ahoj, chcem sa naučiť trochu s ajaxom, potrebujem aby po stlačeni tlačitka Kúpiť bez refreshu stránky zapisalo data do databázy, snaižil som sa niečo napísať a odkukať z knižky ale volajako mi to nefunguje.
Neviete kde je problém?

test.php

<?php
$cartdata = $_POST['quantity'];
Database::insertData('INSERT INTO `cart` VALUES (:quantity)', $cartdata);

function test() {
    var mnozstvo = document.getElementById("quantity").value;

    $.ajax({
        type: 'post',
        url: 'http://localhost/template/flory/ajax/test.php',
        data: "quantity="+mnozstvo,
        success: function() {
            console.log('data zapisane');
        }
    });
}


        <form id="product-form" method="post" action="">
            <input type="number" id="quantity" min="1" max="18" step="1" value="1" name="quantity">
            <input onclick="test(); return false;" type="submit" id="buy" name="buy" value="Kúpiť">
        </form>
CZechBoY
Profil
Píše ti to nějakou chybu? v php/konzole prohlížeče.
_fantomas
Profil
nie len mi to napiše že data zapísané
RastyAmateur
Profil
_fantomas:
Možná se pletu (moc s ajaxem nedělám), ale nemělo by být namísto type: "post" raději method: "post"?

Jinak, doporučuji to testovat tím způsobem, že ti ten PHP soubor něco vypíše a ty si to pak pomocí javascriptu nějak zobrazíš (třeba i do té konzole).
mckay
Profil
_fantomas:
Loguje Vám to něco do konzole? (F12 ve většině prohlížečů)

Na první pohled bych tipl, že Vám chybí vložení jquery knihovny. Něco na tento způsob:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

Osobně bych to pro Váš způsob udělal takto:
$(document).ready(function(){
  $('form#product-form').submit(function (event) {
   
   // Práce s daty (nejspíš následující řádek)
   var mnozstvo = document.getElementById("quantity").value;
   
   $.ajax(...); // Váš ajax požadavek
   
  
   event.preventDefault();  // Zabrání "fyzickému" odeslání formuláře   
  })
});

RastyAmateur:
Možná se pletu (moc s ajaxem nedělám), ale nemělo by být namísto type: "post" raději method: "post"?
Ne, nezbytně, method je alias pro type. Type se doporučuje používat pro starší jQuery (1.9.0 a dříve).
_fantomas
Profil
jquery vložené mám
mckay
Profil
jquery vložené mám
Zkuste to tedy prosím ještě výše, ale relativně k mému dřívějšímu příspěvku níže popsaným přístupem.
RastyAmateur
Profil
mckay:
Dobré vědět :) stále ovšem doporučuji vytvářet nějaký output v PHP a ten si nechávat vypisovat. Jedině tak zjistíš, kde je chyba.
_fantomas
Profil
Tak už mi to relativne ide ale php nejde
php som upravil na

require_once '../../../engine/manager/Database.php';

$data = Database::fetch('SELECT * FROM `cart`');
print_r($data);

a v konzole to napíše
<br />
<b>Fatal error</b>:  Call to a member function prepare() on null in <b>C:\xampp\htdocs\engine\manager\Database.php</b> on line <b>68</b><br />

na riadku 68 mám

    public static function fetch($sql, $parameters = array())
    {
        $result = self::$db->prepare($sql);
        $result->execute($parameters);
        return $result->fetch(PDO::FETCH_ASSOC);
    }



Problém som už vyriešil vdaka
RastyAmateur
Profil
_fantomas:
Tak já tady vypisuji sloh o tom, kde máš chybu a ty si na to přijdeš sám, jako vážně? :D
Btw: Snažte se zajistit, aby po vyřešení vašeho problému bylo z diskuse zřejmé, jak byl vyřešen.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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