Visualizzazione risultati 1 fino 8 di 8

Discussione: progetto registrazioni ospitalità

  1. #1
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito progetto registrazioni ospitalità

    Salve a tutti.
    Scrivo nel forum perchè volevo aggiungere una nuova funzionalità al mio programma di gestione studenti ed ho qualche difficoltà.
    Sono alla fase di progettazione, ho solo abbozzato qualcosina.
    In breve spiego quali sono le mie esigenze.
    Nella residenza abitano in maniera stabile alcuni studenti che occasionalmente (quando manca il compagno di camera) si concede di ospitare un amico.
    Ad esempio se in una camera manca il coinquilino nel fine settimana, il posto può servire ad ospitare un amico.
    Però ci sono delle regole da rispettare.
    La regola principale è che nessuno può ospitare oltre 3 notti ogni 30 giorni.

    Andando al sodo. Ho già una tabella dove registro i residenti (tabella A) e una dove inserisco gli ospiti (tabella B).
    La mia idea è di farne una terza (tabella C) che registri e controlli le ospitalità notturne.
    Questa terza tabella potrebbe essere più o meno così:
    ID - residente - data_richiesta - ospite - data_entrata - data_uscita
    Potrebbe andare mi sembra.

    Per la prima parte farei un FORM di ricerca del residente (tabella A) che fa la richiesta di ospitalità.
    Quindi dovrei andare nella tabella C e poter andare indietro di 30 giorni per analizzare e contare le ospitalità già fatte. Per poi mostrare a video i risultati e se è in regola andare avanti.
    Il mio problema è come faccio a fare questi controlli ?
    Ho cercato di essere breve, ma spero di essere stato esaustivo e chiaro.
    Ringrazio tutti fin d'ora per l'attenzione e l'aiuto

  2. #2
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Stavo pensando di aggiungere un campo alla tabella C, che forse potrebbe essermi utile per fare il conteggio.
    Nello specifico numero_notti. In questo campo potrei segnare le notti occupate ogni volta dall'ospite.
    ID - residente - data_richiesta - ospite - data_entrata - data_uscita - numero_notti

    Così, facendo il controllo a partire dai 30 giorni precedenti, se la somma del numero_notti del residente è maggiore di 3, viene segnalato che non è più possibile ospitare.

  3. #3
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Sono riuscito a realizzare la mia query con il procedimento indicato precedentemente.
    Un esempio di cosa ottengo:
    Codice HTML:
    Camera   Cognome Nome	  Notti  	dal giorno 	  al giorno
    12-4 	 BIANCHI SARAH	    2 	        05/04/2019 	  07/04/2019
    12-4 	 BIANCHI SARAH	    1   	07/04/2019 	  08/04/2019
    Il problema è che non so come fare per contare il valori nel campo Notti.

    Questa è la query:
    Codice PHP:
    $query = "SELECT * FROM residenti, notturni WHERE cod_res = '$cod' and abitante = '$cod' and data_entrata > '$newdate' ";
    $result = $mysqli->query($query);
    while (
    $row = $result->fetch_array())
    {
    echo
    '
    <tr>...
    <td>'
    . $row['notti'] . '</td>
    <td>'
    . $row['data_entrata'] . '</td>
    <td>'
    . $row['data_uscita'] . '</td> ...
    Come posso fare ? Grazie

  4. #4
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Ho aggiunto una seconda query per il calcolo che mi serve.
    Mi rimane un problemino da risolvere in quanto mi viene segnalato un
    Notice: Undefined index: notti in C:\xampp\htdocs\assenze\notti\inserisciRes.php on line 112
    Ho letto che è un tentativo di accedere ad un dato elemento di un array che non risulta disponibile.
    Non riesco però a sistemare la cosa.
    La query in questione è:
    Codice PHP:
    109 - $query = " SELECT SUM(notti) FROM notturni WHERE abitante = '$cod' and data_entrata > '$newdate' ";
    110 - $result = $mysqli->query($query);
    111 - while($row = $result->fetch_array(MYSQLI_ASSOC)) {
    112 - $bp = $row['notti'];
    113 - echo $bp; }
    Su PhpMyAdmin la query funziona.
    Mi aiutate in questo passaggio ? Grazie

  5. #5
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    È Notti l'array associativo non notti.
    Se la regola è che nessun residente senza coinquilino può ospitare fino ad un massimo 3 notti ogni 30 giorni devi correlare gli ospiti a i residenti altrimenti se controlli solo gli ospiti non potrai mai sapere se i residenti offrono 3 notti per più ospiti :)
    Chi può ospitare? Chi è senza coinquilino e non abbia raggiunto già il limite di tre notti [campo data inizio data fine campo ospite [può anche essere tabella C] e campo si o no può ospitare tabella A].
    SELECT * FROM residenti WHERE ospite='si' (indica solo l'assenza del compagno)
    Mentre data_inizio e data_fine è correlata dal residente e l'ospite.. Ovviamente la data è valida solo se non sono già scaduti i 30 giorni.
    PS. Il campo DATE di mysql è solamente AAAA-MM-GG https://www.html.it/articoli/memoriz...mpo-con-mysql/
    aggiungere o sottrarre a datetime
    Bisogna stabilire quando inizia questo periodo di 30 giorni.

    Potranno accedere come ospite dei residenti solo chi è ospite [tabella B] e che non abbia superato già i limiti esposti prima e in più quest'ultimo non abbia già superato tale soglia con altri residenti.
    Ultima modifica di darbula : 12-04-2019 alle ore 19.32.24

  6. #6
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie Darbula per l'interessamento.
    Ho fatto forse un pò di confusione.
    Grosso modo sono riuscito a fare quello che volevo.
    Quello che mi è rimasto da risolvere riguarda l'ultima query postata.

    Per farla breve, la SELECT:
    Codice PHP:
    $query = " SELECT SUM(notti) FROM notturni WHERE abitante = '$cod' and data_entrata > '$newdate' ";
    mi fa la somma delle notti utilizzate dal residente nei 30 giorni precedenti.
    Se faccio un print_r ( $row )
    Codice PHP:
    $query = " SELECT SUM(notti) FROM notturni WHERE abitante = '$cod' and data_entrata > '$newdate' ";
    $result = $mysqli->query($query);
    while(
    $row = $result->fetch_array(MYSQLI_ASSOC)) {
    print_r( $row ); // debug code
    echo $row['notti'];}
    ottengo:
    Array ( [SUM(notti)] => 3 )
    Notice: Undefined index: notti in ...
    La somma va bene (il campo nel db è notti), quindi ho trovato il modo di fare il controllo che volevo, ma non riesco ad utilizzare il dato perchè mi viene segnalato un Undefined index.

    Come si risolve in questo caso l'Undefined index ?
    Oppure c'è un altro modo per avere il dato ?

    In realtà poi, $row['notti'] lo devo assegnare ad una variabile per poter fare il controllo.
    Per questo l'avevo legato alla variabile $bp = $row['notti'];
    Così quando $bp è uguale a 3 devo far visualizzare "limite ospitalità raggiunto".
    Se invece $bp è inferiore a 3 il processo va avanti per completare l'ospitalità.

    Spero di essere stato più chiaro.
    Grazie amici

  7. #7
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,730

    Predefinito

    Quando esegui
    Codice:
    SELECT # FROM...
    nel campo # specifichi gli elementi che vuoi leggere.

    Nel tuo caso hai
    Codice:
    SELECT SUM(notti) FROM ...
    quindi non puoi leggere:
    Codice PHP:
    $row['notti']
    Perché "notti" non è specificato.

    Hai specificato solo la somma, quindi l'unico dato che puoi leggere è (come anche indicato dalla print_r):
    Codice PHP:
    $row['SUM(notti)']
    ----------

    Per migliorare la leggibilità, se ti piace di più puoi utilizzare gli alias, con AS. Nel tuo caso ad esempio può essere:

    Codice:
    SELECT SUM(notti) AS pippo FROM ...
    e puoi leggere
    Codice PHP:
    $row['pippo']
    Se proprio vuoi usare $row['notti'], puoi sostituire pippo con notti usando AS.

    Ciao!
    Ultima modifica di alemoppo : 13-04-2019 alle ore 09.44.09

  8. #8
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie tante alemoppo.
    Con le tue info ho risolto.
    Era proprio quello che cercavo.
    Grazie ancora.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •