[PHP] Elementi di un array non visualizzabili

alessandra86

Nuovo Utente
10 Mag 2018
16
0
1
34
Salve a tutti, questa è la mia prima discussione. Spero di aver inquadrato il titolo correttamente.
Non riesco a visualizzare tutti i codici che inserisco in dei form (creati dinamicamente), ma solo l'ultimo.
Ho il seguente codice, che serve per scegliere il numero di codici che dovrò inserire (e quindi di righe della tabella):

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=windows-1250">     
    </head>
    <body>
        <form name="index" action="index_php.php" enctype="multipart/form-data" method="post">
            <br><br>   
            <p>Specifica il numero delle righe 
                <input type="number" name="n_righe" min="1" max="2000" value="1" >
            </p>
            <br><br>     
            <input type="submit" value="Clicca per proseguire">
            <input type=reset value="Cancella">
         </form>       
    </body>
</html>

Questo codice comunica con il file index_php.php, che posto qui sotto, su cui ho inserito dei commenti e serve a creare una tabella, con un numero di righe pari al numero che ho scelto.
PHP:
<?php
# Qui verrà presa la variabile del numero delle righe
if (isset($_POST['n_righe'])){$N_RIGHE=$_POST['n_righe']; }
?>
<form name="index" action="index_php_risultati.php" enctype="multipart/form-data" method="post">   
    <p>Scheda:</p>  
    <table border="1">          
        <tr>          
            <th><p>Codice:</p></th>      
        </tr>            
        <?php
        //ciclo che gira per tutte le righe, creando tanti input quante righe ho. Ho diversificato il name, aiutandomi col contatore {$i}
        for($i=0; $i<$N_RIGHE; $i++)
        {    ?>
        <tr>    
            <td><input type="text" name="codice{$i}" size="11" maxlength="11" value=""></td>      
        </tr>
        <?php
        }
        //Passero' l'imput del numero righe con hidden. Questo passaggio invia il numero di righe all'ultima pagina (risultati)
        echo "<br><input type='text' name='n_righe' value='{$i}'><br><br>";
        ?>      
    </table>
    <br><br><br>     
    <input type="submit" value="Invia">
    <input type=reset value="Cancella">         
 </form>

Infine, questo codice comunica con il file index_php_risultati.php, che posto qui sotto.
PHP:
<?php
//prendo il numero di righe, passate precedentemente dal comando echo "<br><input type='text' name='n_righe' value='{$i}'><br><br>";
if (isset($_POST['n_righe'])){$N_RIGHE=$_POST['n_righe']; }
//tentativo di visualizzare i tre codici
for($i=0; $i<$N_RIGHE; $i++)
{  
    //tentativo di prendere i codici che ho precedentemente inserito  :(
    if (isset($_POST['codice{$i}'])){$CODICE[$i]=$_POST['codice{$i}']; }
}
//ciclo che gira per tutte le righe che ho
for($i=0; $i<$N_RIGHE; $i++)
{
    //visualizza soltanto l'ultimo codice inserito :(
    echo "<br>CODICE =$CODICE[$i]<br>";
}
?>
Non riesco a visualizzare tutti i codici, ma solo l'ultimo. Dove sbaglio? Mi suggerite il codice corretto?
Grazie in anticipo.
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Hai sagliato qui:
<tr>
<td><input type="text" name="codice{$i}" size="11" maxlength="11" value=""></td>
</tr>


Nel file index_php.php sostituisci quello che hai con questo:
PHP:
<?php
        //ciclo che gira per tutte le righe, creando tanti input quante righe ho. Ho diversificato il name, aiutandomi col contatore {$i}
        for($i=0; $i<$N_RIGHE; $i++)
        {    ?>
            <tr>
                <td><input type="text" name="codice[]" size="11" maxlength="11" value=""></td>
            </tr>
            <?php
        }
        //Passero' l'imput del numero righe con hidden. Questo passaggio invia il numero di righe all'ultima pagina (risultati)
        echo "<br><input type='text' name='n_righe' value='{$i}'><br><br>";
        ?>


Mentre nel file index_php_risultati.php cancella quello che hai scritto e metti questo:
PHP:
foreach ($_POST['codice'] as $item){
    echo "<br>CODICE =$item<br>";
}
 
  • Like
Reactions: alessandra86

alessandra86

Nuovo Utente
10 Mag 2018
16
0
1
34
Ci tengo particolarmente a pubblicare il codice seguente, perchè è l'evoluzione di quello che cercavo.
Di seguito il secondo file:
PHP:
<?php
# Qui verrà presa la variabile del numero delle righe
if (isset($_POST['n_righe'])){$N_RIGHE=$_POST['n_righe']; }
?>
<form name="index" action="index_php_risultati.php" enctype="multipart/form-data" method="post">     
    <p>Scheda:</p>   
    <table border="1">           
        <tr>           
            <th><p>Codice:</p></th>   
            <th><p>Codice2:</p></th>   
        </tr>             
        <?php
        //ciclo che gira per tutte le righe, creando tanti input quante righe ho. Ho diversificato il name, aiutandomi col contatore {$i}
        for($i=0; $i<$N_RIGHE; $i++)
        {    ?>
        <tr>     
            <td><input type="text" name="codice[]" size="11" maxlength="11" value=""></td>
            <td><input type="text" name="codicepari[]" size="11" maxlength="11" value=""></td>               
         </tr>
        <?php
        }
        //Passero' l'imput del numero righe con hidden. Questo passaggio invia il numero di righe all'ultima pagina (risultati)
        echo "<br><input type='text' name='n_righe' value='{$i}'><br><br>";
        ?>       
    </table>   
    <br><br><br>     
    <input type="submit" value="Invia">
    <input type=reset value="Cancella">           
 </form>


e il terzo:

PHP:
<?php
// prendo il numero di righe, passate precedentemente dal comando echo "<br><input type='text' name='n_righe' value='{$i}'><br><br>";
if (isset($_POST['n_righe'])){$N_RIGHE=$_POST['n_righe']; }
//array dei box compilati e stampa elementi
$array = array();
$array= ($_POST['codice']);
foreach ($_POST['codice'] as $item){echo "<br>CODICE_DISPARI =$item<br>";}
$array2 = array();
$array2= ($_POST['codicepari']);
foreach ($_POST['codicepari'] as $item){echo "<br>CODICE_PARI =$item<br>";}
//ciclo for che stampa tutto quello che ho inserito nei box
for($i=0; $i<$N_RIGHE; $i++)
{
        echo "<br>CODICE DISPARI =$array[$i], CODICE PARI=$array2[$i]   <br>";
}



?>

Ho praticamente aggiunto un'altra colonna, messo tutti i valori in un array e tirato fuori assieme le coppie di valori. Sicuramente c'è un modo più elegante e soprattutto efficiente per farlo e se qualcuno vuole darmi suggerimenti mi farebbe molto piacere. Intanto ancora grazie!
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Creando una struttura variabile......

index_php.php
PHP:
<form name="index" action="index_php_risultati.php" enctype="multipart/form-data" method="post">
    <p>Scheda:</p>
    <table border="1">
        <tr>
        <?php
       //array di variabili per gli input e intestazioni
        $ar_val=['codice','codicepari'];

        foreach ($ar_val as $item){
            ?>
                <th>
                    <?php echo $item;?>
                </th>
            <?php
        }

        ?></tr><?php

        //ciclo che gira per tutte le righe, creando tanti input quante righe ho. Ho diversificato il name, aiutandomi col contatore {$i}
        for($i=0; $i<$N_RIGHE; $i++)
        {    ?>
            <tr>
                <?php

                foreach ($ar_val as $items){
                    ?>
                    <td><input type="text" name="<?php echo$items;?>[]" size="11" maxlength="11" value=""></td>
                <?php
                }
                ?>

            </tr>
            <?php
        }
//ho eliminato il numero di righe che non serve
        ?>
    </table>
    <br><br><br>
    <input type="submit" value="Invia">
    <input type=reset value="Cancella">
</form>

Nel file index_php_risultati.php
Fai cosi:
PHP:
//recupero tutte le chiavi passate
$keys=array_keys($_POST);

//ciclo sulla prima chiave in quanto saranno sempre uguali a meno di manipolazione dom
foreach ($_POST[$keys[0]] as $items){

//ciclo sulle chiavi
    foreach ($keys as $key){
        echo "$key = $items ; ";
    }
    echo '<br><br>';
}
Per completezza ti invito a leggere come utilizzare correttamente l'html tramite un template engine:
QUI così da non mischiare php e html....! ;)
 
  • Like
Reactions: alessandra86

alessandra86

Nuovo Utente
10 Mag 2018
16
0
1
34
Mamma mia complimenti! Non ci sarei mai arrivata a farlo così! Solo una cosa, credo sia una svista tua: ottengo come output questo:
codice = 1 ; codicepari = 1 ;
codice = 3 ; codicepari = 3 ;
codice = 5 ; codicepari = 5 ;
Ma io vorrei ottenere questo:
codice = 1 ; codicepari = 2;
codice = 3 ; codicepari = 4 ;
codice = 5 ; codicepari = 6 ;
Ci ho provato a smanettare, ma ovviamente manco mi avvicino al risultato :oops::rolleyes:
In questo modo poi come potrei ottenere delle variabili con cui (ciclando opportunamente con un for che gira per tutte le righe) potrei poi fare delle insert? lo scopo di tutto è infilare tutta la tabella in un database, riga per riga (basta anche un suggerimento o teoria da guardare). Comunque un while che looppa di grazie!
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Non è una svista, non so l'output.... come deve uscire?


Visto solo ora.....
PHP:
$keys=array_keys($_POST);

$my_queries=[];



foreach ($_POST[$keys[0]] as $k=>$items){

    $my_queries[$k]='INSERT INTO TABLE_NAME ('.join(',',$keys).') VALUES (';
    foreach ($keys as $key){
        $my_queries[$k].='"'.trim($_POST[$key][$k]).'",';
    }
    $my_queries[$k]=substr($my_queries[$k],0,strlen($my_queries[$k])-1).');';
}

print_r($my_queries);
 
Ultima modifica:
  • Like
Reactions: alessandra86

alessandra86

Nuovo Utente
10 Mag 2018
16
0
1
34
Oddio si scusa, non ho specificato cosa ho fatto per fare uscire quell'output. In pratica ho impostato il numero di righe a 3 e ho poi scelto, a titolo di esempio, dei numeri da 1 a 6, dunque l'output dovrebbe visualizzare una riga della tabella per volta.
Nella prima riga ho 1 e 2, nella seconda 3 e 4, nella terza 5 e 6.
La logica di queste tre paginette è creare una tabella con molte colonne (nel codice ne ho messe solo due per semplicità) in cui un utente può specificare il numero delle righe a piacere e compilare così man mano tutta la tabella. I dati poi dovrebbero essere messi in un database. Ho provato a farlo cercando di mettere almeno una riga della tabella per default e poi con un bottone aggiungi man mano avrei permesso la compilazione, ma non essendoci riuscita ho optato per far decidere subito il numero di righe.
 
Discussioni simili
Autore Titolo Forum Risposte Data
S [PHP] Estrarre elementi array su più variabili PHP 5
S elementi statistici - Matrice e Gestione Array PHP o Javascript Javascript 0
C [PHP] RISOLTO - Eliminare elementi duplicati da array multidimensionale PHP 1
JeanWolf [Php] Elementi comuni di due array PHP 29
D [PHP] Elementi tabella in orizzontale e NON Verticale PHP 12
otto9due Accesso agli elementi <![CDATA[ ... ]]> di un file XML con SimpleXML e PHP PHP 2
N PHP Ricerca utente, Tabella con più elementi PHP 8
A Nascondere gli elementi di un form con php PHP 5
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2
Z Video protetto con PHP PHP 0

Discussioni simili