• ModSenior

    Ciao,
    puoi postare il codice utilizzato? Altrimenti è difficile dirti dov'è il problema.


  • Super User

    questa e' una delle clausole:
    [php]
    elseif($durata=="3"){
    $query_offerte .=" and (minimo_notti = 0 OR minimo_notti = 1 OR minimo_notti = 3)";
    }
    [/php]
    a me sembra che sta fatta bene, anzi forse potrei correggerla indicando che minimo_notti deve essere minore o uguale a $durata (che sarebbe il campo select del modulo)


  • ModSenior

    Ma il problema non la dava con 4 notti?


  • Super User

    con tutte, le prove le stavo facendo con il 4, cmq ora ho modificato cosi':
    [php]
    //Se la durata è compresa tra 1 e 14 (notti) mi dice che l'offerta da tirare fuori deve essere inferiore o uguale alla data di scadenza dell'offerta
    if($durata!="16"){
    $query_offerte .= "AND DATE_ADD(STR_TO_DATE('$arrivo', '%Y-%m-%d'), INTERVAL +$durata DAY) <= valida_fino ";
    }

    // Se la durata è uguale a 16 significa che vuole vedere tutte le offerte e quindi non ci sono filtri da applicare
    elseif($durata=="16"){
    $query_offerte .= "";
    }

    //Se la durata è diversa sia da 14 notti che da tutte le offerte (16) significa che deve mostrare tutte le offerte che hanno come minimo di notti un valore minore o uguale alla data scelta
    elseif(($durata!="14")and($durata!="16"))
    {
    $query_offerte .=" and (minimo_notti <= $durata)";
    }
    [/php]
    Per logica dovrebbe essere corretto cosi, no?


  • ModSenior

    No perchè al terzo if non ci arrivi mai, viene sempre soddisfatta una delle condizioni precedenti.


  • Super User

    e quindi devo mettere il terzo al primo posto?


  • ModSenior

    Si, se lo metti sopra funziona come vuoi tu.


  • Super User

    sicuro che non va in conflitto con gli altri 2?


  • ModSenior

    Il problema è cosa stai facendo più che altro, perchè hai 2 if che agiscono sul numero di notti mentre l'altra condizione utilizza un campo totalmente diverso.


  • Super User

    in che senso? tutti e 3 gli if tengono conto della durata.

    Spiego meglio:
    Ho un form composto dal campo "arrivo" dove inserisco la data tipo gg-mm-aaaa e sotto ho il campo "durata" dove ho questi valori

    1 notte (value 1)
    2 notti (value 2)
    3 notti (value 3)
    4 notti (value 4)
    5 notti (value 5)
    6 notti (value 6)
    7 notti (value 7)
    14 notti (value 14)
    tutte le offerte (value 16)

    quindi:

    • se l'utente sceglie il valore 16, non ci saranno filtri e mostrerà tutti i prezzi
    • se l'utente sceglie un valore diverso da 14 o da 16 vedrà tutti i prezzi, anche quelli che hanno un minimo di notti impostato, per esempio se l'offerta ha un minimo di notti pari a 3 e l'utente cerca un'offerta per 4 notti, questa offerta dovrà uscire
    • se l'utente cerca per 14 notti (questo ancora sto cercando di gestirlo) e magari in 14 notti sono comprese tue offerte settimanali come ad esempio una dal 2 al 9 agosto e l'altra dal 9 al 16 agosto, allora dovra' tirarmi fuori la somma delle 2 offerte...

  • Super User

    credo che cosi sia ancora migliore, facendo solo 2 condizioni
    [php]
    //Se la durata è compresa tra 1 e 14 (notti) mi dice che l'offerta da tirare fuori deve essere inferiore o uguale alla data di scadenza dell'offerta con il minimo di notti impostato
    if($durata!="16"){
    $query_offerte .= " and (minimo_notti <= $durata) AND DATE_ADD(STR_TO_DATE('$arrivo', '%Y-%m-%d'), INTERVAL +$durata DAY) <= valida_fino ";
    }

    // Se la durata è uguale a 16 significa che vuole vedere tutte le offerte e quindi non ci sono filtri da applicare
    elseif($durata=="16"){
    $query_offerte .= "";
    }
    [/php]
    ora dovrei lavorare sulla 14 notti...