Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [PHP] Date, attribuire una variabile.

    Ciao Ragazzi.
    E' giorni e giorni che provo a creare uno script per la gestione del mio piccolo b&b, ma guardando i tutorials e seguendo alcuni script e scriptando ben 1468 righe di codice. Il risultato è stato DRASTICO.

    Errore dopo errore.

    Naturalmente non pretendevo un'uscita fenomenale dal mio primo tentativo, ma neanche questa serie di errori, che ho cercato di risolvere uno per uno per poi rangiungere alla soluzione che sbagliavo metodo.

    Allora qui chiedo a voi che mi state aiutando tantissimo.

    Se per esempio io avessi due date prese da due form 2006-09-09 e 2006-09-16. <--Scritte in formato per MySql visto che in un secondo momento le dovrò infilare la dentro

    Per trovare la differenza di queste due date mi basterebbe fare:
    Codice PHP:
    <?php
    //Creazione della data in formato MySql importato dai seguenti form.
    $dataa "$_POST['annoa']-$_POST['mesea']-$_POST['giornoa']";
    $datab "$_POST['annob']-$_POST['meseb']-$_POST['giornob']";

    //Esecuzione differenza dei giorni
    $giornitotali "$datab - $dataa";
    ?>
    E fino a quà non dovrebbe fare una grinza per una data del genere che ho posto l'esempio prima.

    Ma se le dati fossero:
    Dataa = 2006-09-09
    Datab = 2006-10-10
    il risultato che mi restituirebbero sarebbe 0-1-1 che personalmente non è il risultato che volevo ottenere.

    Di conseguenza quale sarebbe il miglio modo per gestire la differenza fra due date?

    Passiamo al problema più drastico.
    Poniamo il caso che io riesca a trovare la differenza di queste due date.
    riprendiamo quelle precendenti---> 2006-09-09 - 2006-10-10
    Il risultato dei giorni è 32 per stabilire un prezzo su questo giorni mi basterebbe fare:
    Codice PHP:
    <?php
    //Totale dei giorni
    $totaledeigiorni "32";

    //Calcolare il prezzo
    $prezzo "$totaledeigiorni*35";

    //Stampiamo il prezzo
    echo "Il prezzo totale è $prezzo €";

    ?>
    Ma la cosa non è mai semplice quanto sembra.
    Ponendo il caso che dal 2006-09-09 al 2006-09-20 costi ben 35€ mentre nei giorni 2006-09-21 al 2006-10-10 costi 40€.

    Come faccio ad imporre che da data a data deve imporre un prezzo e dopo ne deve imporre un'altro?

    Ringranzio veramente di cuore a chi mi ha aiutato altre volte è chi mi aiuterà nelle prossime.
    Ideabile - Web Design
    Me on Flickr
    http://www.flickr.com/photos/m3kh

    Soit qui mal y pense...

  2. #2
    Il gioco è facile calcoli la differenza data,poi controlli con dei cicli ed if se in quella suddetta data cambia il prezzo,fai la somma ed è fatta..più facile a farlo che a spiegarlo

    se vuoi altre dritte puoi dirlo

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Vedi se ti torna utile. L'ho adattato a due soli periodi come nel tuo esempio ma lo puoi estendere ai prezzi di tutto l'anno. Ora devo scappare. Se hai problemi ti rispondo stanotte.
    Codice PHP:
    // Definisco le date di inizio e di fine di ciascun periodo
    $iniz_ordinaria1 "2006-09-09"
    $fine_ordinaria1 "2006-09-20"
    $iniz_ordinaria2 "2006-09-21";
    $fine_ordinaria2 "2006-10-10";

    // Setto le mie costanti relative ai prezzi stagioniali
    define("PREZZO_ORDINARIA",35);
    define("PREZZO_ALTA",40);


    // La funzione, dati periodo di inizio e di fine, genera un array con tutte le date comprese
    // nell'intervallo, estremi compresi
    function crea_Array($da,$a,$arr ''){
    global 
    $arr;
    for(
    $i strtotime($da); $i<=strtotime($a); $i strtotime("+1 day",$i))
        
    $arr[] = date('Y-m-d',$i);
    return 
    $arr;
    }

    // Richiamo la funzione per crearmi l'array con tutte le date stagionali
    $stagione   crea_Array($iniz_ordinaria1,$fine_ordinaria1);
    $stagione   crea_Array($iniz_ordinaria2,$fine_ordinaria2);

    // Date inizio e fine abbonamento
    $inizio_abb "2006-09-18"
    $fine_abb   "2006-09-23";

    // Mi permette di creare un nuovo array con la funzione anzichè accodare gli elementi
    // all'array già esistente.

    // Creo l'array con tutte le date relative al periodo dell'abbonamento
    $abbonamento crea_Array($inizio_abb,$fine_abb$arr =array() );

    echo 
    '<pre>';
    print_r($stagione);
    print_r($abbonamento);
    echo 
    '</pre>';

    // La funzione mi crea un nuovo array dove i valori dell'array passato (le date), diventano
    // le chiavi del nuovo array e i valori sono i prezzi relativi al periodo.
    function associa($array){
    global 
    $stagione;
    for (
    $i 0$i count($array); $i++){
        
    $nuovo[$array[$i]] = ($i<=11 PREZZO_ORDINARIA PREZZO_ALTA); }
    return 
    $nuovo;
    }

    // Richiamo la funzione
    $mappato associa($stagione);

    echo 
    '<pre>';
    print_r($mappato);
    echo 
    '</pre>';

    function 
    costo_Abbonamento(){
    $totale 0;
    global 
    $abbonamento,$mappato;
    foreach(
    $abbonamento as $giorno){
    // se il giorno dell'abbonamento corrisponde alla chiave dell'array stagionale aggiungo al totale
    // il prezzo corrispondente   
          
    if(array_key_exists($giorno,$mappato)) 
          
    $totale+= $mappato[$giorno];
        }
    return 
    $totale;
    }

    echo 
    costo_Abbonamento(); 
    // 225 18-19-20 = 35*3 (105) + (21-22-23) = 40*3 (120) = 225

    ?> 

  4. #4
    Grazie Playweb sopratutto per la tua immediata prontezza.

    Per quanto mi riguarda trovare la differenza di date forse ho capito visto che l'avevo pure scriptato

    Teoricamente dovrebbe essere così.

    Codice PHP:
    $prezzo "SELECT giorni DATEDIFF(@finePeriodo,@inizioPeriodo)
    INTO @giorni"

    Dovrebbe mettere i giorni totali dentro la tabbella giorni...

    Il fatto che non ho capito come dovrebbe funzionare il fatto dei cicli ed if per le variabili di prezzo durante date diverse.

    Ti dispiace farmi un'esempio?

    Grazie ancora Playweb
    Ideabile - Web Design
    Me on Flickr
    http://www.flickr.com/photos/m3kh

    Soit qui mal y pense...

  5. #5
    Grazie mille Nicola75ss!!!
    Allora ho impostato, i prezzi per tutto l'anno.

    Ma ho notato una cosa:
    ---------------------------
    function associa($array){
    global $stagione;
    for ($i = 0; $i < count($array); $i++){
    $nuovo[$array[$i]] = ($i<=11 ? PREZZO_ORDINARIA : PREZZO_ALTA); }
    return $nuovo;
    }
    ---------------------------
    se io volessi cambiare questo 11 (la variabile di giorni in modo che entri l'altro tipo di prezzo)
    in 210 e poi ricambiarla in seguito sarebbe?

    Codice PHP:
    function associa($array){
    global 
    $stagione;
    for (
    $i 0$i count($array); $i++){
        
    $nuovo[$array[$i]] = ($i<=210<=271<=334 PREZZO_STAGIONE1 PREZZO_STAGIONE2 PREZZO_STAGIONE3 PREZZO_STAGIONE4); }
    return 
    $nuovo;

    Correggimi se sbaglio
    Ideabile - Web Design
    Me on Flickr
    http://www.flickr.com/photos/m3kh

    Soit qui mal y pense...

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Questo è un esempio con l'operatore ternario e tre pezzi differenti. Se non vuoi fare troppi annidamenti puoi anche usare tanti if. I valori numerici (46,106) ecc.vanno inseriti manualmente in base alle tue date. Sarebbe da ottimizzare il codice in maniera che faccia il lavoro in automatico.
    Quando avrò un pò di tempo vedrò di sistemarlo.
    Codice PHP:
    $nuovo[$array[$i]] = ($i<=46 PREZZO_ORDINARIA: ($i<=106 PREZZO_ALTA PREZZO_BASSA)); } 

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Adesso va meglio. Ad ogni periodo i prezzi vengono associati direttamente.
    Codice PHP:
    <?php
    // Definisco le date di inizio e di fine di ciascun periodo
    $iniz_stagione1 "2006-09-09"
    $fine_stagione1 "2006-09-20"
    $iniz_stagione2 "2006-09-21";
    $fine_stagione2 "2006-10-10";
    $iniz_stagione3 "2006-10-11";
    $fine_stagione3 "2006-10-20";
    $iniz_stagione4 "2006-10-21";
    $fine_stagione4 "2006-10-31";

    // Setto le mie costanti relative ai prezzi stagioniali
    define("PREZZO_STAGIONE1",35);
    define("PREZZO_STAGIONE2",40);
    define("PREZZO_STAGIONE3",45);
    define("PREZZO_STAGIONE4",30);

    // Passo alla funzione inizio e fine periodo e il prezzo associato.
    // Le chiavi saranno le date e i valori i rispettivi prezzi
    function crea_Array($da,$a,$prezzo,$arr ''){
    global 
    $arr;
        for(
    $i strtotime($da); $i<=strtotime($a); $i strtotime("+1 day",$i)) {
        
    $arr[date('Y-m-d',$i)] = $prezzo;
        }
    return 
    $arr;
    }

    // Richiamo la funzione per crearmi l'array con tutte le date stagionali
    $stagione   crea_Array($iniz_stagione1,$fine_stagione1,PREZZO_STAGIONE1);
    $stagione   crea_Array($iniz_stagione2,$fine_stagione2,PREZZO_STAGIONE2);
    $stagione   crea_Array($iniz_stagione3,$fine_stagione3,PREZZO_STAGIONE3);
    $stagione   crea_Array($iniz_stagione4,$fine_stagione4,PREZZO_STAGIONE4);

    echo 
    '<pre>';
    print_r($stagione);
    echo 
    '</pre>';

    // Date inizio e fine abbonamento
    $inizio_abb "2006-09-18"
    $fine_abb   "2006-10-12";

    // Creo l'array con tutte le date relative al periodo dell'abbonamento
    $abbonamento crea_Array($inizio_abb,$fine_abb,0,$arr =array() );
    $i 0;
    foreach(
    $abbonamento as $chiave => $valore) {
    $nuovo[$i] = $chiave;
    $i++;
    }

    echo 
    '<pre>';
    //print_r($abbonamento);
    print_r($nuovo);
    echo 
    '</pre>';

    function 
    costo_Abbonamento(){
    $totale 0;
    global 
    $nuovo,$stagione;
    foreach(
    $nuovo as $giorno){
    // se il giorno dell'abbonamento corrisponde alla chiave dell'array stagionale aggiungo al totale
    // il prezzo corrispondente   
          
    if(array_key_exists($giorno,$stagione)) 
          
    $totale+= $stagione[$giorno];
        }
    return 
    $totale;
    }

    echo 
    costo_Abbonamento(); // nell'esempio 995 euro
    //18-20 settembre           35 euro * 3 105
    //21 settembre-10 ottobre 40 euro * 2 800
    // 11-12 ottobre          45 euro * 2  90
    // Totale                               995
    ?>

  8. #8
    Grazie ancora Nicola75ss.

    Le tue versioni dello script funzionano veramente EGREGIAMENTE, forse meglio dire ECCEZIONALMENTE.

    Però ora mi sorge un'altro problema o meglio, mi sorge una domanda visto il mio cratere d'ignoranza.

    Praticamente ho fatto in modo di includere il file per calcolare il prezzo.

    Alla fine del tuo script dopo aver tolto tutti i print ed echo vari ho inserito questo.
    Codice PHP:
    $totalea "costo_Abbonamento();"
    Poi nel mio file che serve a salvare i dati dal form ho inserito questa funzione.
    Codice PHP:
    //Tipo di camera scelto. Serve per il calcolo del prezzo.
    $tipocamera $_POST['tipocamera'];

    include(
    'prezzi/prezzo.'.$tipocamera.'.php');

    print (
    "$totalea 
    "
    ); 
    Il tuo script in fatti è stato salvato con diversi nomi appunto per avere il prezzo di ogni camera.
    Lo sò che è una cosa ortodossa ma non ho problemi di spazio ^^', preferivo fare qualcosa che sapevo fare e sopratutto semplice.

    Allora il file richiama correttamente il file prezzo.1.php
    ma quando svolgo il print mi stampa costo_Abbonamento();

    Allora ho deciso di cambiare con echo. Ma niente da fare è uguale.

    Allora forse ho pensato che fosse un problema di include è ho deciso di cambiarlo in fopen con valore r.
    Risultato? BIANCO.

    Sai quale sarebbe il giusto metodo?

    Ho anche qualche problema con gli script MySQL sapresti darmi una mano?
    Ideabile - Web Design
    Me on Flickr
    http://www.flickr.com/photos/m3kh

    Soit qui mal y pense...

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    funzione.php

    Codice PHP:
    <?php
    function crea_Array($da,$a,$prezzo,$arr ''){
    global 
    $arr;
        for(
    $i strtotime($da); $i<=strtotime($a); $i strtotime("+1 day",$i)) {
        
    $arr[date('Y-m-d',$i)] = $prezzo;
        }
    return 
    $arr;
    }

    function 
    converti($abbonamento) {
    global 
    $abbonamento;
    $i 0;
    foreach(
    $abbonamento as $chiave => $valore) {
        
    $nuovo[$i] = $chiave$i++;
        }
    return 
    $nuovo;
    }

    function 
    costo_Abbonamento($nuovo,$stagione){
    $totale 0;
    foreach(
    $nuovo as $giorno){
    // se il giorno dell'abbonamento corrisponde alla chiave dell'array stagionale aggiungo al totale
    // il prezzo corrispondente   
          
    if(array_key_exists($giorno,$stagione)) 
          
    $totale+= $stagione[$giorno];
        }
    return 
    $totale;
    }

    $iniz_stagione1 "2006-09-09"
    $fine_stagione1 "2006-09-20"
    $iniz_stagione2 "2006-09-21";
    $fine_stagione2 "2006-10-10";
    $iniz_stagione3 "2006-10-11";
    $fine_stagione3 "2006-10-20";
    $iniz_stagione4 "2006-10-21";
    $fine_stagione4 "2006-10-31";

    // Setto le mie costanti relative ai prezzi stagioniali
    define("PREZZO_STAGIONE1",35);
    define("PREZZO_STAGIONE2",40);
    define("PREZZO_STAGIONE3",45);
    define("PREZZO_STAGIONE4",30);


    // Richiamo la funzione per crearmi l'array con tutte le date stagionali
    $stagione   crea_Array($iniz_stagione1,$fine_stagione1,PREZZO_STAGIONE1);
    $stagione   crea_Array($iniz_stagione2,$fine_stagione2,PREZZO_STAGIONE2);
    $stagione   crea_Array($iniz_stagione3,$fine_stagione3,PREZZO_STAGIONE3);
    $stagione   crea_Array($iniz_stagione4,$fine_stagione4,PREZZO_STAGIONE4);
    ?>
    pagina che recupera i valori dal form

    Codice PHP:
    <?php
    include('funzione.php');

    // qui recuperi le date dal form. fai tutti i tuoi controlli sulla validità dei campi e vedi se usare un campo, tre campi da concatenare o come preferisci
    $inizio_abb $_POST['inizio']; 
    $fine_abb $_POST['fine'];

    $abbonamento crea_Array($inizio_abb,$fine_abb,0,$arr =array() );

    $abbonamento converti($abbonamento);

    $prezzo costo_Abbonamento($abbonamento,$stagione);
    echo 
    $prezzo;
    ?>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.