Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    18

    Passare con $_POST un array contenente altri array

    Ciao a tutti,
    sto cercando di far funzionare una pagina abbastanza complessa, provando vari approcci ma non riesco ad uscirne....
    1. visualizzo a video con un ciclo while, un'elenco di righe primarie (array1) derivate da una query su un database
    2. cliccando su una di queste righe, visualizzo le righe di dettaglio (array1[array2]) relative a quella riga primaria, derivanti da un'altra query, su un'altra tabella, contenente dati legati alla riga primaria
    3. i dati delle righe di dettaglio compaiono in campi input, in modo che l'utente li possa modificare
    4. quando confermo, dopo aver fatto le modifiche, devo ricaricare la pagina con i dati della riga di dettaglio aggiornata

    Ho provato vari approcci e sono sempre tornato al problema di passarmi i dati modificati per usarli nelle operazioni di aggiornamento.
    Praticamente mi sono creato un array con i dati delle righe primarie contenente l'array dei dati delle righe di dettaglio (e fin qui ci sono): adesso devo passarmi i dati (aggiornati però in base alle modifiche sui form) con $_POST, ma il risultato è sempre che il dato non passa.

    Sono consapevole che la descrizione è un po' incasinata, ma se qualcuno si rende disponibile, provo a spiegarmi meglio in base a domande mirate.

    Grazie in anticipo!

  2. #2
    I campi input che usi saranno inseriti in un form, questo form ha come destinazione la pagina stessa, sembra di capire.
    Quindi se $_POST è valorizzato correttamente tu usi i dati per fare una query di aggiornamento.

    Ho capito bene ?

    Senza codice e qualche commento è difficile capirsi. Pubblica il codice.

  3. #3
    secondo me devi fare le operazioni di update direttamente su una tabella copia, in modo da non doverti passasre dati a rotta di collo, e su conferma/re setta andare a sostituire nella tabella originale o meno. il conferma avrà i dati degli input, che al peggio puoi far refreshare e solo loro, non tutta la pagina. il re set riporterà allo stato del db (chiamate a db permettendo)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    18
    Grazie per le risposte.
    W Thunderbird: si è come dici tu.
    Ecco un estratto del codice, tagliato qua e là, perché la pagina è un po' complessa (e credo anche disordinata...)
    Qui sotto in teoria la parte che mi visualizza il form e dal 2° while è dove c'è un po' di casino perché ho provato varie cose, nessuna funzionate (da dove ho scritto //E QUI INIZIA IL CASINO...)

    Codice PHP:
    while ($a_row dbms_fetch_array($result))  {
        
    $modif "admin_offerte.php?id_tes=".$_POST['id_tes']."&Update&id_rig=".$a_row["id_rig"]."&modif_rig";
        
    $ins_tempi "admin_offerte.php?id_tes=".$_POST['id_tes']."&Update&id_rig=".$a_row["id_rig"]."&modif_rig&ins_tempi";
        
    $nodettagli "admin_offerte.php?id_tes=".$_POST['id_tes']."&Update";
        
    $data_ins $a_row["data_ins"];
        if ((isset(
    $_GET['modif_rig'])) and ($_GET['id_rig'] == $a_row['id_rig'])) {
            echo 
    "<tr title=\"Click per nascondere i dettagli della riga\" onmouseover=\"this.style.cursor='pointer'\" onclick=\"window.location ='".$nodettagli."'\">";
        } else {
            echo 
    "<tr title=\"Click per modificare e visualizzare i dettagli della riga\" onmouseover=\"this.style.cursor='pointer'\" onclick=\"window.location ='".$modif."'\">";
        }

        echo 
    "<td>".$data_ins."</td>";
        echo 
    "<td>".$a_row["art_cod"]."</td>";
        echo 
    "<td>".$a_row["codart"]."</td>";        
        echo 
    "<td>".$a_row["descri"]."</td>";
        echo 
    "<td>".$a_row["annota"]."</td>";
        echo 
    "</tr>";
        
        
    //VISUALIZZAZIONE DETTAGLI RIGA
        
    if ((isset($_GET['modif_rig'])) and ($_GET['id_rig'] == $a_row['id_rig'])) {
            echo 
    '<tr>';
            echo 
    '<table border="0" cellpadding="1" cellspacing="0" align="left"><tr>';
            
    //intestazioni tabella tempi
            
    echo '<td><b>Risorsa</b></td><td><b>U.M.</b></td><td><b>Tempo</b></td><td><b>Annotazioni</b></td></tr>';
            
    //righe tempi presenti nel database
            
    $righe_tempi dynQuery ("*"$tempi_table"id_rig = ".$_GET["id_rig"]);
            
    //creo l'array delle righe
            
    if (!isset($_POST['array_righe']))
                
    $_POST['array_righe'] = array();
            echo 
    '<input type="hidden" name="array_righe" value="'.serialize($_POST['array_righe']).'">';

            while (
    $a_row1 dbms_fetch_array($righe_tempi)){
    //E QUI INIZIA IL CASINO....
                //creo l'array della riga e lo metto nell'array_righe
                //$_POST['array_righe'][$_POST['array_riga']] = array($a_row1['id_tem'], $a_row1['risorsa'], $a_row1['unimis'], $a_row1['quanti'], $a_row1['status'], $a_row1['annota_tempo']);
                
    $_POST['array_riga'] = array($a_row1['id_tem'], $a_row1['risorsa'], $a_row1['unimis'], $a_row1['quanti'], $a_row1['status'], $a_row1['annota_tempo']);
                
    //$_POST['array_riga'] = array();                
                
    echo '<input type="hidden" name="array_riga" value="'.$_POST['array_riga'].'">';
                echo 
    '<input type="hidden" name="array_riga[0]" value="'.$a_row1['id_tem'].'">';
                echo 
    '<tr>';
                echo 
    '<td><select class="FacetSelect1" name="array_riga[1]">';
                echo 
    '<option selected>'.$a_row1['risorsa'].'</option>\n';
                echo 
    '<option value="S4">S4</option>\n';
                echo 
    '<option value="PEGA">PEGA</option>\n';
                echo 
    '<option value="L1">L1</option>\n';
                echo 
    '<option value="VIPROS">VIPROS</option>\n';
                echo 
    '</select></td>';
                echo 
    '<td><select class="FacetSelect1" name="array_riga[2]">';
                echo 
    '<option selected>'.$a_row1['unimis'].'</option>\n';
                echo 
    '<option value="SS">SS</option>\n';
                echo 
    '<option value="NR">NR</option>\n';
                echo 
    '</select></td>';
                echo 
    '<td><input class="FacetSelect1" type="text" name="array_riga[3]" value="'.$a_row1['quanti'].'" maxlength="8" size="7"></td>';
                echo 
    '<input type="hidden" name="array_riga[4]" value="'.$a_row1['status'].'">';
                echo 
    '<td><input class="FacetSelect1" type="text" name="array_riga[5]" value="'.$a_row1['annota_tempo'].'" maxlength="100" size="60"></td>';
                echo 
    '<td>&nbsp;<a href="'.$ins_tempi.'&savetempo='.$a_row1['id_tem'].'"><img src="../../images/filesave.png" border="0"></a>';
                echo 
    '</td></tr>';
            }
        }

    questa invece la funzione che, se clicco sul pulsante salva, mi dovrebbe avviare le operazioni di aggiornamento:

    Codice PHP:
    //se viene inviata una richiesta di MODIFICA TEMPO
    if (isset($_GET['savetempo'])) {
        
    //estraggo i dati dall'array righe
        
    $_POST['array_riga'] = unserialize($_POST['array_riga']);
        
    $id_tem $_GET['savetempo'];
     
        
    // aggiorno il db dei tempi
        
    tempiUpdate.....;        

    Spoero di non aver fatto troppo casino...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    18
    Quote Originariamente inviata da scorpioprise Visualizza il messaggio
    secondo me devi fare le operazioni di update direttamente su una tabella copia, in modo da non doverti passasre dati a rotta di collo, e su conferma/re setta andare a sostituire nella tabella originale o meno. il conferma avrà i dati degli input, che al peggio puoi far refreshare e solo loro, non tutta la pagina. il re set riporterà allo stato del db (chiamate a db permettendo)
    scusa ma non ho capito cosa intendi...
    non ho problemi a fare le operazioni direttamente sulla tabella giusta, il problema che riscontro è nel passarmi i dati eventualemnte modificati nel form
    il conferma avrà i dati degli input, che al peggio puoi far refreshare e solo loro, non tutta la pagina.
    questa non l'ho capita, ma mi suona interessante... cosa intendi?

  6. #6
    Nel tuo codice non apri mai un form e non c'è un pulsante Submit, come fai ad inviare i dati tramite POST ?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    18
    Eh, ho postato solo il ciclo while...
    da qualche parte nel mio file ho
    Codice PHP:
    echo '<form method="POST" name="admin_offerte" enctype="multipart/form-data">'
    e ricarico la pagina con questo link (presente nel codice del post precedente)
    Codice PHP:
    echo '<a href="'.$ins_tempi.'&savetempo='.$a_row1['id_tem'].'"><img src="../../images/filesave.png" border="0"></a>'
    non so se sia corretto, ma la parte di inserimento riga funziona, passandomi tutti i $_POST, e in teoria dovrebbe funzionare anche la modifica...
    Avevo provato anche con un submit sull'immagine, ma non funzionava ugualmente...

  8. #8
    Secondo me non va perchè nel form manca l'attributo action e il pulsante submit che fa' venire in mente al browser di inviarti le variabili tramite POST.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    18
    Faccio delle prove, ma tutte le altre funzioni con $_POST non hanno problemi e funziona tutto.....
    Infatti sono riuscito a passarmi il $_POST con l'array derivato dalle interrogazioni al database, ma non riesco a passarmi l'array con le modifiche al form.
    Se vuoi io ti posto anche tutta la pagina (oltre 800 righe), dove mancheranno le varie funzioni contenute nei file include, ma credo torneremmo allo stesso punto: la parte di codice che dovrebbe avere il problema è quella postata all'inizio....
    Senza analizzare il file, tu non sai darmi indicazioni generiche su come gestire i sotto-array nei $_POST (non so se sono definiti array multidimensionali)?
    Grazie per la tua disponibilità!

  10. #10
    La pagina prima, quella che passa le variabili tramite POST, sicuramente ha un form completo con l'indicazione della pagina a cui inviare i dati e un pulsante per inviarli.
    In questa pagina, di fatto, mancano questi elementi.
    Questo link:
    Codice PHP:
    echo '<a href="'.$ins_tempi.'&savetempo='.$a_row1['id_tem'].'"><img src="../../images/filesave.png" border="0"></a>'
    Non fà altro che rimandare il link ad una pagina, ma il browser non si porterà dietro le variabili POST. Tu non gli stai chiedendo di inviare il form.
    Questo link passa alla nuova pagina solo i parametri GET che tu gli dai. Fai un debug all'inizio della pagina controllando le variabili $_GET e $_POST.
    Ultima modifica di W Thunderbird; 04-03-2014 a 11:35

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.