[PHP] Elementi di un array non visualizzabili

alessandra86

Nuovo Utente
10 Mag 2018
16
0
1
36
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.343
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
36
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.343
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
36
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.343
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
36
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
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1

Discussioni simili