Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    138

    Inserire tanti record a seconda del valore di una variabile

    Ciao a tutti.
    Premessa:
    una funzione javascript mi permette di aggiungere o togliere a piacimento le righe da una tabella html.
    Le righe della tabella html saranno i record da inserire in un db mysql.

    Una seconda funzione javascript apre una pagina php per l'INSERT delle righe della suddetta tabella..
    Questa seconda funzione "passa" alla pagina php una variabile contenente il numero di record che dovrà inserire e che, come detto, non sono altro che il numero di righe della tabella html.
    La variabile passata è anche (e soprattutto) l'indice delle caselle di testo contenute nelle celle della tabella html (testo0, testo1, testo2, ecc..).

    Di conseguenza, nella pagina php pensavo di fare un ciclo for da 1 fino al valore della variabile e per ogni valore eseguire un INSERT.
    Il mio problema è: come faccio a "legare" il valore della variabile al POST della casella di testo? In altre parole, una cosa del genere:

    se la variabile passata è = 3 è corretto $_POST['testo(3)'] ?

    Grazie per l'aiuto

  2. #2
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da alberigo Visualizza il messaggio
    Ciao a tutti.
    Premessa:
    una funzione javascript mi permette di aggiungere o togliere a piacimento le righe da una tabella html.
    Le righe della tabella html saranno i record da inserire in un db mysql.

    Una seconda funzione javascript apre una pagina php per l'INSERT delle righe della suddetta tabella..
    Questa seconda funzione "passa" alla pagina php una variabile contenente il numero di record che dovrà inserire e che, come detto, non sono altro che il numero di righe della tabella html.
    La variabile passata è anche (e soprattutto) l'indice delle caselle di testo contenute nelle celle della tabella html (testo0, testo1, testo2, ecc..).

    Di conseguenza, nella pagina php pensavo di fare un ciclo for da 1 fino al valore della variabile e per ogni valore eseguire un INSERT.
    Il mio problema è: come faccio a "legare" il valore della variabile al POST della casella di testo? In altre parole, una cosa del genere:

    se la variabile passata è = 3 è corretto $_POST['testo(3)'] ?

    Grazie per l'aiuto
    Mi sembra un po' contorta.
    Io farei
    - una pagina PHP che prende in input (esempio GET) una lista di numeri (0,1,2,3) ad esempio
    - farei preventivamente un test per essere sicuro che sia proprio una lista di numeri interi (cioè o cifre o , e niente , alla fine)
    - poi con un explode e un ciclo eseguirei le insert.

    lato javascript chiamerei con Ajax la procedura PHP (ottieni tra l'altro la "sparizione" della GET) passando la lista creata.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    138
    Sicuramente hai ragione ma purtroppo devo fare i conti con ciò che sono in grado di fare ed essendo autodidatta....

    La pagina php il get lo prenderebbe già perché è quello con cui gli passo il valore della variabile che contiene il numero di record da inserire. La variabile viene rigenerata ogni volta che eseguo l'insert per cui non esiste il rischio che inserisca più o meno record di quelli previsti.

    Faccio una premessa.
    La tabella html di cui devo fare l'insert nel db può avere una sola riga ma può averne anche di più e, ovviamente, il numero di righe è sempre variabile (trattandosi delle voci di una fattura). Ogni riga di questa tabella contiene 4 caselle di testo (posizione, descrizione, quantità e prezzo unitario) che ho chiamato, rispettivamente, posizione0, descrizione0, qty0, prezzo0. Inserendo una seconda riga si chiameranno posizione1, descrizione1, qty1, prezzo1 e così via a seconda del numero di voci della fattura.
    Fine premessa.

    Ho dato un'occhiata alla funzione explode ma, sempre secondo la mia ignoranza, mi sembra che nel mio caso possa utilizzarla solo se ho una sola riga da inserire creando, se ho capito bene, una stringa contenente posizione0, descrizione0, qty0, prezzo0 e specificando il separatore.
    Ma se ho più di una riga?

  4. #4
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da alberigo Visualizza il messaggio
    Sicuramente hai ragione ma purtroppo devo fare i conti con ciò che sono in grado di fare ed essendo autodidatta....
    Dillo a me... sto facendo una fatica che mai....
    La tabella html di cui devo fare l'insert nel db può avere una sola riga ma può averne anche di più e, ovviamente, il numero di righe è sempre variabile (trattandosi delle voci di una fattura). Ogni riga di questa tabella contiene 4 caselle di testo (posizione, descrizione, quantità e prezzo unitario) che ho chiamato, rispettivamente, posizione0, descrizione0, qty0, prezzo0. Inserendo una seconda riga si chiameranno posizione1, descrizione1, qty1, prezzo1 e così via a seconda del numero di voci della fattura.
    Fine premessa.

    Ho dato un'occhiata alla funzione explode ma, sempre secondo la mia ignoranza, mi sembra che nel mio caso possa utilizzarla solo se ho una sola riga da inserire creando, se ho capito bene, una stringa contenente posizione0, descrizione0, qty0, prezzo0 e specificando il separatore.
    Ma se ho più di una riga?
    Ricapitolando da quanto posso intuire vuoi fare una sorta di SUBMIT dei dati espressi in 4 per volta.
    In questo caso, considera che sono un niubbo pure io, passerei una stringa del tipo

    posizioni=elencoposizioni
    descrizione=elencodescrizioni
    quantita=elencoquantita
    prezzo=elencoprezzi

    Supponiamo per semplicità di avere 3 righe (posizione,descrizione,quantita,prezzo)
    10,pippo,1,4
    12,pluto,3,5.2
    44,paperino,4,3.7

    proverei qualcosa così
    ...?posizioni=10,12,44&descrizione=pippo,pluto,pap erino&quantita=1,3,4&prezzo=4,5.2,3.7

    Poi da PHP fai un explode di posizioni, descrizione, quantità e prezzo.
    Controlli che gli array risultanti siano tutti lunghi uguali (3 nel nostro esempio), poi lavori come ti pare

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Puoi fare anche cosi. Esempio fatto in 20 minuti. Ci sono altri modi per arrivare allo stesso risultato.

    File test505a.php

    Codice PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <
    html>
    <
    head>
    <
    title>Untitled</title>
    <
    script language="JavaScript" type="text/javascript">
    <!--
    var 
    line 0;
    function 
    add() {
     
    line++;
     
    posizione "<td><input type='text' name='pos["+line+"]' value='"+line+"'/></td>";
     
    desc      "<td><input type='text' name='des["+line+"]'/></td>"
     
    qta       "<td><input type='text' name='qta["+line+"]'/></td>";  
     
    prezzo    "<td><input type='text' name='prz["+line+"]'/></td>";   
     
    mioTR     "<tr>"+posizione+desc+qta+prezzo+"</tr>";
     
    alert(mioTR);
     
    document.getElementById('miaTabella').innerHTML document.getElementById('miaTabella').innerHTML mioTR;
    }
    //-->
    </script>
    </head>
    <body>
    <form action="test505b.php" method="post">
     <table summary="" id='miaTabella'>
      <tr>
       <td>Posizione</td><td>Descrizione</td><td>Quantità</td><td>Prezzo</td>
      </tr>
     </table>
     <input type="submit" value="Invia"/>
    </form>
    <hr/>
    <input type="button" value="Aggiungere riga" onclick="add()" />
    </body>
    </html> 
    File test505b.php
    Codice PHP:

    <?php
     
    foreach($_POST as $key => $subArray) {
       foreach(
    $subArray as $index => $value) {
         print 
    "$key [$index] => $value<br/>";
      }
     }
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    138
    Vabbè, per il momento ringrazio entrambi per i suggerimenti.
    nei prossimi giorni vedrò di utilizzarli e vi farò sapere.

    Grazie di nuovo.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    138
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Puoi fare anche cosi. Esempio fatto in 20 minuti. Ci sono altri modi per arrivare allo stesso risultato.

    File test505a.php

    Codice PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <
    html>
    <
    head>
    <
    title>Untitled</title>
    <
    script language="JavaScript" type="text/javascript">
    <!--
    var 
    line 0;
    function 
    add() {
     
    line++;
     
    posizione "<td><input type='text' name='pos["+line+"]' value='"+line+"'/></td>";
     
    desc      "<td><input type='text' name='des["+line+"]'/></td>"
     
    qta       "<td><input type='text' name='qta["+line+"]'/></td>";  
     
    prezzo    "<td><input type='text' name='prz["+line+"]'/></td>";   
     
    mioTR     "<tr>"+posizione+desc+qta+prezzo+"</tr>";
     
    alert(mioTR);
     
    document.getElementById('miaTabella').innerHTML document.getElementById('miaTabella').innerHTML mioTR;
    }
    //-->
    </script>
    </head>
    <body>
    <form action="test505b.php" method="post">
     <table summary="" id='miaTabella'>
      <tr>
       <td>Posizione</td><td>Descrizione</td><td>Quantità</td><td>Prezzo</td>
      </tr>
     </table>
     <input type="submit" value="Invia"/>
    </form>
    <hr/>
    <input type="button" value="Aggiungere riga" onclick="add()" />
    </body>
    </html> 
    File test505b.php
    Codice PHP:

    <?php
     
    foreach($_POST as $key => $subArray) {
       foreach(
    $subArray as $index => $value) {
         print 
    "$key [$index] => $value<br/>";
      }
     }
    ?>

    Allora, ho testato quanto da te postato. Effettivamente è quanto serve a me, dovrò modificarlo per le mie esigenze ma non dovrebbe essere un problema.
    Un funzionamento anomalo lo ha però nella parte html, ovvero, quando inserisco la riga successiva cancella il contenuto delle righe precedenti. In altre parole, se inserisco la decima riga, lui cancella il contenuto di tutte e nove le righe precedenti.

    Infine volevo chiederti una delucidazione. Nel file php, il simbolo "=>" ha qualche significato? Nel print immagino serva solamente a separare le variabili $key e $value, ma nei due foreach?

    Grazie di nuovo per la disponibilità.

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Il mio scopo era di mostrarti il metodo per nominare i campi e come passarli ad un'altra pagina. La parte html è presente solo per fare funzionare l'esempio.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da alberigo Visualizza il messaggio
    Infine volevo chiederti una delucidazione. Nel file php, il simbolo "=>" ha qualche significato? Nel print immagino serva solamente a separare le variabili $key e $value, ma nei due foreach?

    Grazie di nuovo per la disponibilità.
    La sintassi del foreach è questa :

    1° -> foreach ($array as $value) ti percorre l'array e mette ad ogni loop il valore corrente in $value. Ma cosi non sai di quale "chiave" dell'array stai trattando. Mentre con...

    2° -> foreach ($array as $key => $value) ti percorre l'array e ti salva sia la "chiave" che il valore.

    Ovviamente puoi nominare le variabili come vuoi.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Esempio di funzione che mantiene i valori presenti. Secondo me è meglio farlo con jQuery.

    Codice PHP:
    function add() {
     
    line++;
     var 
    tab      document.getElementById('miaTabella');
     var 
    row      tab.insertRow(line);
     
    TD_posizione row.insertCell(0);
     
    TD_desc      row.insertCell(1);
     
    TD_qta       row.insertCell(2);
     
    TD_prezzo    row.insertCell(3);
     
     var 
    curInput createInput('pos['+line+']')
     
    curInput.value line;
     
    TD_posizione.appendChild(curInput);
     
     
    TD_desc.appendChild(createInput('des['+line+']'));
     
    TD_qta.appendChild(createInput('qta['+line+']'));
     
    TD_prezzo.appendChild(createInput('prz['+line+']')); 
     

    function 
    createInput(inputName) {
     var 
    input  document.createElement("input");
     
    input.type "text";
     
    input.name inputName;
     return 
    input;

    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

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.