Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    HELP: Form con invio multiplo di record a database MySQL

    Cari ragazzi,
    vi chiedo una mano per risolvere questo problema: ho un form PHP per inserire dati in un database Mysql. Posso inserire uno o più record a seconda di quanti se ne scelga nella pagina di inserimento. Però la pagina che gestisce l'inserimento non funziona... dove sbaglio? Grazie per l'aiuto!!! Eccovi il prototipo del codice:
    LATO CLIENT:

    Codice PHP:
    <html>
    <head>
    <title>APPLICAZIONE LATO CLIENT(pagina index.php)</title>
    </head>
    <?php
    $host
    ='localhost';
    $user='xxx';
    $password='xxx';
    $database='xxx'
    $db=mysql_connect($host,$user,$password) or die('no connessione server');
    mysql_select_db($database,$db) or die('connessione database impossibile');
    $numtransazioni=$_REQUEST['ntrans'];
    ?>
    <body>


    <form name="myform"action="index.php">
    <span> Transazioni da inserire? </span>
        <select name="ntrans" onchange="myform.submit();"> 

            <option value="1" selected> 1 </option>
            <option value="2"> 2 </option>
            <option value="3"> 3 </option>    
        </select>
    </form>
    <div id="formtransazioni">
    <form method= \"POST\" action="insert.php">
    <?php
    if ($numtransazioni==null)
        
    $numtransazioni=1;
    print 
    "<input name=\"numtransazioni\" type=\"hidden\" value=$numtransazioni />\n";

    for(
    $indice1=1$indice1<=$numtransazioni$indice1++ )
    {
            
       print 
    "<input name=\"importo$indice1\" type=\"text\" size=\"6\" />€ ";
       print 
    "<select name=\"tipo$indice1\">\n";
       print 
    "<input name=\"note$indice1\" type=\"text\" />";
        }
    print 
    "

    <input type=\"submit\" value=\"inserisci\" /></p>"
    ;
    ?>

    </form>

    </div>

    </body>
    </html>

    LATO SERVER

    Codice PHP:
    <?php
    $host
    ='xxx';
    $user='xxx';
    $password='xxx';
    $database='xxx'

    $numtransazioni=$_REQUEST['numtransazioni'];
    $db=mysql_connect($host,$user,$password) or die('no connessione server');
    mysql_select_db($database,$db) or die('connessione database impossibile');

    for(
    $i=1$i<=$numtransazioni$i++ )
    {        
                    
            
    $query="insert into transazioni" 
            
    "(importo,note) " .
            
    "VALUES('" .        
            
    $_POST['importo.$i'] ."','" .        
            
    $_POST['note.$i']')";
            
            if (!mysql_query($query,$db))
            {
               print "errore inserimento!";}
                }
    else
    { print "inserimento eseguito!";}

    }    
        
    mysql_close($db); 

    header("Location: /index.php");

    ?>

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Intanto una cosa, la prossima volta spiega anche cosa vuol dire "non funziona": ti da errore? Quale? Ga un comportamento diverso da quello che ti aspetti? Quale? e via dicendo.
    "non funziona" da solo non significa niente.

    Ad ogni modo, in questo caso è abbastanza semplice, non si possono inviare contemporaneamente 2 form, o ne invii uno o invii l'altro, quindi rivedi la logica del tuo sistema, perché da come sei messo adesso non ne esci.

    Tu invii il form "myform" e allo script arrivano solo i dati di "myform", quindi niente $_REQUEST['numtransazioni'], niente $_POST['importo.$i'] e via discorrendo.
    Tra l'altro il secondo form non ha neanche un nome?

    Perché alcuni parametri li cerchi di prendere con $_POST (giusto) e altri con $_REQUEST (da evitare visto che lo sai con quale metodo invii i dati)?

  3. #3
    Prima di tutto, grazie per l'attenzione. Secondo: hai ragione, devo essere più preciso: specifico che l'errore che mi viene mandato al submit del client è HTTP 500, quindi si tratta certamente di errore di programmazione tout-court.
    Nel client sono presenti 2 form perchè il primo 'myform' disegna sulla pagina web tanti campi di input quanti sono i record che voglio memorizzare nel database, pertanto ricarica semplicemente la pagina del client che viene ridisegnata.
    Il secondo form senza nome è quello che chiama il codice PHP che gestisce l'inserimento nel DB.
    Nella mia idea $numtransazioni è il parametro che indica quanti sono i record da aggiungere al DB che attraverso un ciclo questi vengono immessi. Il problema è che non riesco ad esprimere il nome con indice dei campi (es. 'importo1','importo2', etc.). Devo forse usare gli array?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Hai notato nel tuo codice come vengono colorati questi?

    $_POST['importo.$i']
    $_POST['note.$i']

    Secondo quanto hai scritto vengono cercati all'interno dell'array $_POST gli indici importo.$i e note.$i
    In cui $i non è la variabile $i del ciclo che assume i valori 1, 2, 3... ma è la stringa $i

    Versione corretta
    $_POST['importo'.$i]
    $_POST['note'.$i]

    Ad ogni modo se hai un errore "500 internal server error", non è causato da questo fatto, che comunque devi sistemare come ti ho detto.


    EDIT: tra l'altro anche il resto del codice risulta essere una stringa, riveri gli apici, dopo $_POST['note.$i'] l'hai chiuso male.

  5. #5
    Ti ringrazio molto: c'erano degli errori che ora ho sistemato. In particolare, non avevo chiuso con le "" il value del tag HIDDEN con name "numtransazioni".
    Ora tutto funziona: qui sotto posto il codice corretto. Tuttavia c'è una cosa che non capisco: insert.php funziona solo se estraggo i vari valori con $_REQUEST['qcs'], ma non con $_POST['qcs'], altrimenti mi becco l'errore http 500... chissà perché.

    GRAZIE DAVVERO!!!

    LATO CLIENT - pagina index.php:

    Codice PHP:
    <html> 
    <head> 
    <title>APPLICAZIONE LATO CLIENT</title> 
    </head> 
    <?php 
    $host
    ='xxx'
    $user='xxx'
    $password='xxx'
    $database='xxx';  
    $db=mysql_connect($host,$user,$password) or die('no connessione server'); 
    mysql_select_db($database,$db) or die('connessione database impossibile'); 
    $numtransazioni=$_REQUEST['ntrans']; 
    ?> 

    <body> 

     

    <form name="myform"action="index.php"> 
    <span> Transazioni da inserire? </span> 
        <select name="ntrans" onchange="myform.submit();">  
        <option value="0" selected> ---seleziona---</option>
            <option value="1" > 1 </option> 
            <option value="2"> 2 </option> 
            <option value="3"> 3 </option>     
        </select> 
    </form> 
    <div id="formtransazioni"> 
    <form method= \"POST\" action="insert.php"> 
    <?php 
    if ($numtransazioni==null
        
    $numtransazioni=1
    print 
    "<input name=\"numtransazioni\" type=\"hidden\" value=\"$numtransazioni\"  />\n"

    for(
    $indice1=1$indice1<=$numtransazioni$indice1++ ) 

             
       print 
    "<input name=\"importo$indice1\" type=\"text\" size=\"6\" />€ "
       print 
    "<select name=\"tipo$indice1\">\n"
       print 
    "<input name=\"note$indice1\" type=\"text\" />"
        } 
    print 
    "

    <input type=\"submit\" value=\"inserisci\" /></p>"

    ?> 
     
    </form> 

    </div> 

    </body> 
    </html>

    LATO SERVER - pagina insert.php


    Codice PHP:

    <html>
    <head> 
    <title>APPLICAZIONE LATO SERVER</title> 
    </head> 
    <body>

    <?php

    $host
    ='xxx'
    $user='xxx'
    $password='xxx'
    $database='xxx'

    $numtransazioni=$_REQUEST['numtransazioni'];
    $db=mysql_connect($host,$user,$password) or die('no connessione server');
    mysql_select_db($database,$db) or die('connessione database impossibile');


    for(
    $i=1$i<=$numtransazioni$i++ )
    {        
            

            
            
    $query="insert into transazioni" 
            
    "(importo,note) " .
            
    "VALUES('" .        
            
    $_REQUEST['importo'.$i] . "','" 
            
    $_REQUEST['note'.$i] . "')";
                
            if (!
    mysql_query($query,$db))
                print 
    "errore inserimento!";            
            ELSE
                print 
    "inserito record n $i";
        }

    mysql_close($db);
    </body>
    </html>
    ?>

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Nelle intestazioni dei form devi SEMPRE specificare name, method e action

    Nel primo ti manca il method, nel secondo ti manca il name, correggi ed usa $_POST invece che $_REQUEST

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 © 2024 vBulletin Solutions, Inc. All rights reserved.