[Javascript] jQuery PHP MySql - inserire variabile nel DataBase

giumazzi

Nuovo Utente
16 Feb 2017
27
2
3
provincia PESARO
In un file jQuery ho questa selezione
Codice:
    click: function () { //Click event
        if (this.status() == 'available') { //optional seat
            var maxSeats = 3;
            var ms = sc.find('selected').length;
            //alert(ms);
            if (ms < maxSeats) {

                price = this.settings.data.price;



        $('<option selected>R'+(this.settings.row+1)+' S'+this.settings.label+'</option>')
                    .attr('id', 'cart-item-'+this.settings.id)
                    .attr('value', this.settings.id)
                    .attr('alt', price)
                    .data('seatId', this.settings.id)
                    .appendTo($cart);

                $counter.text(sc.find('selected').length+1);
                $counter.attr('value', sc.find('selected').length+1);

                $total.text(recalculateTotal(sc));
                $total.attr('value', recalculateTotal(sc));

                return 'selected';
            }
                alert('You can only choose '+ maxSeats + ' seats.');
                return 'available';

        } else if (this.status() == 'selected') { //Checked

                //Update Number
                $counter.text(sc.find('selected').length-1);
                $counter.attr('value', sc.find('selected').length-1);

                //Delete reservation
                $('#cart-item-'+this.settings.id).remove();

                //update totalnum
                $total.text(recalculateTotal(sc));
                $total.attr('value', recalculateTotal(sc));

                //Delete reservation
                  //$('#cart-item-'+this.settings.id).remove();
                //optional
                return 'available';

        } else if (this.status() == 'unavailable') { //sold
            return 'unavailable';

        } else {
            return this.style();
        }
    }
});
Per inserire anche il prezzo di ogni singolo posto ho modificato la variabile
$('<option selected>
così
Codice:
$('<option selected>R'+(this.settings.row+1)+' S'+this.settings.label+' P'+this.settings.data.price+'</option>')
Graficamente ho quindi questa situazione schermata.png

Tutti i dati della selezione vengono inseriti in un DB con questa pagina PHP
PHP:
<?php
if (isset($_POST['book'])) {
    $date = $_POST["date"];
    $session = $_POST["session"];
    $counter = $_POST["counter"];
    $total = $_POST["total"];
    $user_id = $_SESSION["id"];
    $film_id = $_GET['id'];
    $seat = (isset($_POST['seat']) ? $_POST['seat']:array());
    if (is_array($seat)) {                
        foreach ($seat as $selectedOption){
            $query = "INSERT INTO booking(USER_ID, FILM_ID, BOOKING_SESSION, BOOKING_DATE, BOOKING_SEAT, BOOKING_PRICE, BOOKING_NUM)
                        VALUES ('$user_id','$film_id','$session','$date','$selectedOption','$total','$counter')";

            $result = mysqli_query ($connection,$query)
                or die ("<div class='alert alert-danger' role='alert'>You couldn't execute query</div>");  
            }
        echo "  <div class='alert alert-success' role='success'>
                    Congrats your booking has been done! Print the tickets <a href='./fpdf18/generate-pdf.php?film=$film_id' target='_blank'>here</a>!
                </div>";
    }

}
?>
nella quale manca l'ulteriore campo, che ho creato nel DB, SEAT_PRICE.

Non riesco a capire come inserire il prezzo (che dovrebbe essere in $selectedOption) nel DB.

Ogni aiuto è apprezzato
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, manca il value alla option, penso sia per qeullo.
edit
anzi c'è ma inseriscisci l'id non il price
.attr('value', this.settings.id)
 

giumazzi

Nuovo Utente
16 Feb 2017
27
2
3
provincia PESARO
Penso che pregiudichi il funzionamento del plugin
perché:
1) price è definita come this.setting.data.price
Codice:
price = this.settings.data.price;
2) price non è "value" ma "alt". value è riferita ai posti (es. A_1)
screen2.jpg

Codice:
                    .attr('id', 'cart-item-'+this.settings.id)
                    .attr('value', this.settings.id)
                    .attr('alt', price)
                    .data('seatId', this.settings.id)
                    .appendTo($cart);
Io mastico pochissimo jQuery ma credo sia diverso
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
value è il parametro che ti arriva in post, se vuoi ricevere il price devi metterlo nel value.
Metti nel php var_dump($_POST) e guarda i parametri che arrivano.
$cart dovrebbe essere la select che avra un name il valore che ti aspetti lo trovi in $_POST['nome_della_select']
 

giumazzi

Nuovo Utente
16 Feb 2017
27
2
3
provincia PESARO
Ho provato a fare i cambiamenti come mi hai suggerito e ottengo questi risultati:
1) Situazione Corrente
Questo è il Dump
Codice:
array(6) { ["session"]=> string(5) "12:00" ["date"]=> string(10) "2016-01-11" ["seat"]=> array(1) { [0]=> string(3) "C_9" } ["counter"]=> string(1) "1" ["total"]=> string(5) "99.95" ["book"]=> string(4) "book" }
Questi i dati
Codice:
                    $('<option selected>R'+(this.settings.row+1)+' S'+this.settings.label+' P'+this.settings.data.price+'</option>')
                    .attr('id', 'cart-item-'+this.settings.id + )
                    .attr('value', this.settings.id)
                    .attr('alt', price)
                    .data('seatId', this.settings.id)
                    .appendTo($cart);
2) Situazione Con l'inserimento di price nel value
Questo è il Dump
Codice:
array(6) { ["session"]=> string(5) "12:00" ["date"]=> string(10) "2016-01-11" ["seat"]=> array(1) { [0]=> string(5) "99.95" } ["counter"]=> string(1) "1" ["total"]=> string(5) "99.95" ["book"]=> string(4) "book" }
Questi i dati
Codice:
                    $('<option selected>R'+(this.settings.row+1)+' S'+this.settings.label+' P'+this.settings.data.price+'</option>')
                    .attr('id', 'cart-item-'+this.settings.id)
                    .attr('value', this.settings.id)
                    .attr('alt', price)
                    .attr('value', price)
                    .data('seatId', this.settings.id)
                    .appendTo($cart);
Con la modifica mi passa il prezzo ma non più il posto
io però devo passare entrambi:
il posto (es. C_9) e il prezzo (es. 99.95)
 

giumazzi

Nuovo Utente
16 Feb 2017
27
2
3
provincia PESARO
OK e grazie adesso ci provo.
Solo per ricapitolare nel file js devo fare così?
Codice:
                    $('<option selected>R'+(this.settings.row+1)+' S'+this.settings.label+' P'+this.settings.data.price+'</option>')
                    .attr('id', 'cart-item-'+this.settings.id)
                    .attr('value', this.settings.id)
                    .attr('alt', price)
                    .attr('value', price)
                    .data('seatId', this.settings.id)
                    .appendTo($cart);
Oppure così

Codice:
                    $('<option selected>R'+(this.settings.row+1)+' S'+this.settings.label+' P'+this.settings.data.price+'</option>')
                    .attr('id', 'cart-item-'+this.settings.id)
                    .attr('value', this.settings.id)
                    .attr('alt', price)
                    .attr('value', this.settings.data.price)
                    .data('seatId', this.settings.id)
                    .appendTo($cart);
alt mi serve perché devo farci le somme
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
se segui il link postato devi fare cosi
Codice:
.attr('value', this.settings.id + "|" + this.settings.data.price)