• User

    Form, array e mysql

    Ciao a tutti!

    Premetto che non cerco la "pappa pronta", ma ho delle vistose lacune e spero che mi sappiate indirizzare al meglio per colmarle...

    Vengo al sodo: ho la necessità di salvare record a gruppi di 7/8 righe alla volta ma proprio non capisco come impostare il tutto.

    Semplificando al massimo è come se dovessi creare una rubrica telefonica inviando al db un gruppi di contatti in un colpo solo (per i quali inserisco nome, cognome e n° di telefono)...

    tanto per capirci:

    Nome - Cognome -Tel
    Nome - Cognome -Tel
    Nome - Cognome -Tel
    Nome - Cognome -Tel
    Nome - Cognome -Tel
    Nome - Cognome -Tel

    INVIA

    A quanto pare il modo migliore è passare i dati in un array, tipo:

    <form action="elabora.php" method="post">
    <INPUT TYPE="text" NAME="nome[1]" value="">
    <INPUT TYPE="text" NAME="cognome[1] "value="">
    <INPUT TYPE="text" NAME="telefono[1] "value="">

    ....fino a...

    <INPUT TYPE="text" NAME="nome[5]" value="">
    <INPUT TYPE="text" NAME="cognome[5] "value="">
    <INPUT TYPE="text" NAME="telefono[5] "value="">

    <INPUT TYPE="submit" value="esegui">
    </form>

    ....è giusto?

    E nella pagina elabora.php come faccio ad impostare il ciclo per inserire i 5 record nella tabella contatti?

    Ripeto che non pretendo la pappa pronta...vi sarei molto grato se sapeste indicarmi un sito dove poter risolvere questo problema...

    grazie a tutti in anticipo!! :ciauz:


  • User

    Nella pagina PHP puoi leggere i valori passati nel modo seguente:

    [PHP]
    @ $nome = $_POST['nome'];
    [/PHP]

    a questo punto la variabile $nome conterrà un Array dal quale puoi ricavare i valori semplicemente tramite un ciclo.


  • User

    ...così?

    $array_nome = $_POST['nome[]'];
    $array_cognome = $_POST['cognome[]'];
    ecc...

    foreach($array_nome as $valore)
    {
    $query = "INSERT INTO contatti VALUES ('$array_nome','$array_cognome','$array_telefono')";
    $result = mysql_query($query, $myconn) or die("Errore...");
    }

    ...spero di aver capito bene....corro a provarlo....grazie!!! 🙂


  • User

    Non è proprio così per prima cosa non devi mettere le parentesi quadre aperte e chiuse [] dopo il nome dell'attributo:

    [php]
    $array_nome = $_POST['nome'];
    $array_cognome = $_POST['cognome'];
    $array_telefono = $_POST['telefono'];
    [/php]poi, dovrai effettuare una insert per ogni iterazione. Non puoi passare direttamente l'array nella query:

    [php]
    for ($i = 1; $i <= sizeof($array_nome); $i++) {
    $query = "INSERT INTO contatti VALUES ('$array_nome*','$array_cognome*','$array_telefono*') ";
    $result = mysql_query($query, $myconn) or die("Errore...");
    }
    [/php]


  • User

    stavo per mettermi a piangere quando ho visto le tue correzioni alle mie follie....

    ...semplicemente FANTASTICO!!!

    non saprei davvero come ringraziarti...adesso funziona alla perfezione...

    :yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi:


  • User

    ...ti/vi rompo di nuovo le scatole... 😉

    ...supponiamo io volessi definire tramite radio button se il telefono è di casa o cellulare...non si può!

    Questo perchè, giustamente, dato che i radio button nell'array hanno tutti lo stesso nome, ad es. radio[], se ne può selezionare solo uno in tutto il form.

    Esiste un trucchetto per aggirare l'inconveniente, oppure ci si deve rassegnare al meno estetico SELECT OPTION?

    :ciauz:


  • User

    Innanzitutto ti consiglio di utilizzare le checkbox piuttosto che i radio button. Puoi comunque continuare ad utilizzare gli array per recuperare i calori delle checkbox, ma il problema è che nell'array che andrai a recuperare tramite PHP saranno definiti solamente gli indici delle checkbox valorizzate nella form mentre gli altri saranno indefiniti, ma basta effettuare un semplice controllo su questa cosa. Inoltre il valore contenuto nel'array in corrispondenza della/e checkbox valorizzata/e sarà quello presente nell'attributo value della checkbox. Ad esempio:

    [html]
    ...
    <input type="checkbox" name="rad[1]" value="true">
    ...
    [/html]
    se la checkbox è seleziomata il valore contenuto in rad[1] (che in questo caso sarà definito) sarà true in quanto l'attributo value contiene la stringa true.
    Per concludere, il codice che stai utilizzando potrebbe essere modificato come segue:

    [html]
    <INPUT TYPE="text" NAME="nome[1]" value=""><br/>
    <INPUT TYPE="text" NAME="cognome[1]" value=""><br/>
    <INPUT TYPE="text" NAME="telefono[1]" value=""><br/>
    <INPUT TYPE="checkbox" NAME="casa[1]" value="true"><br/><br/>
    ...
    <INPUT TYPE="text" NAME="nome" value=""><br/>
    <INPUT TYPE="text" NAME="cognome" value=""><br/>
    <INPUT TYPE="text" NAME="telefono" value=""><br/>
    <INPUT TYPE="checkbox" NAME="casa" value="true"><br/><br/>
    [/html][php]
    @ $array_nome = $_POST['nome'];
    @ $array_cognome = $_POST['cognome'];
    @ $array_telefono = $_POST['telefono'];
    @ $array_casa = $_POST['casa'];

    for ($i = 1; $i <= sizeof($array_nome); $i++) {
    $casa = "";
    if (isset($array_casa*)) {
    $casa = $array_casa*;
    }
    $query = "$i INSERT INTO contatti VALUES ('$array_nome*','$array_cognome*','$array_telefono*','$casa') ";
    echo $query."\n";
    // $result = mysql_query($query, $myconn) or die("Errore...");
    }
    ?>
    [/php]Ovviamente in questo modo sul DB verrà inserita la stringa "true" se la checkbox è selezionata e una stringa vuota "" in caso contrario, ma puoi modificare il codice adattandolo alle tue esigenze.

    P.S.
    Ti consiglio, per fare delle prove sui parametri in POST, di utilizzare nella pagina PHP che recupera i valori la funzione:

    [php]
    var_dump($_POST);
    [/php]che visualizzerà tutto il contenuto della variabile $_POST.


  • User Newbie

    Vorrei avere un chiarimento, nel caso in cui nel form per l'inserimento dei dati non vada ad inserire NAME="nome[1]" , ma semplicemente NAME="nome[]"

    [html]

    1. indirizzo CASA
      <INPUT TYPE="text" NAME="nome[]" value=""><br/>
      <INPUT TYPE="text" NAME="cognome[]" value=""><br/>
      <INPUT TYPE="text" NAME="telefono[]" value=""><br/>
      <INPUT TYPE="checkbox" NAME="casa[]" value="true"><br/><br/>

    2. indirizzo UFFICIO
      <INPUT TYPE="text" NAME="nome[]" value=""><br/>
      <INPUT TYPE="text" NAME="cognome[]" value=""><br/>
      <INPUT TYPE="text" NAME="telefono[]" value=""><br/>
      <INPUT TYPE="checkbox" NAME="casa[]" value="true"><br/><br/>
      ...

    3. indirizzo CASA IN MONTANA
      <INPUT TYPE="text" NAME="nome[]" value=""><br/>
      <INPUT TYPE="text" NAME="cognome[]" value=""><br/>
      <INPUT TYPE="text" NAME="telefono[]" value=""><br/>
      <INPUT TYPE="checkbox" NAME="casa[]" value="true"><br/><br/>
      [/html]
      fino a 7 volte
      [php]
      @ $array_nome = $_POST['nome'];
      @ $array_cognome = $_POST['cognome'];
      @ $array_telefono = $_POST['telefono'];
      @ $array_casa = $_POST['casa'];

    for ($i = 1; $i <= sizeof($array_nome); $i++) {
    $casa = "";
    if (isset($array_casa*)) {
    $casa = $array_casa*;
    }
    $query = "$i INSERT INTO contatti VALUES ('$array_nome*','$array_cognome*','$array_telefono*','$casa') ";
    echo $query."\n";
    // $result = mysql_query($query, $myconn) or die("Errore...");
    }
    ?>
    [/php]
    e chi compila il form inserisce il primo indirizzo (casa) e l'ultimo indirizzo (casa in montagna), l'inserimento avviene comunque correttamente? perchè in un caso molto simile a questo nel mio caso se non vengono compilati tutti gli "indirizzi", alcuni non vengono inseriti nel DB.