• User

    Problema con form e inserimento dati in MySql

    Ciao a tutti!

    Sono arrivato ad un punto morto e non riesco ad uscirne, posto il codice per cercare di essere il più chiaro possibile...

    Nella mia pagina di inserimento dati ho questo codice:

    [php]
    <form method='post' action='inserimento.php'>
    <?

    //array dei nomi
    $campi = array("casa","nave","palla","sole","mare");

    //cambia il nome, IN non va bene
    $input = mysql_query("SELECT SAMSIZ FROM SPC_DATA_IN WHERE CENIDM = '$parolacercata'");

    for($i=0;$i<mysql_result($input,0);$i++)
    echo "<input type='text' name='".$campi*."'><br>";
    ?>
    [/php]

    che mi permette di genere tanti campi di input quanto indicato dl valore INT SAMSIZ.
    Nella SELECT i record ritrovati sono 5, questo farà si che per ogni record selezionato mi si genereranno 5 campi di input (5x5=25). Il problema sta nel fatto che il numero e il nome di campi ($campi = array("casa","nave","palla","sole","mare") in questo caso l'abbia dovuto specificare mentre vorrei si creassero dinamicamente in base alla SELECT.

    L'invio del form mi manda ad una pagina php che elabora l'invio dove è contenuto questo script:

    [php]
    // CONNESSIONE AL DATABASE
    include('connect.php');
    // RECUPERA DATI DAL FORM
    foreach($_POST as $var => $value) $_POST[$var] = mysql_real_escape_string($value);

    // INSERISCI NUOVO ARTICOLI IN DATABASE
    $query = "INSERT INTO SPC_DATA_OUT (VAL) VALUES ('".$_POST['casa']."','".$_POST['nave']."','".$_POST['sole']."','".$_POST['mare']."','".$_POST['luna']."')";
    if (@mysql_query($query)) {
    echo ("<div align=center class=titolo_pagina><br>Record inserito con successo!<br><br><font class=sottotitolino><a href="inserimento.php", "self">>Torna all'inserimento</a></font><br><font class=sottotitolino><a href="home_admin.php", "self">>Torna al pannello di amministrazione</a></font>
    <br><br><font class=sottotitolino><a href=logout.php>Logout</a></font></div>");
    } else {
    echo ("<div align=center class=testo> <b>Errore di inserimento record: ". mysql_error()
    ."</b></div>");
    }[/php]

    dove ovviamente devo richiamare i nomi dei campi impostati nella pagina precedente.
    A parte il fatto che così fatto il codice non funziona, vorrei sapere come posso comportarmi nell'elaborazione dei dati inviati.

    E' un giorno e mezzo che ci sclero e tra tutorial e manuale php non riesco a venirne a capo. Purtroppo questo è il mio primo progetto in php un po' articolato e vorrei evitare di fare una figuraccia.

    Ringrazio anticipatamente per ogni genere di supporto.
    Starebene,
    R.


  • ModSenior

    Ciao Righez
    dovresti aggiungere la funzione mysql_error per vedere intanto che errore genera.
    Il nome delle tabelle e dei campi dovrebbe essere indicato in minuscolo per chiarezza, in maniera tale che in una query del tipo SELECT nome_campo FROM tabella sia facilmente individuabile quando si fà riferimento a tabelle e campi.


  • User

    Ciao Darkita...grazie per la celere risposta...
    Per quanto riguarda gli errori non me ne da: il problema è che all'interno della tabella spc_data_out nel campo val mi viene registrato solo il primo dato inserito nel primo campo dell'ultimo form generato.

    Riposto il codice modificato come mi hai suggerito:

    form
    [php]
    <?

    //array dei nomi
    $campi = array("casa","nave","palla","sole","mare");

    //cambia il nome, IN non va bene
    $input = mysql_query("SELECT samsiz FROM spc_data_in WHERE cenidm = '$parolacercata'");

    for($i=0;$i<mysql_result($input,0);$i++)
    echo "<input type='text' name='".$campi*."'><br>";
    ?>
    [/php]

    pagina php
    [php]
    <?

    // CONNESSIONE AL DATABASE
    include('connect.php');
    // RECUPERA DATI DAL FORM
    foreach($_POST as $var => $value) $_POST[$var] = mysql_real_escape_string($value);

    // INSERISCI NUOVO ARTICOLI IN DATABASE
    $query = "INSERT INTO spc_data_out (val) VALUES ('".$_POST['casa']."','".$_POST['nave']."','".$_POST['sole']."','".$_POST['mare']."','".$_POST['luna']."')";
    if (@mysql_query($query)) {
    echo ("<div align=center class=titolo_pagina><br>Record inserito con successo!<br><br><font class=sottotitolino><a href="inserimento.php", "self">>Torna all'inserimento</a></font><br><font class=sottotitolino><a href="home_admin.php", "self">>Torna al pannello di amministrazione</a></font>
    <br><br><font class=sottotitolino><a href=logout.php>Logout</a></font></div>");
    } else {
    echo ("<div align=center class=testo> <b>Errore di inserimento record: ". mysql_error()
    ."</b></div>");
    }
    ?>
    [/php]


  • User

    Ringrazio in anticipo...
    peace!
    R.


  • ModSenior

    È normale sia cosi, hai specificato un solo campo val e inserito invece 5 valori, per 5 campi diversi, per cui il primo valore finisce nel campo val, ma gli altri?


  • User

    Proprio per questo sto cercando il modo di rendere dinamico la registrazione dei dati inseriti, ovvero:

    se i campi che mi vengono automaticamente generati nel form sono 5 vorrei che ogni dato inserito vada ad occupare un record sotto il campo val. 5 campi form generati = 5 record val registrati

    ps anche il name di ogni campo vorrei che si generasse dinamicamente, anche perchè di volta in volta non so quanti campi verranno generati, questo dipenderà dal valore samsiz richiamato in query.

    Se non fossi stato chiaro ti prego di dirmelo in modo tale da ripostare il quesito in modo più chiaro.

    Grazie, veramente.
    Peace, R.


  • ModSenior

    L'inserimento multiplo con una singola query passando per php non è supportato.
    Devi ciclare la query in maniera da farne 5.


  • User

    Ok...essendo io abbastanza ignorante potresti farmi un piccolo esempio?...giusto uno spunto da cui partire...
    Grazie mille!


  • ModSenior

    Quello che devi ottenere è questo:

    [php]
    mysql_query("INSERT INTO spc_data_out (val) VALUES ('".$_POST['casa']."')";
    mysql_query("INSERT INTO spc_data_out (val) VALUES ('".$_POST['nave']."')";
    mysql_query("INSERT INTO spc_data_out (val) VALUES ('".$_POST['sole']."')";
    mysql_query("INSERT INTO spc_data_out (val) VALUES ('".$_POST['mare']."')";
    mysql_query("INSERT INTO spc_data_out (val) VALUES ('".$_POST['luna']."')";
    [/php]

    Cioè 5 query separate, in quanto non è possibile raggrupparle in una unica, utilizzando php.


  • User

    Perfetto grazie mille per l'aiuto....
    In questo caso i nomi dei campi form (casa, nve, sole, mare, luna) li devo preimpostare, invece vorrei che si creassero dinamicamente in base al numero indicato dal campo del db samsiz (infatti io non saprò mai effettivamente quanto varrà l'int di samsiz), quindi se per caso il valore fosse 8 vorrei che dinamicamente php assegnasse 8 nomi ai campi form in modo tale da non doverli pre-settare.
    Scusa se ti tedio in questo modo, ma non riesco proprio a venirne a capo..

    Comunque sia ti ringrazio, il tuo aiuto è prezioso...
    Peace,
    R.


  • ModSenior

    Dovresti ciclicare tutto e non usare questi nomi, ma campo_1 ad esempio in maniera tale che con un ciclo riesci a recuperare gli X campi, e fare le X query.