[PHP] Dubbio valore variabile

  • Creatore Discussione Creatore Discussione paloppa
  • Data di inizio Data di inizio

paloppa

Utente Attivo
26 Feb 2018
68
0
6
31
Salve a tutti, ho un dubbio su l'assegnamento di una variabile.
Nello specifico , sto usando uno script di jquery ui che una volta che l'utente seleziona una determinata data, appare una finestra con tutte le offerte disponibili.

Quindi facendo un esempio:
l'utente entra nel sito , compila i campi nome , cognome, email, oggetto, data di arrivo e data di partenza. Una volta che entrambe le date sono state inserite dall'utente, faccio una query , cercando le offerte che sono prenotabili in quel range di date, e le stampo a video , cosi che l'utente può decidere quella che piu' gli aggrada.

Ora, il mio dubbio è il seguente: perchè se provo a stampare $_POST['data_arrivo'] non mi stampa niente? Considerando che data_arrivo è il nome del campo della data di arrivo che inserisce l'utente, devo per forza inviare il form affinche $_POST['data_arrivo'] venga memorizzata?
 
allora non la stai passando!
Può essere perchè non ho chiuso il form, e sto facendo tutto prima che si chiuda il form?

Qui il codice


PHP:
//dichiaro il campo per la data di arrivo
<div style="float:left; width:100%; height:100%;">
             <span style="padding-top: 17px; padding-left:7px; display:block; float:left; width:40%; height:10%;">Selezionare Data di arrivo</span>
             <p><input style="display:block; float:left; width:60%; height:10%;" type="text" name="data_arrivo" id="data_arrivo" required></p>
         </div>
       //dichiaro campo per data di partenza
  <div style="float:left; width:100%; height:100%;">
             <p><span style="padding-top: 17px; padding-left:7px; display:block; float:left; width:40%; height:10%; ">Selezionare Data di partenza</span></p>
             <p><input style="display:block; float:left; width:60%; height:10%;" type="text" name="data_partenza" id="data_partenza" required></p>
         </div>
         //div che appare non appena le date sono state selezionate dall'utente
<div class="hidden show_div">
         <p style= "text-align:center; font-weight:bold;">Offerte Disponibili nel periodo da Lei selezionato : </p>
             <?php
//mi collego al DB per prendere la data scritta dall'utente e verificare quali offerte sono disponibili nel range
                print_r ($_POST);
                $connessione=mysqli_connect("localhost","root","","lavoro") or die ("Impossibile connettersi");
                $query_offerte="SELECT post_id from rlnz_postmeta where meta_key='inizio'";
                ?>
                <div style="text-align:center; font-weight:bold;">
                    
                <?php
                $i=0;
                $res=mysqli_query($connessione,$query_offerte);
                 while($row = mysqli_fetch_array($res)){
                    
                 print $row['post_id'];?><input type="radio" name="offerta" value="valore<?php $i;?>"/>
                    <?php
                     $i++;
                     print "<br/>";
                 }
            
            
             ?>
             </div>
 
Ho letto che per andare a fare un lavoro del genere, è consigliabile andare a utilizzare la funzione $get di ajax , prendere il valore dal javascript e passarla al php.

Nello specifico , dato che nel campo data_arrivo della form , il campo è di tipo text , con richiamo del datapicker, posso scrivere nel js una chiamata a quella variabile e passarla lato php.

Se non ho detto alcuna cavolata sopra, opterei per questa strada.

Sto cercando i giusti parametri da passare alla funzione $get ma non ho trovato niente. Qualcuno potrebbe fornirmi delle guide o delle spiegazioni in merito a questa funzione?

Grazie a tutti
 
Ho letto che per andare a fare un lavoro del genere, è consigliabile andare a utilizzare la funzione $get di ajax , prendere il valore dal javascript e passarla al php.
Certo, ma come sai forse è consigliabile scrivere in modo non-intrusive il codice... Riguarderei un pò il tutto per amalgamare le discrepanze tra codice e BL, e rendere il codice più gestibile... Poi fai tu...
 
Aggiornando la situazione. Mi trovo davanti questo JS (penso sia corretta la parte JS)
PHP:
$(function(){

    var self=this;
    var data_arrivo = $('#data_arrivo');
    var data_partenza = $('#data_partenza');
     self.check_next=[0,0];
    data_arrivo.datepicker({
        minDate:0,
        dateFormat: "dd/mm/yy",
        onSelect: function (selectedDate) {
                    var depart = jQuery.datepicker.parseDate('dd/mm/yy', selectedDate);
                    depart.setDate(depart.getDate() + 1);
                    data_partenza.datepicker("option", "minDate", depart);
        setTimeout(function(){
            data_partenza.datepicker('show');
        }, 16);
             self.check_next[0]=1;
        if(check_div(self.check_next))load_date_picker();
                }
            });
  
    data_partenza.datepicker({   
        minDate:0,
        dateFormat: "dd/mm/yy",
        onSelect:function(selectedDate){
              self.check_next[1]=1;
        if(check_div(self.check_next))load_date_picker();
            leggi_dati(data_arrivo.val(),data_partenza.val());
          
        }
        });
});
function check_div(ar){
    if(ar[0] && ar[1])return true;
    else return false;
}

function load_date_picker(){
    $('.show_div').removeClass('hidden');
}

function leggi_dati(arrivo,partenza){
        $.ajax({
            url: 'http://localhost/lavoro/57-2/',
            method: 'POST',
            data: {
                data_arrivo: arrivo,
                data_partenza: partenza
            },
            success:function(data){
                console.log(data);
            }
        });
    }

Adesso vorrei richiamare le due date. Soltanto che con $_POST non va.
Che passaggio mi manca?

@Max 1
 
Ultima modifica:
Allora ho letto un paio di esempi su json compresa la teoria che sta dietro.
Mi sono imbattuto inoltre in un esempio che secondo me fa al caso mio.

Qui c'è l'esempio (sperando si possa mettere il link. Se non si può mettere il link chiedo gia scusa anticipatamente)
https://www.codexworld.com/post-get-json-data-from-php-script-jquery-ajax/


Ora io ho fatto qualcosa di simile.
Nello specifico ho creato nel file JS una funzione dove utilizzo il metodo $.ajax
PHP:
function leggi_dati(){
    var data_arrivo = $('#data_arrivo').val();
    $.ajax({
            type: 'POST',
            url: 'test-page-template.php',
            dataType : "json",
            data: {
                data_arrivo: data_arrivo},
            success:function(data){
               
            }
        });
}

Sul PHP invece ho fatto un esempio di stampa , ma ovviamente il $_POST['data_arrivo'] non mi stampa niente.

Vorrei capire perchè per favore.
Lui nel suo esempio utilizza $_POST['user_id']nella query , quindi se dovesse fare un print di quella variabile gli stamperà chiaramente il valore inserito dall'utente nel campo. Perchè a me invece non funziona??
 
Allora ho letto un paio di guide in giro e tutte le mie idee precedenti sulla funzione $.ajax di jquery sono state confermate.

Adesso però penso di essere a un piccolo passo dalla soluzione finale, ma rileggendo più volte il codice , non riesco a capire cosa stia sbagliando.

Ho inserito la mia $.ajax dentro una funzione, che ho deciso di richiamare una volta che vado a mostrare un div. Nello specifico ho questo

PHP:
function load_date_picker(){
    $('.show_div').removeClass('hidden');
    leggi_dati();
    }

function leggi_dati(){
    var data_arrivo = $('#data_arrivo').val();
    $.ajax({
            type: 'POST',
            url: '/lavoro/wp-content/themes/rolenzo/page-templates/test-page-template.php',
            dataType : "json",
            data:{
                data_arrivo:data_arrivo
                },
            success:function(data){
                console.log("Done");
            }
        });
}


Nel PHP invece ho questo codice
PHP:
 <div class="hidden show_div">
         <p style= "text-align:center; font-weight:bold;">Offerte Disponibili nel periodo da Lei selezionato : </p>
             <?php
                $date=$_POST['data_arrivo'];
             $query1="SELECT * FROM messaggio where data_arrivo>='".$date."'" ;
                $result1=mysqli_query($connessione,$query1);
                $row=mysql_fetch_array($result1);
             // for first row only and suppose table having data
                echo json_encode($row);  // pass array in json_encode
            
            
             ?>
             </div>

Cosa sbaglio?
 
Sbagli quello dell'altra volta.... Stai chiamando in ajax, la risposta dovrebbe essere un JSON/XML, no un mix...
Flusso....
ACTION-> AJAX -> CALL FUNCTION -> ELAB -> RESPONSE -> PARSE RESPONSE -> RENDERING
Mi pare tu abbia messo Iil rendering in posizione "ELAB"... mancano 4 passaggi per standardizzare il flusso!
 
Sbagli quello dell'altra volta.... Stai chiamando in ajax, la risposta dovrebbe essere un JSON/XML, no un mix...
Flusso....
ACTION-> AJAX -> CALL FUNCTION -> ELAB -> RESPONSE -> PARSE RESPONSE -> RENDERING
Mi pare tu abbia messo Iil rendering in posizione "ELAB"... mancano 4 passaggi per standardizzare il flusso!

Dove potrei leggere delle informazioni riguardante il flusso? Io pensavo dovessi semplicemente richiamare json encode
 
Mi funziona adesso perchè l'errore mio è stato quello di scrivere mysql_result e non mysqli_result.

Il problema però è sempre questa diavolo di data che non viene riconosciuta!!

$date=$_POST['data_arrivo'];

Codice:
$date=$_POST['data_arrivo'];
              
              print "<br/>";
                $query1="SELECT distinct post_title FROM rlnz_posts JOIN rlnz_postmeta on post_parent=post_id where meta_key='inizio' and meta_value<='".$date."'" ;
                $result1=mysqli_query($connessione,$query1);
                while($row=mysqli_fetch_array($result1)){
             // for first row only and suppose table having data
                 echo json_encode($row['post_title']);// pass array in json_encode
                }
}
 

Discussioni simili