Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2023
    Messaggi
    17

    Attivare il comando selected da elenco html usando php.

    Buon giorno a tutti,
    spiego brevemente il mio problema.
    Parto da un file PHP, all’interno ho dei form con elenchi tipo questo:

    codice HTML:
    <label for="lunedi_1">Lunedì dalle</label>
            <select id="lun_1" name="lun_1" >
                    <option value="09:00">09:00</option>
                    <option value="09:30">09:30</option>
                    <option value="10:00">10:00</option>
                    <option value="10:30">10:30</option>
                    <option value="11:00">11:00</option>
            </select>


    In html posso attivare la funzione selected e questo particolare lo conosco, ma io ho bisogno di attivare questa funzione recuperando il dato precedentemente salvato in un file di testo del tipo data.txt.
    In pratica quando recupero i dati salvati con il pulsante - Reload Data -, i vari elenchi dovrebbero visualizzare i dati precedentemente immessi invece che mostrarmi il valore iniziale di ogni elenco.
    Vi posto il codice abbozzato funzionante (in parte). Esso contiene sia il salvataggio dei dati che il recupero, ma è mancante della funzione di selezione automatica dei valori precedentemente salvati.
    Cioè in pratica salvo per esempio il valore 11:30, ricaricando il dato - Reload Data - nell’elenco deve essere visualizzato il valore 11:30 precedentemente salvato.
    Non so se questo si possa fare... spero vivamente di sì.
    Grazie in anticipo per la collaborazione.

    codice HTML:
    <!DOCTYPE HTML>
    <html lang="it">
    <head>
    <title>Esempio B</title>
    </head>
    <?php
    $char_divider = ","; // Carattere che divide gli elementi
    $filename4 = "data.txt";  
    if (file_exists($filename4)) { 
    // Non fare nulla 
    } else { 
    $fp = fopen('data.txt', 'w');
    // $all_data = $fp = fopen('data_0.txt', 'w');
    // Prima di registrare il file si uniscono tutte le variabili in un unico file
    // ma vengono separate dal carattere divisore ---> $char_divider
    $all_data = "".$char_divider."".$char_divider."".$char_divider ."".$char_divider."";
    fwrite($fp, $all_data,);
    fclose($fp);
    }
    
    if(isset($_POST["reload_data"])){ // Ricarica il file
    // Leggo i dati salvati nel file txt
    $myfile = fopen("data.txt", "r") or die("Unable to open file!");
    $read = fread($myfile, filesize("data.txt")); // Lettura del file globale
    $divider = explode($char_divider, $read); // explode ($char_divider, $read) provvedono a separare
    // i diversi input in variabili diverse
    fclose($myfile);
    
    // Riporto i valori per ripristinare il form
    $lun_1 = $divider[0];
    $lun_2 = $divider[1];
    $lun_3 = $divider[2];
    $lun_4 = $divider[3];
    $_POST["lun_1"];
    $_POST["lun_2"];
    $_POST["lun_3"];
    $_POST["lun_4"];
    
    echo "dati recuperati ";
    echo $lun_1; echo " ";
    echo $lun_2; echo " ";
    echo $lun_3; echo " ";
    echo $lun_4; echo " ";
    }
    ?>
    
    <?php
    if(isset($_POST["enter_data"])){
    
    if(isset($_POST['lun_1'])){
    $lun_1 = $_POST['lun_1'];
    }
    if(isset($_POST['lun_2'])){
    $lun_2 = $_POST['lun_2'];
    }
    if(isset($_POST['lun_3'])){
    $lun_3 = $_POST['lun_3'];
    }
    if(isset($_POST['lun_4'])){
    $lun_4 = $_POST['lun_4'];
    }
    
    // Se la pagina è stata richiamata tramite submit
    // Recupero i valori dal form
    $fp = fopen('data.txt', 'w');
    // Prima di registrare il file si uniscono tutte le variabili in un unico file
    // ma vengono separate dal carattere divisore ---> $char_divider
    $all_data = $lun_1.$char_divider.$lun_2.$char_divider.$lun_3.$ char_divider.$lun_4;
    // echo $all_data;
    fwrite($fp, $all_data,);
    fclose($fp);
    }
    ?>
    <body>
    <form action="prova.php" method="post">
    <table>
    <tr>
    <th style="width:12%">Dati da introdurre</th>
    <th style="width:22%"> </th>
    <th style="width:22%"> </th>
    <th style="width:22%"> </th>
    <th style="width:22%"> </th>
    </tr>
    <tr>
    <td>Input time</td>
    <td>
    <label for="lunedi_1">Lunedì dalle</label>
    <select id="lun_1" name="lun_1" >
    <option value="09:00">09:00</option>
    <option value="09:30">09:30</option>
    <option value="10:00">10:00</option>
    <option value="10:30">10:30</option>
    <option value="11:00">11:00</option>
    </select>
    </td>
    <td>
    <label for="lunedi_2">alle</label>
    <select id="lun_2" name="lun_2" class="text">
    <option value="11:30">11:30</option>
    <option value="12:00">12:00</option>
    <option value="12:30">12:30</option>
    <option value="13:00">13:00</option>
    <option value="13:30">13:30</option>
    </select>
    </td>
    <td>
    <label for="lunedi_3">e dalle</label>
    <select id="lun_3" name="lun_3" class="text">
    <option value="14:00">14:00</option>
    <option value="14:30">14:30</option>
    <option value="15:00">15:00</option>
    <option value="15:30">15:30</option>
    <option value="16:00">16:00</option>
    </select>
    </td>
    <td>
    <label for="lunedi_4">alle</label>  
    <select id="lun_4" name="lun_4" class="text">
    <option value="18:00">18:00</option>
    <option value="18:30">18:30</option>
    <option value="19:00">19:00</option>
    <option value="19:30">19:30</option>
    <option value="20:00">20:00</option>
    <option value="20:30">20:30</option>
    </select>
    </td>
    </tr>
    <tr>
    <td>
    </td>
    <td>
    <input class="favorite styled" type="submit" name="enter_data" value="Enter data">
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>  
    </tr>
    </table>
    </form>
    <br>  
    <form action="prova.php" method="post">
    <table>
    <tr>
    <th style="width:12%">Dati Salvati</th>
    <th style="width:22%"> </th>
    <th style="width:22%"> </th>
    <th style="width:22%"> </th>
    <th style="width:22%"> </th>
    </tr>
    <tr>
    <td>Saved time</td>
    <td style="text-align:left;">Lunedì dalle <?php echo $lun_1?></td></td>
    <td style="text-align:left;">alle <?php echo $lun_2?></td>
    <td style="text-align:left;">dalle <?php echo $lun_3?></td>
    <td style="text-align:left;">alle <?php echo $lun_4?></td>
    <tr>
    <td>
    </td>
    <td>
    <input class="favorite styled" type="submit" name="reload_data" value="Reload data">
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>  
    </tr>
    </table>
    </form>  
    </body>
    </html>
    Ultima modifica di patdepri; 27-02-2024 a 00:49

  2. #2
    Nei vari tag option, controlla se il valore letto dal file corrisponde al corrente valore di option e in caso affermativo, aggiungi l'attributo selected.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2023
    Messaggi
    17
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    Nei vari tag option, controlla se il valore letto dal file corrisponde al corrente valore di option e in caso affermativo, aggiungi l'attributo selected.
    Prima di tutto non sono un esperto di html e di php, comunque me la sto cavando abbastanza.
    Ho già provato con vari tentativi, ma non ho avuto successo.
    Puoi provare il mio codice e vedere se ti funziona magari come hai in mente, oppure indicamelo.

    grazie

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    Ciao, è certamente buono il consiglio di filippo.toso.

    Quote Originariamente inviata da patdepri
    Ho già provato con vari tentativi, ma non ho avuto successo.
    A parte il codice iniziale, hai provato a sviluppare qualcosa sulla base di quanto ti è stato indicato?
    Potrebbe sempre essere utile mostrare ciò che hai fatto, anche se non funzionante. In tal modo si può verificare dove andare a correggere o come indirizzarti per portare avanti lo sviluppo.

    Non vorrei dare la minestra pronta ma, non avendo possibilità di dedicarci troppo tempo per seguire lo sviluppo passo passo, posto direttamente una soluzione.

    L'idea è quella di avere una funzione che vada a creare dinamicamente i blocchi <select> con le relative <option>. In questo modo puoi creare un ciclo, sfruttando magari un array con cui passare i relativi valori delle <option> e confrontarli col valore letto in modo da attribuire l'attributo "selected" alla corrispondente <option> (come ti è stato consigliato).


    Puoi inserire questa funzione nel tuo PHP:
    Codice PHP:
    // Costruisce e visualizza un elemento <select> con relative <option> secondo i parametri specificati
    function creaElementoSelect($id$arrOption$selectedValue){
    // $id            : valore degli attributi "id" e "name" da applicare a <select>
    // $arrOption     : array valori da attribuire alle <option> come attributo "value" e come contenuto testuale
    // $selectedValue : valore per il quale viene applicato l'attributo "selected" alla <option> corrispondente
    //
      // Ciclo l'array e ottengo il blocco delle <option>
      
    $options array_reduce($arrOption, function ($accumulator$currentValue) use ($selectedValue) {
        
    $selected $currentValue == $selectedValue " selected" "";
        return 
    $accumulator."<option value=\"$currentValue\"$selected>$currentValue</option>";
      }, 
    "");
      
    // Visualizzo <select> e <option>
      
    echo "<select id=\"$id\" name=\"$id\" class=\"text\">$options</select>";

    Considera che dovrai inserirla in un punto in cui è sempre vista, cioè NON dentro le condizioni in cui è avvenuto o meno qualche submit. Puoi inserirla ad esempio alla fine dell'intero blocco PHP iniziale.

    Nota inoltre che verrà sempre applicato al <select> quel class="text". Nel tuo codice vedo che questo non lo hai applicato per il primo <select>, per cui potresti eventualmente definire un ulteriore argomento nella funzione, così da stabilire quando applicare quella classe. Valuta tu.

    A questo punto dovrai rimuovere, all'interno del codice HTML, i <select> e relative <option> per sostituirli con una riga PHP in cui vai a richiamare la funzione passando la relativa lista di valori.
    Qui un esempio per il primo elemento <select>:

    Codice PHP:
    ...
    <td>Input time</td>
    <td>
    <label for="lunedi_1">Lunedì dalle</label>
    <?php creaElementoSelect("lun_1", ["09:00""09:30""10:00""10:30""11:00"], $lun_1); ?>
    </td>
    ...
    Qui non faccio altro che richiamare la funzione passando i parametri relativi al select che si vuole creare. Per tutti i <select> dovrai quindi richiamare questa stessa funzione con i corrispettivi parametri.
    I commenti nel codice della funzione mi sembrano abbastanza chiari ma se hai dubbi chiedi pure.

    Prova è fai sapere.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2023
    Messaggi
    17
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Considera che dovrai inserirla in un punto in cui è sempre vista, cioè NON dentro le condizioni in cui è avvenuto o meno qualche submit. Puoi inserirla ad esempio alla fine dell'intero blocco PHP iniziale.
    ...
    Ok ho provato, ma non vedo un elenco come dovrei attendere. Cerco un'altra soluzione. Grazie comunque.

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    Come preferisci, ad ogni modo io ho provato sulla base del codice che hai postato e mi funziona come ho indicato.
    Non mi è chiaro il fatto che "non vedi un elenco come dovresti attendere". Cioè, cosa vedi?

    Se gradisci che ti si aiuti qui sul forum, ripeto, sarebbe utile che tu mostrassi ciò che hai fatto, anche se non funzionante.
    Nel caso, riporta qui il codice come lo hai modificato e chiarisci meglio cosa non va. A quel punto se ne può discutere.
    Se poi preferisci, sei chiaramente libero di cercare altre soluzioni
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2023
    Messaggi
    17
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Se gradisci che ti si aiuti qui sul forum, ripeto, sarebbe utile che tu mostrassi ciò che hai fatto, anche se non funzionante.
    Nel caso, riporta qui il codice come lo hai modificato e chiarisci meglio cosa non va. A quel punto se ne può discutere.
    In questi giorni sono stato molto preso con altri progetti ed ho applicato in modo errato il codice che gentilmente hai postato, avevo anche incluso errori di battitura di cui non mi ero neanche accorto.
    Oggi finalmente ho avuto più tempo e tranquillità e riaperto il file mi sono balzati agli occhi gli errori che avevo commesso, inclusa l’errata posizione dove avevo inserito il codice suggerito.
    Queste due cose mi facevano vedere sempre un elenco vuoto. Ho provato con diversi browser pensando che fosse colpa del mio preferito Safari.
    Poi ho pensato che fosse la causa di php 8, ma solo in seguito mi sono accorto dei miei errori da principiante e della mia fretta nell’eseguire il tutto.
    Tra le altre cose ho visto che non avevo postato proprio il codice corretto, lo faccio ora.
    Nel definitivo completo ho lasciato due esempi con il vecchio codice per confronto e per far notare la semplicità dei tuoi suggerimenti.
    Anche la mia iniziale risposta è frutto della fretta, cattiva compagna, chiedo scusa ancora.
    Sono in debito di due birre virtuali.
    Faccio ammenda dei miei errori e ringrazio per la tua e la vostra disponibilità.
    Buona giornata.
    Considero risolto il tutto e chiuso l’argomento.

    PS Ho ancora molto da imparare.

    Il file deve avere nome index.php.
    codice:
    <!DOCTYPE HTML>
    <html lang="it">
      <head>
        <meta charset="UTF-8">
        <title>Orario</title>
      </head>
      <?php
      // Costruisce e visualizza un elemento <select> con relative <option> secondo i parametri specificati
      function creaElementoSelect($id, $arrOption, $selectedValue){
      // $id            : valore degli attributi "id" e "name" da applicare a <select>
      // $arrOption     : array valori da attribuire alle <option> come attributo "value" e come contenuto testuale
      // $selectedValue : valore per il quale viene applicato l'attributo "selected" alla <option> corrispondente
      //
        // Ciclo l'array e ottengo il blocco delle <option>
        $options = array_reduce($arrOption, function ($accumulator, $currentValue) use ($selectedValue) {
          $selected = $currentValue == $selectedValue ? " selected" : "";
          return $accumulator."<option value=\"$currentValue\"$selected>$currentValue</option>";
        }, "");
        // Visualizzo <select> e <option>
        echo "<select id=\"$id\" name=\"$id\" class=\"text\">$options</select>";
      }
      
      $char_divider = "|";
      $filename4 = "data_a.txt";  
      if (file_exists($filename4)) { 
    
    
      } else { 
          $fp = fopen('data_a.txt', 'w');
          $all_data = 
          "--".$char_divider."--".$char_divider."--".$char_divider."--";
          fwrite($fp, $all_data,);
          fclose($fp);
      }
        
      if(isset($_POST["reload_data"])){    
        $myfile = fopen("data_a.txt", "r") or die("Unable to open file!");
        $read = fread($myfile, filesize("data_a.txt"));     // Lettura del file globale
        $divider = explode($char_divider, $read);            
        fclose($myfile);
        
        $lun_1 = $divider[0];
        $lun_2 = $divider[1];
        $lun_3 = $divider[2];
        $lun_4 = $divider[3];
        
        $_POST["lun_1"];
        $_POST["lun_2"];
        $_POST["lun_3"];
        $_POST["lun_4"];
      }
      ?>
      <?php
        if(isset($_POST["enter_data"])){
          if(isset($_POST['lun_1'])){
          $lun_1 = $_POST['lun_1'];
          }
          if(isset($_POST['lun_2'])){
          $lun_2 = $_POST['lun_2'];
          }
          if(isset($_POST['lun_3'])){
          $lun_3 = $_POST['lun_3'];
          }
          if(isset($_POST['lun_4'])){
          $lun_4 = $_POST['lun_4'];
          }
          
          $fp = fopen('data_a.txt', 'w');
          $all_data = 
          $lun_1.$char_divider.$lun_2.$char_divider.$lun_3.$char_divider.$lun_4;
          fwrite($fp, $all_data,);
          fclose($fp);
        }
      ?>
        
      <body>
        <form action="index.php" method="post">
          <table>
            <tr>
              <th style="width:12%">Orari inseriti</th>
              <th style="width:22%">dalle ore</th>
              <th style="width:22%">alle ore</th>
              <th style="width:22%">dalle ore</th>
              <th style="width:22%">alle ore</th>
            </tr>
            <tr>
              <td>
                <p>Lun</p>
              </td>
              <td>
                <label for="lunedi_1"></label>
                <?php creaElementoSelect("lun_1", ["09:00", "09:30", "10:00", "10:30", "11:00"], $lun_1); ?>
              </td>
              <td>
                <label for="lunedi_2"></label>
                <?php creaElementoSelect("lun_2", ["09:00", "09:30", "10:00", "10:30", "11:00"], $lun_2); ?>
              </td>
              <td>
                <label for="lunedi_3"></label>
                <select id="lun_3" name="lun_3" class="text">
                  <option value="14:00">14:00</option>
                  <option value="14:30">14:30</option>
                  <option value="15:00">15:00</option>
                  <option value="15:30">15:30</option>
                  <option value="16:00">16:00</option>
                  <option value="16:30">16:30</option>
                </select>
              </td>
              <td>
                <label for="lunedi_4"></label>  
                <select id="lun_4" name="lun_4" class="text">
                  <option value="18:00">18:00</option>
                  <option value="18:30">18:30</option>
                  <option value="19:00">19:00</option>
                  <option value="19:30">19:30</option>
                  <option value="20:00">20:00</option>
                  <option value="20:30">20:30</option>
                </select>
              </td>
            </tr>
            <tr>
              <td>
                
              </td>
              <td>
                <input type="submit" name="enter_data" value="Enter data">
              </td>
              <td>
                
              </td>
              <td>
                
              </td>
              <td>
                
              </td>
            </tr>
          </table>
        </form>
        
        <form action="index.php" method="post">
          <table>
            <tr>
              <th style="width:12%">Orari salvati</th>
              <th style="width:22%">dalle ore</th>
              <th style="width:22%">alle ore</th>
              <th style="width:22%">dalle ore</th>
              <th style="width:22%">alle ore</th>
            </tr>
            <tr>
              <td>
                <p>Lun</p>
              </td>
              <td>
                <?php echo $lun_1?>
              </td>
              <td>
                <?php echo $lun_2?>
              </td>
              <td>
                <?php echo $lun_3?>
              </td>
              <td>
                <?php echo $lun_4?>
              </td>
            </tr>
            <tr>
              <td>
                
              </td>
              <td>
                <input type="submit" name="reload_data" value="Reload data">
              </td>
              <td>
                
              </td>
              <td>
                
              </td>
              <td>
                
              </td>
            </tr>
          </table>
        </form>
      </body>
    </html>
    Ultima modifica di patdepri; 02-03-2024 a 15:08

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2023
    Messaggi
    17
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio

    Codice PHP:
    ...
    <td>Input time</td>
    <td>
    <label for="lunedi_1">Lunedì dalle</label>
    <?php creaElementoSelect("lun_1", ["09:00""09:30""10:00""10:30""11:00"], $lun_1); ?>
    </td>
    ...
    Qui non faccio altro che richiamare la funzione passando i parametri relativi al select che si vuole creare. Per tutti i <select> dovrai quindi richiamare questa stessa funzione con i corrispettivi parametri.
    I commenti nel codice della funzione mi sembrano abbastanza chiari ma se hai dubbi chiedi pure.
    Grazie per le risposte precedenti.
    Ho una ulteriore domanda da farti.

    E' possibile sostituire ad esempio questo ---> "09:00", "09:30", "10:00", "10:30", "11:00" <---
    con nuovi valori provenienti da un file di testo caricato precedentemente?

    Ad esempio usando:
    codice:
    $myfile = fopen("orario.txt", "r") or die("Unable to open file!");
        $read = fread($myfile, filesize("orario.txt"));     // Lettura del file globale
    fclose($myfile);
    $nuovo_orario = $read;
    Il file orario.txt contiene "15:00", "15:30", "16:00", "16:30"

    Ho provato in vari modi ad esempio creando un file con all'interno valori diversi e importarli in una variabile, ad esempio: $nuovo_orario, con i seguenti valori: "15:00", "15:30", "16:00", "16:30".

    Codice PHP:
    <?php creaElementoSelect("lun_1"$nuovo_orario$lun_1); ?>
    </td>
    ma cosi' non sono riuscito a renderlo funzionante, nemmeno usando strategie del tipo cambio virgolette ecc.

    Funziona solo se prima della riga in oggetto gli assegno la variabile direttamente ad esempio:
    Codice PHP:
    <$nuovo_orario = array("15:00""15:30""16:00""16:30");
    ?
    php creaElementoSelect("lun_1"$nuovo_orario$lun_1); ?>
    </td> 
    C'e' un metodo per poterlo fare leggendo il file orario.txt?

    Grazie mille in anticipo e buona serata.
    Ultima modifica di patdepri; 18-03-2024 a 18:11

  9. #9
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    590
    Se tu hai il dato che deve avere la selected impostata, nella option deiv solo impostare il campo "selected"
    esempio se lunedi ha il valore "10:30" nella variabile $sel
    <code>
    <option vale="9:00" <?php echo left("selected", - 8*($sel=="09:00"));?>>09:00</option>
    <option vale="9:30" <?php echo left("selected", - 8*($sel=="09:30"));?>>09:30</option>
    <option vale="10:00" <?php echo left("selected", - 8*($sel=="10:00"));?>>10:00</option>
    <option vale="10:30" <?php echo left("selected", - 8*($sel=="10:30"));?>>10:30</option>
    <option vale="11:00" <?php echo left("selected", - 8*($sel=="11:00"));?>>11:00</option>
    ....
    </select>
    il tag selected sara' impostato solo nella option dove il risultato dellauguaglianza sara vero cioè varrà -1 che moltiplicato per 8 darà
    il valore della lunghezza della stringa che esce dalla funzione left(campo,lunghezza) mentre nelle altre righe avra valore zero e quindi non sarà impostato il valore selected
    pero se il tuo php non riconosce la funzione left tu creala
    ti posto le funzioni e tu mettile nei tuoi srce php
    <code>
    <?php

    // funzioni mancanti in PHP
    function left($str, $length) {
    return substr($str, 0, $length);
    }
    function right($str, $length) {
    return substr($str, -$length);
    }
    ?>
    <code>
    non so perchè queste funzioni non esistono in php...ma va bene lo stesso
    io me le sono rifatte a mio uso e consumo
    </code>

    ciao spero di esserti stato utile
    Vic53

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2023
    Messaggi
    17
    Quote Originariamente inviata da vic53 Visualizza il messaggio
    Se tu hai il dato che deve avere la selected impostata, nella option deiv solo impostare il campo "selected"
    esempio se lunedi ha il valore "10:30" nella variabile $sel
    Grazie mille per la risposta e per il consiglio di seguito

    Quote Originariamente inviata da vic53 Visualizza il messaggio
    // funzioni mancanti in PHP
    function left($str, $length) {
    return substr($str, 0, $length);
    }
    function right($str, $length) {
    return substr($str, -$length);
    }

Tag per questa discussione

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.