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

    Risultati doppi in ciclo while

    Buonasera a tutti,

    Tabella Utenti
    codice HTML:
    id_utente       nome
         1             pippo
         2             pino
         3             gigi

    Tabella appuntamenti
    codice HTML:
    id        giorno_app            ora_inizio            ora_fine            id_utente
    1        2020-04-20             09:00                10:00                   1
    2        2020-04-20             11:00                12:00                   2
    3        2020-04-20             15:00                16:00                   3
    Posso prendere appuntamento dalla mattina alle 09:00 alle 17:00

    Faccio due query la prima vado a leggere tutti gli utenti dopo di che per ogni utente vado a vedere gli appuntamenti e se c'è posto ovvero ogni utente non è occupato dalle 09:00 alle 17:00 mi deve dare una risposta di libero

    Codice PHP:
    $day_cont='2020-04-20';
    require_once(
    '../../aic/Connections/aic.php'); 
    mysql_select_db($database_aic$aic);
    mysql_query('set names utf8');    
    require_once(
    '../../aic/Connections/aic.php'); 
    mysql_select_db($database_aic$aic);
    mysql_query('set names utf8');    
    $query_a "SELECT * FROM utenti";
    $Recordset_a mysql_query($query_a$aic) or die(mysql_error());
    while(
    $row_a=mysql_fetch_row($Recordset_a)) 
                           {    
                           
    $id_utenti=$row_a[0];
                                                                           
    $query_Recordset3 "SELECT id_utente FROM appuntamento WHERE appuntamento.giorno_app='$day_cont' and appuntamento.ora_inizio<='09:00' and appuntamento.ora_fine>='17:00' and id_utente='$id_utenti'";
    $Recordset3 mysql_query($query_Recordset3$aic) or die(mysql_error());
    $row_Recordset3 mysql_fetch_assoc($Recordset3);
    $totalRows_Recordset3 mysql_num_rows($Recordset3);    

    if(
    $totalRows_Recordset3=='0') {
    echo 
    $totalRows_Recordset3;
    }

    Mi fa il controllo di tutti e 3 gli utenti, nell'esempio fatto gli utenti non sono occupati per tutto il giorno dalle 09:00 alle 17:00 e giustamente mi da una risposta libero, solo me la restituisce per 3 volte tante qanti sono gli utenti.
    E' possibile avere un solo libero invece di 3?

    Qualche suggerimento?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Perché sei dentro al ciclo
    Codice PHP:
    while($row_a=mysql_fetch_row($Recordset_a)) 
    che viene eseguito 3 volte, una per ogni utente recuperato dalla query
    codice:
    SELECT * FROM utenti

  3. #3
    Per poter risolvere il problema come potrei fare senza stravolgere fino a dove sono arrivato?


  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Sposta
    Codice PHP:
    // 0 senza gli apici perché è un numero e con === 
    // perché anche FALSE  è == 0
    // FALSE è un possibile valore ritornato da mysql_num_rows,
    // viene restituito in caso di errore
    if($totalRows_Recordset3 === 0) {
        echo 
    $totalRows_Recordset3;


    fuori dal ciclo while.

    P.S. Il codice dovrai comunque stravolgerlo, perché le istruzioni mysql_ sono state abbandonate, se il server sarà aggiornato a PHP7 non funzionerà più nulla, devi usare le mysqli_ (con la i finale) modificandole come serve perché non sono proprio uguali alle mysql_, oppure dovresti passare a PDO.
    Ultima modifica di Alhazred; 19-04-2020 a 22:50

  5. #5
    Buongiorno,
    purtroppo in questo modo noon ottengo nessuna risposta

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Puoi mostrare il codice modificato?

  7. #7
    Codice PHP:
    $day_cont='2020-04-20';
    require_once('../../aic/Connections/aic.php');
    mysql_select_db($database_aic, $aic);
    mysql_query('set names utf8');
    require_once('../../aic/Connections/aic.php');
    mysql_select_db($database_aic, $aic);
    mysql_query('set names utf8');
    $query_a = "SELECT * FROM utenti";
    $Recordset_a = mysql_query($query_a, $aic) or die(mysql_error());
    while($row_a=mysql_fetch_row($Recordset_a))
    {
    $id_utenti=$row_a[0];

    $query_Recordset3 = "SELECT id_utente FROM appuntamento WHERE appuntamento.giorno_app='$day_cont' and appuntamento.ora_inizio<='09:00' and appuntamento.ora_fine>='17:00' and id_utente='$id_utenti'";
    $Recordset3 = mysql_query($query_Recordset3, $aic) or die(mysql_error());
    $row_Recordset3 = mysql_fetch_assoc($Recordset3);
    $totalRows_Recordset3 = mysql_num_rows($Recordset3);
    }
    if($totalRows_Recordset3=='0') {
    echo $totalRows_Recordset3;
    }

  8. #8
    Ho risolto facendo in questo modo:


    Dentro il ciclo while:

    Codice PHP:
    if($totalRows_Recordset3=='0') {
    //echo $ora_cont; echo "<br/>";
    $array_orario[] = array('orario' => $ora_cont);

    Fuori dal ciclo while elimino i doppioni
    Codice PHP:
    $serialized array_map('serialize'$array_orario);
    $unique array_unique($serialized);
    $uniqueArray_orario array_intersect_key($array_orario$unique);
    // re indicizzo
    $pre_orario array_values($uniqueArray_orario);

    print_r(array_values($pre_orario)); 
    Scusa la mia ignoranza, ma è poco che tratto questo linguaggio, ma quando stampo a video i risultati esconno in questo modo

    Array ([0] => Array([orario] => 09:30:00)[1] => Array([orario] => 11:00:00)[2] => Array([orario] =>11:30:00)

    come devo fare per far stampare a video solo gli orari?

    Grazie

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2001
    residenza
    NG Lab Cecchina, Roma
    Messaggi
    143
    Devi eseguire un ciclo sul Array che devi stampare.
    Ti potrebbe funzionare così ?
    Codice PHP:
    foreach ($pre_orario => $valore) {
    echo 
    "ORARIO: "$valore[orario];

    Ottima scelta

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.