Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875

    php mysql: come inserire un prezzo settimanale dividendolo per il numero di notti?

    Buongiorno,
    in passato ho gi� affrontato questo "problema" perch� quando inserisco delle offerte turistiche nel database inserisco il prezzo totale e non giornaliera.
    Mi spiego meglio.
    Spesso capita che alcuni hotels ci danno le offerte per lunghi periodi, ad esempio:
    dal 10/05/2023 al 7/07/2023, 7 notti, 350 � a persona
    dal 07/07/2023 al 10/08/2023, 7 notti 420 � a persona
    ecc, ecc
    Nel database inserisco le offerte proprio in questo modo ma ho il problema che quando 2 settimane si accavallano non riesco a recuperare il prezzo automaticamente.
    Per esempio un cliente che vuole fare dal 04/07/2023 al 11/07/2023 dovrebbe pagare 3 notti a 50 euro al giorno e 4 notti a 60 euro al giorno.

    Quello che vorrei fare in fase di inserimento � creare un record per ogni giorno con il prezzo giornaliero, per esempio
    id - data - prezzo - minimo notti
    id 1: 04/07/2023: 50 - 7
    id 2: 05/07/2023: 50 - 7
    id 3: 06/07/2023: 50 - 7
    id 4: 07/07/2023: 60 - 7
    id 5: 08/07/2023: 60 - 7
    id 6: 09/07/2023: 60 - 7
    id 7: 10/07/2023: 60 - 7

    lo stesso dovr� fare poi se un'offerta � valida per 3 notti, per 2 ecc
    In questo modo credo che sarebbe pi� semplice generare un preventivo in modo automatico quando l'utente far� la ricerca dal motore senza che ogni volta dobbiamo farlo noi andando a dividere i prezzi
    Infine, in fase di modifica dei prezzi o dei periodi, dovr� anche riuscirli a modificare dal pannello di controllo.

    Come potrei generare qualcosa del genere, partendo dall'inserimento dei record in questo modo??

  2. #2
    nella tua domanda c'è già la soluzione (in una tabella ad-hoc ti salvi il prezzo di una determinata camera per un determinato giorno): cos'è che non riesci a fare?

  3. #3
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    https://pasteboard.co/Y5oV8uztzYg8.png

    qui è visibile il mio pannello di controllo.
    Cliccando sul + in azzurro mi si creano le righe dove vado ad inserire le tipologie di prezzo:
    tanto può essere solo un prezzo settimanale, tanto potranno essere prezzi per 2-3-4-5 notti ecc, in questo esempio ho creato un'offerta che sarà valida dal 5 al 19 febbraio 2023 inserendo offerte di:
    2 notti a 120 € a persona
    4 notti a 280 € a persona
    7 notti a 350 € a persona
    Fino a qui, con il metodo che sto usando adesso va tutto benissimo e l'inserimento nel database lo faccio in questo modo:
    codice:
    foreach( $prezzo as $keypre => $npre ) {
       $query_tariffe="insert into tariffe-nuove
       (id_tariffa, id_hotel, id_offerta, prezzo, prezzo_notti, note_prezzo)
       values
       (NULL,\"$id_albergo\",\"$id_offerta\",\"$prezzo[$keypre]\",\"$prezzo_notti[$keypre]\",\"$note_prezzo[$keypre]\")";
          if ($conn->query($query_tariffe) === TRUE)
          {
          }
          else
          {
          echo "Error: " . $query_tariffe . "<br>" . $conn->error;
          }
    }
    Per inserire il prezzo (colonna prezzo) diviso il numero di notti (colonna prezzo_notti) dovrei fare un ciclo for tipo questo, ma provando a metterlo nel foreach non funziona
    codice:
    for ($prezzo_notte= $valida_da; $prezzo_notte <=$valida_fino ; $prezzo_notte++) {
    		//inserisco i dati nel database
    		$query_prezzi = "insert into prezzi_nuovi
    		(id_prezzo, id_hotel, data_prezzo, prezzo_notte, prezzo_minimo_notti)
    		values
    		(NULL,\"$id_hotel\",\"$data_prezzo\",\"$prezzo_notte\",\"$prezzo_minimo_notti\"";
    		$risultato_prezzi = $conn->query($query_prezzi);
    		}
    $valida_da e $valida_fino sono le variabili che mi porto dal form dove inserisco le 2 date

    Come potrei risolvere?
    Quel ciclo for lo utilizzo già da un'altra parte e mi crea 1 record per ogni giorno, per questo avevo pensato di usarlo anche qui

  4. #4

  5. #5
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    rieccomi
    allora l'inserimento sono riuscito a farlo correttamente
    in pratica per ogni offerta faccio 3 inserimenti:
    1) inserisco l'offerta vera a propria nella tabella offerte (range di date, cosa include il prezzo, note, ecc) esempio dall'8 al 29 gennaio.

    1) nella tabella tariffe inserisco il prezzo vero e proprio che compare sul sito con un range di date: 7 notti a 350 � (quindi chiunque voglia fare una vacanza in quelle 3 settimane, 7 notti le pagher� 350 �)

    2) nella tabella prezzi i(che � la tabella nuova che voglio gestire) inserisco giorno per giorno il prezzo giornaliero (in questo caso 50 visto che sono 350 euro diviso 7 notti), l'id dell'offerta appena inserita, l'id dell'hotel a cui fa riferimento questo prezzo, il minimo di notti e se � attiva o meno, in pratica avrei una tabella cosi':

    id_prezzo (autoincrement) - id tariffa - id_hotel - id_offerta - data_prezzo - prezzo_notte - prezzo_minimo_notti - prezzo_attivo
    1 - 600 - 20 - 822 - 2023-01-08 - 50 - 7 - 0 (questi sono i valori che stanno nei campi in grassetto)
    2 - 600 - 20 - 822 - 2023-01-09 - 50 - 7 - 0
    3 - 600 - 20 - 822 - 2023-01-10 - 60 - 7 - 0
    4 - 600 - 20 - 822 - 2023-01-11 - 60 - 7 - 0
    5 - 600 - 20 - 822 - 2023-01-12 - 70 - 7 - 0
    6 - 600 - 20 - 822 - 2023-01-13 - 70 - 7 - 0
    ecc ecc per tutti gli altri record inseriti fino al 29 gennaio

    Fino a qui faccio tutto quello di cui ho bisogno.
    Adesso ho il problema delle modifiche

    In pratica supponiamo che adesso l'hotel decide che:
    dall'8 al 15 gennaio il prezzo resta di 350 � settimanali
    dal 15 al 22 gennaio il prezzo deve aumentare a 390 � settimanali
    dal 22 al 29 gennaio il prezzo deve aumentare a 420 � settimanali

    quello che faccio � modificare l'offerta iniziale (quella con il range dall'8 al 29 dalla tabella offerte) e la faccio diventare dall'8 al 15, poi creo una nuova offerta dal 15 al 22 ed infine una nuova offerta dal 22 al 29 gennaio.
    Il problema � che nella tabella prezzi (quella con i prezzi singoli per ogni giorno) ho gi� i prezzi fino al 29 gennaio e non so come modificarli/disattivarli, perche' ad ogni inserimento di offerte mi si creano sempre i record con i giorni singoli.

    In pratica devo trovare il modo per modificare entrambe le tabelle in modo corretto

    Spero si sia capito il problema

  6. #6
    invece di fare sempre INSERT usa MERGE (se il record c'è già lo aggiorni)
    oppure cancella i record per quelle date prima di andare di INSERT

  7. #7
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    Quote Originariamente inviata da optime Visualizza il messaggio
    invece di fare sempre INSERT usa MERGE (se il record c'è già lo aggiorni)
    oppure cancella i record per quelle date prima di andare di INSERT
    qui pero' leggo che merge non è supportato da mysql

    https://stackoverflow.com/questions/...ction-in-mysql

  8. #8
    https://dev.mysql.com/doc/refman/5.7...duplicate.html dovrebbe darti lo stesso effetto. altrimenti c'è l'opzione 2 (prima cancelli e poi inserisci)

  9. #9
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    vorrei procedere con la seconda opzione che forse è piu' semplice

    stavo provando con questo codice dove indico che se la data nel database è tra il range di date che inserisco nel pannello di controllo, mi fa l'aggiornamento del prezzo o dei prezzi, altrimenti dovrebbe settare il campo prezzo_attivo = 1 (che significa che quel prezzo non è piu' attivo)
    Per fare cio', l'unico if che mi viene in mente è questo:
    codice:
    if(($data_creata>=$valida_da)and($data_creata<=$valida_fino)){
    aggiorno le date 
    }
    subito sotto dico che diversamente, se la data creata è inferiore a valida_da ed è superiore a $valida_fino (quindi non rientra nel range di date inserite nel pannello di controllo) mi deve settare a 1 il campo prezzo_attivo.
    E' l'unica idea che mi viene in mente ma Comunque mi aggiorna solo i dati senza mettere 1 il campo_attivo
    questo è il codice:
    codice:
    echo"data creata: $data_creata - valida da: $valida_da - valida fino: $valida_fino<br><br>";
        if(($data_creata>=$valida_da)and($data_creata<=$valida_fino)){
      		$aggiorna_prezzi = "update prezzi_nuovi set
      		prezzo_notte = \"$prezzo_da_inserire\",
          prezzo_attivo = \"$tariffa_attiva[$keypre]\"
      		WHERE id_tariffa = \"$id_tariffa[$keypre]\" and data_prezzo = \"$data_creata\"";
      		$risultato_prezzi = $conn->query($aggiorna_prezzi);
          }
        if(($data_creata<$valida_da)and($data_creata>$valida_fino)){
          $aggiorna_prezzi2 = "update prezzi_nuovi set
          prezzo_attivo = \"1\"
      		WHERE id_tariffa = \"$id_tariffa[$keypre]\" and data_prezzo = \"$data_creata\"";
      		$risultato_prezzi2 = $conn->query($aggiorna_prezzi2);
          }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.