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

    problema con cicli while, for e sessioni (una stupidata)

    ho un piccolo problema che mi affligge da ieri pomeriggio. sicuramente sarà una stupidata ma più guardo e riguardo il codice e più non riesco a venirne a capo.

    in poche parole, sono partito da un ciclo while per estrarre alcuni contenuti dal database e popolare una form select

    Codice PHP:
    while ( $row mysql_fetch_array($sql_results) )
    {
        
    $id   $row["id"];
        
    $nome $row["nome"];

        echo 
    "<option value='" $id "'>" $nome "</option>\n";
    }

    // RISULTATO

    <option value='1'>Nome 1</option>
    <
    option value='2'>Nome 2</option>
    <
    option value='3'>Nome 3</option>
    <
    option value='4'>Nome 4</option>
    <
    option value='5'>Nome 5</option
    dato che questo codice è inserito in un form per il caricamento di alcuni dati nel database, ho deciso di utilizzare una sessione per memorizzare i dati appena caricati e riportarli nella schermata successiva (questo per risparmiare tempo nel caso in cui voglio aggiungere un articolo simile a quello appena inserito).

    all'interno del ciclo while ho aggiunto un ciclo for per estrarre i dati dalla sessione e al suo interno ho aggiunto la condizione che se id e contenuto della sessione sono uguali, allora il campo option deve essere selezionato.

    il problema è che, nel caso in cui la sessione contiene più valori, viene selezionato solo l'ultimo, trascurando quelli precedenti.

    Codice PHP:
    while ( $row mysql_fetch_array($sql_results) )
    {
        
    $id     $row["id"];
        
    $nome $row["nome"];

        
    // la $_SESSION['sessione'] contiene i valori 1, 2 e 3
        
    for ($i=0$i<count($_SESSION['sessione']); $i++)
        {
            if (
    $id == $_SESSION['sessione'][$i])
            {
                
    $selected " selected";
            }
            else
            {
                
    $selected "";
            }
        }

        echo 
    "<option value='" $id "'" $selected ">" $nome "</option>\n";
    }

    // RISULTATO

    <option value='1'>Nome 1</option>
    <
    option value='2'>Nome 2</option>
    <
    option value='3' selected>Nome 3</option// seleziona solo l'ultimo dei 3 valori presenti nella sessione
    <option value='4'>Nome 4</option>
    <
    option value='5'>Nome 5</option
    ho provato quindi ad includere nel ciclo for anche il risultato ma, se è vero che ho risolto il problema precedente (ogni valore viene selezionato correttamente), ciascuna option viene ripetuta "X" volte, dove "X" corrisponde al numero di valori contenuti nella sessione.

    qualcuno può farmi capire dov'è che sbaglio?

    Codice PHP:
    while ( $row mysql_fetch_array($sql_results) )
    {
        
    $id     $row["id"];
        
    $nome $row["nome"];

        
    // la $_SESSION['sessione'] contiene i valori 1, 2 e 3
        
    for ($i=0$i<count($_SESSION['sessione']); $i++)
        {
            if (
    $id == $_SESSION['sessione'][$i])
            {
                
    $selected " selected";
            }
            else
            {
                
    $selected "";
            }

            echo 
    "<option value='" $id "'" $selected ">" $nome "</option>\n";
        }
    }

    // RISULTATO
    // crea tanti "cloni" quanti sono i valori contenuti nella sessione (quindi non va bene)
    // ma nello stesso tempo individua e seleziona quelli corretti

    <option value='1' selected>Nome 1</option>
    <
    option value='1'>Nome 1</option>
    <
    option value='1'>Nome 1</option>
    <
    option value='2' selected>Nome 2</option>
    <
    option value='2'>Nome 2</option>
    <
    option value='2'>Nome 2</option>
    <
    option value='3' selected>Nome 3</option>
    <
    option value='3'>Nome 3</option>
    <
    option value='3'>Nome 3</option>
    <
    option value='4'>Nome 4</option>
    <
    option value='4'>Nome 4</option>
    <
    option value='4'>Nome 4</option>
    <
    option value='5'>Nome 5</option>
    <
    option value='5'>Nome 5</option>
    <
    option value='5'>Nome 5</option

  2. #2
    Codice PHP:
    while ( $row mysql_fetch_array($sql_results) ) 

        
    $id     $row["id"]; 
        
    $nome $row["nome"]; 

        
    // la $_SESSION['sessione'] contiene i valori 1, 2 e 3 
        
    for ($i=0$i<count($_SESSION['sessione']); $i++) 
        { 
            if (
    $id == $_SESSION['sessione'][$i]) 
            { 
                
    $selected " selected"
            } 
            else 
            { 
                
    $selected ""
            }     
        } 
    echo 
    "<option value='" $id "'" $selected ">" $nome "</option>\n";

    prova cosi, non l'ho testato

  3. #3
    Prova fare in questo modo
    Codice PHP:
    while ( $row mysql_fetch_array($sql_results) )
    {
        
    $selected "";
        
    $id     $row["id"];
        
    $nome $row["nome"];

        
    // la $_SESSION['sessione'] contiene i valori 1, 2 e 3
        
    for ($i=0$selected == "" && $i<count($_SESSION['sessione']); $i++)
            if (
    $id == $_SESSION['sessione'][$i])
                
    $selected " selected";

        echo 
    "<option value='" $id "'" $selected ">" $nome "</option>\n";


  4. #4
    Originariamente inviato da rickystra
    prova cosi, non l'ho testato
    è uguale al secondo codice che ho postato. cosa cambia?

    Originariamente inviato da dreamer86
    Prova fare in questo modo
    in questo modo mi seleziona tutte le option

    [EDIT] ho visto che hai aggiunto $selected = ""; e così funziona perfettamente. grazie mille dreamer86!

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.