PROBLEMA Php e mysql non carica i dati all'aperura della pagina

  • Autore discussione Autore discussione jonni
  • Data d'inizio Data d'inizio
Pubblicità

jonni

Nuovo Utente
Messaggi
15
Reazioni
1
Punteggio
37
Ciao a tutti,

ho un problema con un sito web che sto scrivendo, in poche parole all'apertura della pagina uno script php deve recuperare tutti i dati degli utenti presenti al momento e fare una lista, in alternativa dovrebbe far vedere un messaggio in cui dice che non c'è nessuno presente.



Codice:
$mysqli = new mysqli('localhost', 'sito_prenotazione', 'prova', 'aule_studenti');
if ($mysqli->connect_error) {
    echo '<div class="alert alert-danger mt-5 mx-auto col-md-5" role="alert">
    Spiacenti non è stato possibile contattare il server.</br> Preghiamo di riprovare più tardi. </br>
    Se il problema dovesse persistere si prega di contattare aulestudenti@gmail.com
  </div>'; }

  $now = new DateTime();
  $giorno = $now->format('Y-m-d');
  $ora = $now->format('H:i');







 
    $lista = $mysqli -> query("SELECT nome, cognome, tesserati.tessera, volontario, pagamento  FROM tesserati JOIN presenza  ON tesserati.tessera = presenza.tessera WHERE '$ora' > ora_inizio AND '$ora' < ora_fine AND data = '$giorno' ");
    if($lista -> num_rows > 0){
        echo '<div class="accordion col-md-8 mx-auto mt-5" id="accordionPanelsStayOpenExample">';
        while($row = $lista->fetch_array(MYSQLI_ASSOC)){
             // default su si perchè viene modificato solamente in caso di pagamento non effettuato
            echo '
            <div class="accordion-item">
            <h2 class="accordion-header" id="panelsStayOpen-heading'.$row["tessera"].'">
              <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapse'.$row["tessera"].'" aria-expanded="true" aria-controls="panelsStayOpen-collapse'.$row["tessera"].'">'
                .$row["nome"]. '  '.$row["cognome"];
                if($row["volontario"] != 0){
                    echo '<span class=" badge rounded-pill bg-success ms-2">volontario</span>';
                }
               if(!$row["pagamento"]){
                    echo '<span class=" badge rounded-pill bg-danger ms-2">Pagamento</span>';
                }

                echo '
              </button>
            </h2>
            <div id="panelsStayOpen-collapse'.$row["tessera"].'" class="accordion-collapse collapse " aria-labelledby="panelsStayOpen-heading'.$row["tessera"].'">
              <div class="accordion-body">
                <ul class="list-group">
                <li class="list-group-item"> Tessera:  '.$row["tessera"].'</li>
              </ul>
              </div>
            </div>
          </div>
            ';
        }

        echo '</div>';

   

    }else{
        echo '<div class="alert alert-danger mt-5 mx-auto col-md-5" role="alert" >
              Nessuno presente.
               </div>';
    }

Fino a quando testo il sito in locale funziona (anche se magari devo refreshare un paio di volte prima di vedere la pagina. Ma quando lo provo su siteground vedo solo il messaggio che dice che nessuno è presente. In una altra pagina molto simile ho lo stesso identico problema solo che in quel caso c'è anche un form che quando viene inviato fa funzionare anche tutto il resto e non so perchè dato che non dovrebbero essere collegate le due cose.

Premetto che non conosco bene il php quindi se doveste avere qualunque altro consiglio sarò ben felice di acettarlo
 
Odio le query in php fatte così, non hai controllo sugli errori...
Inoltre non vedo da nessuna parte un eventuale $mysqli -> close();
Per fare un debug e vedere dove sta il problema, dovresti fare una cosa del genere
PHP:
if (!$mysqli->query("QUERY CHE VUOI FARE")) {
    printf("ERRORE: %s\n", $mysqli->error);
}
Facendo così ti stampa l'errore nel caso in cui ci siano dei problemi
 
c'era fino a quando lo testavo su localhost in realtà, magari provo a riintrodurlo per vedere se da qualche errore sul server.

In realtà non avevo visto da nessuna parte $mysqli -> close(). è necessario chiudere il collegamento con il database?
 
c'era fino a quando lo testavo su localhost in realtà, magari provo a riintrodurlo per vedere se da qualche errore sul server.

In realtà non avevo visto da nessuna parte $mysqli -> close(). è necessario chiudere il collegamento con il database?
È utile per rilasciare le risorse, soprattutto in ambienti concorrenti dove possono accedere molti utenti.
 
ah ok grazie mille, allora lo inserirò subito nelle pagine

per quanto riguarda il problema che si verifica invece hai in mente da cosa possa dipendere? non mi da nessun errore.
credo però possa essere un problema di cache perchè se cancello la cache dinamica da siteground aggiorna subito dopo. non c'è un modo per cancellarla tutte le volte che apro la pagina?
 
Ultima modifica:
ah ok grazie mille, allora lo inserirò subito nelle pagine

per quanto riguarda il problema che si verifica invece hai in mente da cosa possa dipendere? non mi da nessun errore.
credo però possa essere un problema di cache perchè se cancello la cache dinamica da siteground aggiorna subito dopo. non c'è un modo per cancellarla tutte le volte che apro la pagina?
Altro suggerimento utile:
Non fare tante query in tante pagine. Piuttosto, creati una classe Database dove dentro inserisci i dati per connetterti al DB e nel costruttore inizializzi l'oggetto. Poi ti crei i metodi connect e disconnect, oltre ai metodi per fare le query.
Così hai un codice in un unico file PHP ed è più pulito :)
P.S: come suggerito da @Moffetta88 gestisci gli errori delle query per segnalare i messaggi opportuni a chi visita il sito.
 
Ok
Altro suggerimento utile:
Non fare tante query in tante pagine. Piuttosto, creati una classe Database dove dentro inserisci i dati per connetterti al DB e nel costruttore inizializzi l'oggetto. Poi ti crei i metodi connect e disconnect, oltre ai metodi per fare le query.
Così hai un codice in un unico file PHP ed è più pulito :)
P.S: come suggerito da @Moffetta88 gestisci gli errori delle query per segnalare i messaggi opportuni a chi visita il sito.

Ok grazie mille. È un po' più strutturale purtroppo come modifica e mi ci vorrà del tempo la inserirò in future versioni, adesso mi serve qualcosa di funzionante rapidamente purtroppo.

Comunque ho scoperto che il problema era di memoria cache automatica di site ground. Disattivandola ora funziona.

Avete qualche consiglio invece per fare velocemente la sanificazione degli input per impedire SQL ijections? Per ora mi sono limitato a un White listing molto stringente dato che alla fine devo gestire solo nomi cognomi e numeri. Però non vorrei avere problemi a cui non ho pensato
 
Ok


Ok grazie mille. È un po' più strutturale purtroppo come modifica e mi ci vorrà del tempo la inserirò in future versioni, adesso mi serve qualcosa di funzionante rapidamente purtroppo.

Comunque ho scoperto che il problema era di memoria cache automatica di site ground. Disattivandola ora funziona.

Avete qualche consiglio invece per fare velocemente la sanificazione degli input per impedire SQL ijections? Per ora mi sono limitato a un White listing molto stringente dato che alla fine devo gestire solo nomi cognomi e numeri. Però non vorrei avere problemi a cui non ho pensato
Per la sql injection si usano i prepared statement https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php
 
Pubblicità
Pubblicità
Indietro
Top