Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55

    [PHP-MySQL] Assegnazione Value con ciclo FOR

    Salve ragazzi..
    Sarà l'ora tarda ma sono proprio tardo (ok dopo questo post vado a dormire)..

    Allora, stavo programmando una tabella dinamica..
    Mi spiego meglio..
    Una volta entrato nella pagina php dell'utente, questa interrogherà un DB per verificare quale voci può leggere quel utente all'interno del Database e quale di quelle stampate potrà scegliere..

    Finchè si tratta di stampare a video i valori delle entità del DB non ci sono problemi, i problemi nascono quando dovrà assegnare ad un input di tipo hidden il suo value

    Vi mostro un pò di codice per essere più chiaro:

    Codice PHP:

    if(!$ue && ($personaggio[5]+$beh[5])<=10)
                    {
                        echo 
    "<tr><td width='12%'>[img]*********.png[/img]";
                        echo 
    "[img]********.png[/img]</td>";
                        echo 
    "<td width='68%' style='font-weight:bold'>".$beh[1]."</td>";
                        echo 
    "<td width='10%' align='center' style='font-weight:bold; color:#FA0'>".$beh[4]."</td>";
                        echo 
    "<td width='10%'><input type='submit' value='Comincia'/>";
                        echo 
    "<input type='hidden' name='tempo' value='".$beh[4]."'/><input type='hidden' name='codice' value='".$beh[0]."'/>";
                        echo 
    "</td></tr>";
                    } 
    (Questa struttura di controllo si trova all'interno di un ciclo for)

    Questo è quello che si andrà a formare all'interno della tabella..
    Ora immaginiamo che dal DB verrà fuori che quel utente leggerà 3 righe..
    i valori nella 2° e 3° finestra (cioè dove verrà stampato a video il testo presente in $beh[3] e $beh[4]) vengono stampati perfettamente..
    Il problema però è che il valore degli input hidden ($beh[4] e $beh[0]) che poi verranno passati con metodo POST ad una seconda pagina una volta che si è cliccato sul bottone Comincia, in realtà risulteranno essere uguali (in tutte e tre le righe) solo al valore dell'ultima riga stampata...

    A questo punto mi chiedevo come poter ovviare al problema..

    Chiedo scusa per la pocachiarezza del messaggio, ma sono le 05:49 e sono più di 05 ore e 49 minuti che stavo lavorando a questo sito ..Quindi potrete capire la poca lucidità..
    Forse l'avrete già capita dalla mia domanda

    Prima che dica qualche altra fesseria incomprensibile, vi ringrazio in anticipo e vi auguro una buona giornata

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    Ammazza speravo di trovare una risposta nella mattinata...
    E' così incomprensibile?

  3. #3
    l'hai detto!

  4. #4
    se non ci mostri come funziona il tuo ciclo for, non riusciamo a capire come viene popolato l'array $beh.
    La verita' è che... tu sei il debole, e io sono la tirannia degli uomini malvagi, ma ci sto provando ringo, ci sto provando con grandissima fatica a diventare il pastore..

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    Visto che sono più fresco, proverò ad essere più chiaro..

    Immaginiamo di dover creare una tabella prodotti dove verranno stampati solo i prodotti il quale prezzo risulta ad essere inferiore ai soldi a disposizione dell'utente e ad ogni riga è associato un bottone che riporta alla pagina di descrizione del prodotto..

    Il numero di righe è quindi sconosciuto..

    Facciamo finta che la query mi ritorni 3 record e che quindi la tabella risulterà essere così:


    |____PRODOTTO____|____PREZZO____|__________|
    |_Mele_Renette_____|______3_€_____|_ACQUISTA_|
    |_Maglia_di_Lana____|_____12_€_____|_ACQUISTA_|
    |_Jeans_Neri________|_____35_€_____|_ACQUISTA_|

    il codice che mi permette di mostrare tale tabella è simile a questo:

    Codice PHP:
    $count=0;
    $max=il numero di record restituite dalla query
    if($max>0)
    {
     for(
    $i=0$i<$max$i++)
     {
      
    $beh=assegna valori dell $i-esimo record
      
    if($i==0)
       {
        echo 
    "<table><tr><td>PRODOTTO</td><td>PREZZO</td><td></td></tr>";
       }

       echo 
    "<tr>";
       echo 
    "<td>$beh['nome_prodotto']</td><td>$beh['prezzo_prodotto']</td>";
       echo 
    "<td><input type='submit' value='Acquista' />"
       echo 
    "<input type='hidden' name='codprod' value='$beh['codice_prodotto'] /></td>";
       echo 
    "</tr>";

       if(
    $i==$max)
       {
        echo 
    "</table>";
       }
      }

    Quando si tratta di stampare a video i valori di $beh['nome_prodotto'] e $beh['prezzo_prodotto']...
    Non ci sono problemi,
    il problema sta nell'assegnare all'input hidden il vero valore $beh['codice_prodotto'] relativo a quel prodotto..
    Infatti ho verificato che ad ogni riga della tabella, il valore dell'hidden e pari solo a quello dell'ultimo record..
    Tanto è vero che, cliccandoci sopra, la pagina descrizione prodotto (che deve ricevere quel valore), riceve sempre il codice prodotto dell'ultima riga stampata..
    Perchè?

  6. #6
    Codice PHP:
    $beh=assegna valori dell $i-esimo record 
    In questo modo sarà facilissimo risponderti...

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    CODICE CLASS.php (che contiene le funzioni per collegarsi al DB e fare diverse query)
    Codice PHP:
        public function trova_prodotti($soldi)
        {
            if(isset(
    $this->attiva))
            {
                
    $i=0;
                
    $istruzione="SELECT * FROM prodotti WHERE prezzo<='".$soldi."' ";
                
    $query=mysql_query($istruzione) or die (mysql_error());
                while(
    $dato=mysql_fetch_row($query))
                    {
                        
    $risposta[$i]=$dato;
                        
    $i++;
                    }
                    return 
    $risposta;

            }
            else
                return 
    "ERRORE #COD002#";
        } 

    CODICE pagina.php
    Codice PHP:
     <form method="post" action="../descrizione.php" action="attiva" >
            <?php

                $i
    =0;
                
    $missioni=$connect->trova_prodotti($cliente[4]);
                if(
    count($missioni)>0)
                {
                    echo 
    "<table width='99%' border='0' cellspacing='2' align='center'>";
                    echo 
    "<tr><td width='12%' ></td><td width='68%' align='center' style='color:#FFF'>Prodotto</td>";
                    echo 
    "<td width='10%' style='color:#FFF'>Prezzo</td><td width='10%'></td>";
                    echo 
    "<tr><td> </td><td> </td><td></td><td> </td></tr>";
            
                }
            
                for(
    $i=0;$i<count($missioni); $i++)
                   {
                                            
    $beh=$missioni[$i];
                        echo 
    "<tr><td width='12%'>[img]http://****.it/****/img/**.png[/img]";
                        echo 
    "[img]****.it/***/img/".$beh[2].".png[/img]</td>";
                        echo 
    "<td width='68%' style='font-weight:bold'>".$beh[1]."</td>";
                        echo 
    "<td width='10%' align='center' style='font-weight:bold; color:#FA0'>".$beh[4]."</td>";
                        echo 
    "<td width='10%'><input type='submit' value='Acquista'/>";
                        echo 
    "<input type='hidden' name='prezzo' value='".$beh[4]."'/><input type='hidden' name='codice' value='".$beh[0]."'/>";
                        echo 
    "</td></tr>";
                        
                    }

            
                if(
    count($missioni)>)
                {
                    echo 
    "</table>";
                }
            
    ?>
    </form>

  8. #8
    il problema è che gli input hidden di tutte le righe hanno lo stesso nome, quindi vengono passati come se fossero solo due campi in tutto il form: prezzo e codice. Quando le richiami nella pagina che riceve i dati $_POST['prezzo'] e $_POST['codice'] sono solo due in tutto, non due per ogni riga.

    Stando all'ultima versione del tuo codice, basta semplicemente che racchiudi ogni riga dentro un form diverso. In questo modo cliccando submit non passerai tutta la tabella, che avrebbe un unico valore di prezzo e un unico valore di codice (poiché hanno lo stesso nome), ma passerai solo quella riga, con i due valori corretti.
    La verita' è che... tu sei il debole, e io sono la tirannia degli uomini malvagi, ma ci sto provando ringo, ci sto provando con grandissima fatica a diventare il pastore..

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    quindi non è che ogni input hidden ha sempre lo stesso valore ma, nonostante siano inclusi nel table row, è come se ne venissero creati solo 2 (invece di 2xnrighe)?

  10. #10
    Dal punto di vista della pagina che riceve i dati si, poiché tu con $_POST['prezzo'] chiedi cosa c'era nel form con name="prezzo". Come fa a sapere a quale dei tanti ti riferisci? Lui prende l'ultimo che trova.

    Ricordati che se il tag form è esterno alla tabella, tu non stai mandando solo una riga, ma tutti gli input, select, textarea... contenuti tra il tag <form> e il tag </form>, ovvero tutti quelli di tutte le righe di tutta la tabella!
    La verita' è che... tu sei il debole, e io sono la tirannia degli uomini malvagi, ma ci sto provando ringo, ci sto provando con grandissima fatica a diventare il pastore..

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.