Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    send array to another page (no session)

    Ciao a tutti,

    ho un form multi select che genera un array e deve passarlo ad un altra pagina (senza sessioni) ma la pagina ricevente mi torna: Undefined index

    Questo il codice che rileva selezione e genera array in pagina uno:

    Codice PHP:
    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {
        
        
    $seminari $_POST['seminari_idseminari'];
        foreach(
    $seminari as $seminario){
            
              
    $semset=array();
      foreach(
    $seminari as $seminario){
        
    $semset[] = "('$seminario')";
      }
    }
    }

    $semset implode(',',$semset); 

    // fino a qui testato (echo $semset) e tutto ok

    $setOK "__test01.php";
    if (isset (
    $semset)&& !empty($semset)){
        
    header(sprintf("Location: %s"$setOK));


    e nel form:

    codice:
    <form>
    // .. tutto il form...
                      <tr>
                              <td><input type="submit" class="button" value="Genera iscritti" /></td>
                            </tr>
                          </table>
                          <input type="hidden" name="MM_insert" value="form2" />
                        <input type="hidden" name="SemArray" value="<?php serialize($semset); ?>" />
                      </form>

    questo il codice nella pagina 2:

    Codice PHP:
    <?php 

    $passed_array 
    unserialize($_POST['SemArray']);

    echo 
    $passed_array ;

    ?>

    -> output: Notice: Undefined index: SemArray

    Any idea ?

    Successivamente utilizzo l'array per interrogare il DB...

    Codice PHP:
     $query "SELECT * FROM `$table` WHERE `$column` IN('".implode("','",$passed_array)."')"


    Grazie e buona domenica
    Ultima modifica di nicemotion; 25-01-2015 a 16:16

  2. #2
    Codice PHP:
    $seminari $_POST['seminari_idseminari'];
        foreach(
    $seminari as $seminario){
            
              
    $semset=array();
      foreach(
    $seminari as $seminario){
        
    $semset[] = "('$seminario')";
      } 
    spiega questo..?
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    E' un pò tutto poco chiaro.
    Fai un doppio ciclo, che come ha già fatto notare alkatraz non ha molto senso, e subito dopo esegui una implode? Prima costruisci un array e subito dopo lo "smonti"?

    Successivamente controlli che la variabile creata poco sopra non sia vuota e se non lo è esegui un redirect senza passare i dati?
    Non è chiaro, almeno per me.

  4. #4
    Grazie Arkus and Alkatraz, sono alle prime armi con la gestione degli array da form e ho cercato di destreggiarmi da un pezzo di codice usato per uno scopo diverso ma ho fatto casino

    Ho pulito il codice seguendo i commenti di Arkus così:


    Codice PHP:
    $editFormAction $_SERVER['PHP_SELF'];
    if (isset(
    $_SERVER['QUERY_STRING'])) {
      
    $editFormAction .= "?" htmlentities($_SERVER['QUERY_STRING']);
    }


    $semset $_POST['seminari_idseminari'];
      foreach(
    $seminari as $seminario){
        
    $semset[] = "('$seminario')";
    }

    $insertGoTo "__test01.php";
    if (
    is_array ($semset)&& !empty($semset)){
        
    header(sprintf("Location: %s"$insertGoTo));
    } else {
        echo 
    "semset empty or not array";} 

    .. e nel form:

    codice:
     <form action="<?php echo $editFormAction; ?>" method="post" id="form2">
    
    ... qui contenuto form
    <input type="hidden" name="SemArray" value="<?php echo serialize($semset); ?>" />
     </form>

    la pagina ricevente:

    Codice PHP:
    <?php 

    $passed_array 
    unserialize($_POST['SemArray']);

    echo 
    $passed_array ;

    ?>

    ma continua a restituire Undefined index: SemArray ... temo ci sia un errore nel form action
    Ultima modifica di nicemotion; 26-01-2015 a 13:50

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    E' normale che tu riceva quel messaggio di errore.

    Per il momento lascia stare il codice che hai tentato di scrivere.
    Hai bisogno di una form con più select nel file 1, l'utente farà le sue selezioni e poi invierà i dati ad una pagina che dovrà elaborarli (file2). E' corretto?
    Se è così non c'è bisogno di sessioni o di serializzare, la form invierà direttamente i dati sotto forma di array nella variabile $_POST.

    O hai bisogno di uno step intermedio? Se è così spiega il motivo.
    Ultima modifica di arkus; 26-01-2015 a 19:01

  6. #6
    Ciao Arkus e grazie della risposta

    Quote Originariamente inviata da arkus Visualizza il messaggio
    Hai bisogno di una form con più select nel file 1, l'utente farà le sue selezioni e poi invierà i dati ad una pagina che dovrà elaborarli (file2). E' corretto?
    Si è corretto, di fatto la form è popolata da DB e funziona tutto tanto e vero che se provo a fare un check cosi:

    Codice PHP:
    $semset implode(',',$semset);
    echo 
    $semset

    dopo la creazione dell'array mi torna i valori corretti.
    L'array verra poi utilizzato nella pag 2 per interrogare il DB:

    Codice PHP:
    $query "SELECT * FROM `$table` WHERE `$column` IN('".implode("','",$passed_array)."')"


    Quote Originariamente inviata da arkus Visualizza il messaggio
    Se è così non c'è bisogno di sessioni o di serializzare, la form invierà direttamente i dati sotto forma di array nella variabile $_POST.
    O hai bisogno di uno step intermedio? Se è così spiega il motivo.
    Ho serializzato perchè così è raccomandato fare per esempio qui: http://stackoverflow.com/questions/6...hidden-element . non ho bisogno di step intermedi

    Quote Originariamente inviata da arkus Visualizza il messaggio
    E' normale che tu riceva quel messaggio di errore.
    Per il momento lascia stare il codice che hai tentato di scrivere.
    Ma perchè ? L'unica cosa che non va è il passaggio dell'array...
    Ultima modifica di nicemotion; 27-01-2015 a 01:35

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    Scusa ma forse non capisco bene io cosa vorresti fare, o comunque non ne capisco il senso.

    Parli di una form con una multi select, al submit devi inviare le selezioni ad una pagina che deve elaborare i dati per inserirli in database.

    Un esempio generico con due select:

    file1.php
    Codice PHP:
    <form action="file2.php" method="post" enctype="multipart/form-data">
       
    select1
       
    <select name="select1">
          <
    option value="juventus">juventus</option>
          <
    option value="roma">roma</option>
          <
    option value="milan">milan</option>
          <
    option value="lazio">lazio</option>
        </
    select>
       <
    br>
        
    select2
       
    <select name="select2">
          <
    option value="aria">Aria</option>
          <
    option value="terra">terra</option>
          <
    option value="fuoco">Fuoco</option>
          <
    option value="acqua">Acqua</option>
        </
    select>
        <
    br>
        <
    input type="submit">
    </
    form



    al submit vengono inviati i dati a file2.php

    Codice PHP:
    print_r($_POST); 

    Come esempio stampo il contenuto di $_POST. Fatti i dovuti controlli si potebbe passare alla insert in DB.
    Se quel che vuoi fare non rientra in questo esempio base prova a spiegare meglio il tuo intento passo passo.

  8. #8
    Carissimo e paziente Arkus,

    Quote Originariamente inviata da arkus Visualizza il messaggio
    Scusa ma forse non capisco bene io cosa vorresti fare, o comunque non ne capisco il senso.
    Argh.. fatta cosi funziona lol.. ottengo in pag 2 :

    Array ( [seminari_idseminari] => Array ( [0] => 1306 [1] => 1340 [2] => 1354 ) )

    Sii gentile ancora una volta..... mi dici come trasformare quel output in un array $semselected del tipo 1306, 1340, 1354 da poter inserire nella mia query

    Codice PHP:
    $query "SELECT * FROM `$table` WHERE `$column` IN ($semselected)"


    Mi stavo complicando la vita perche ho letto che non è sicuro mettere l'url direttamente nel form action ma è consigliato usare
    <form action="<?php echo $editFormAction; ?>" però considerato che è un gestionale ad accesso interno non credo ci siano problemi.

    Anche l'utilizzo dell'hidden field e del serialize derivano da tutorial letti.. cavolo fatto come dici è veramente elementare

    Ti ringrazio molto per l'attenzione e giuro che mi studio meglio array e multiselect appena termino sto lavoro !

    Buona giornata, Nik

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    Quote Originariamente inviata da nicemotion Visualizza il messaggio

    Mi stavo complicando la vita perche ho letto che non è sicuro mettere l'url direttamente nel form action ma è consigliato usare
    <form action="<?php echo $editFormAction; ?>" però considerato che è un gestionale ad accesso interno non credo ci siano problemi.
    Dove hai letto questa informazione veniva data anche una spiegazione valida?

    Tra:

    $action = 'file2.php';
    <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data">

    e scrivere direttamente il nome del file

    <form action="file2.php" method="post" enctype="multipart/form-data">

    Non cambia assolutamente nulla a livello di sicurezza. Viene solo creata una variabile inutile in questo caso base.
    Per quanto riguarda la serializzazione... ha senso utilizzarla in altri contesti.


    Al momento non ho modo di provare quel che sto per scrivere, potrebbe esserci quindi qualche errore.


    Codice PHP:
    if(!isset($_POST['seminari_idseminari']) || empty($_POST['seminari_idseminari'])){
        echo 
    "Selezionare almeno un seminario"
        exit; 
    }

    $semselected = array();
    foreach (
    $_POST['seminari_idseminari'] as $id) {
        
    // E' importante eseguire il cast ad intero per evitare sql injection
        
    $semselected[] = "'" . (int)$id "'";
    }
    $query "SELECT * FROM `$table` WHERE `$column` IN (" implode(","$semselected) . ")";
    echo 
    $query
    Ultima modifica di arkus; 27-01-2015 a 12:30

  10. #10
    Quote Originariamente inviata da arkus Visualizza il messaggio
    Dove hai letto questa informazione veniva data anche una spiegazione valida?

    Tra:

    $action = 'file2.php';
    <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data">

    e scrivere direttamente il nome del file

    <form action="file2.php" method="post" enctype="multipart/form-data">

    Non cambia assolutamente nulla a livello di sicurezza. Viene solo creata una variabile inutile in questo caso base.
    Qui una fonte.. (di distrazione lol): http://forums.devnetwork.net/viewtopic.php?f=1&t=103959




    Al momento non ho modo di provare quel che sto per scrivere, potrebbe esserci quindi qualche errore.

    Quote Originariamente inviata da arkus Visualizza il messaggio
    Codice PHP:
    if(!isset($_POST['seminari_idseminari']) || empty($_POST['seminari_idseminari'])){
        echo 
    "Selezionare almeno un seminario"
        exit; 
    }

    $semselected = array();
    foreach (
    $_POST['seminari_idseminari'] as $id) {
        
    // E' importante eseguire il cast ad intero per evitare sql injection
        
    $semselected[] = "'" . (int)$id "'";
    }
    $query "SELECT * FROM `$table` WHERE `$column` IN (" implode(","$semselected) . ")";
    echo 
    $query

    Works like a charm! Sei un mito paziente.. potessi ti aumenterei il salario

    Grazie ancora e .. a presto :P

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.