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

    foreach e problema con inserimento dati nel DB

    Ciao,
    in una pagina ho diversi form con i rispettivi input. Tutti questi form puntano poi ad un unico file process.php che esegue un foreach e poi la query per inserire i dati in varie tabelle mysql.

    Codice PHP:
    foreach( $_POST as $key => $value ) {     
    $sql   "INSERT INTO tbl_".$key."(nome_".$key.") VALUES ('$value')";$result dbQuery($sql);

    Al primo submit, ho un unico record inserito nel db e così dovrebbe essere per tutti, in realtà al secondo submit me ne trovo 2 uguali inseriti, al terzo 3, al quarto 4 e così via...

    perchè?

    ho provato a svuotare il contenuto di $key e $value con unset() alla fine dell'inserimento, ma non cambia nulla.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Facci vedere il codice della pagina con i form.

  3. #3
    Gli input sono tutti uguali, cambia solo il name.
    Cosa voglio fare: caricare dai dati nel database passandoli via POST e utilizzando ajax per processarli senza dover ricaricare la pagina

    Codice PHP:
    <input type="text" name="comune" id="comune" value="" placeholder="Aggiungi Comune" form="myform2">      <input type="submit" name="submit" value="Submit" class="btn btn-sm btn-success" form="myform2"
    Controllando con
    Codice PHP:
    print_r($_POST); 
    quello che mi arriva via POST a process.php, è sempre e solo un valore, quello passato via POST al submit, per esempio:
    Codice PHP:
     Array ( [comune] => Venezia 
    anche se clicco ripetutamente sul submit

    Però nel DB mi ritrovo, come ho già detto, al primo submit un solo valore; al secondo submit il valore viene scritto 2 volte, poi 3 ecc. ecc.

    può dipendere dal javascript che controlla il passaggio delle variabili? Ma dovrei vedere questo malfunzionamento con print_r o sbaglio?
    Comunque questo è il codice:

    codice:
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>	<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
        <script type="text/javascript">
    	$(document).ready(function(){
    		$(".formValidation").validate({
    			debug: false,
    			rules: {
    				name: "required",
    				email: {
    					required: true,
    					email: true
    				}
    			},
    			messages: {
    				name: "Please let us know who you are.",
    				email: "A valid email will help us get in touch with you.",
    			},
    			submitHandler: function(form) {
    				// do other stuff for a valid form
    				$('.formValidation').on('submit', function () {
        $.post('process.php', $(this).serialize(), function(data) {
            $('#results').html(data);
        });
    })
    			}
    		});
    	});
    	</script>

  4. #4
    E' difficilissimo capire cosa stai facendo senza una pagina intera che mostri tutto nel suo complesso, ma il primo passo è semplicissimo: se ciò che arriva via POST non è quello che ti aspetti, allora di certo il problema è lato client, in html o js, è php non potrà mai risolvere un problema che non è in php...

    Io verificherei l'html, controllando che tutti i campi input abbiano name e id (anche l'id conta) TUTTI DIVERSI, e verificando che cosa restituisce la serialize() PRIMA di inviarlo con post()...
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  5. #5
    Come faccio a verificare il contenuto di serialize() prima di POST?

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Stampandola per esempio a video con un alert()

  7. #7
    Non avendo conoscenze di jquery, ajax etc. ho preso uno scriptino e adattato al form per vedere l'output di serialize().
    codice:
    $(document).ready(function(){             $("#myform2").submit(function(){
                     var querystring = $(this).serialize();
                     $('#result').html(querystring);
                     return false;
                     });
            });

    Il risultato è quello che dovrebbe essere, cioè "comune=venezia" esattamente come POST mi da con print_r(): Array ( [comune] => venezia)

    é vero che ho sostituito lo script con un altro, quindi non so se va bene lo stesso
    Comunque questa è la pagina semplificata con un unico form con cui sto facendo le prove e in ogni caso mi da il problema:

    codice:
    <?phprequire_once "library/config.php";
    ?>
    <!DOCTYPE html>
    <html lang="it">
    	<head>
    		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    		<meta charset="utf-8" />
    		
    <link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css" rel="stylesheet">
    
    
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    	<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
        <script type="text/javascript">
    
    
    $(document).ready(function(){
    		$(".formValidation").validate({
    			debug: false,
    			rules: {
    				name: "required",
    				email: {
    					required: true,
    					email: true
    				}
    			},
    			messages: {
    				name: "Please let us know who you are.",
    				email: "A valid email will help us get in touch with you.",
    			},
    			submitHandler: function(form) {
    				// do other stuff for a valid form
    				$('.formValidation').on('submit', function () {
        $.post('process.php', $(this).serialize(), function(data) {
            $('#results').html(data);
           });
    })
    			}
    		});
    	}); 
    	</script>
    
    
    </head>
    	<body>
    
    
    
    
    		<div class="main-container" id="main-container">
    			<div class="main-content">
    				<div class="page-content">
    				  <div class="page-content-area">
    						<div class="page-header">
    							<h1>
    							<br >
    							</h1>
    						</div>
    
    
    						<div class="row">
    							<div class="col-xs-12">
    								
    
    
    <form id="frmAddProduct" class="formValidation" action="processProduct.php?action=addProduct" method="post" enctype="multipart/form-data" name="frmAddProduct"></form>
    <form id="myform" class="formValidation" name="myform" action="" method="post"></form>
    <form id="myform2" class="formValidation" name="myform2" action="" method="post"></form>
    <table class="table table-striped">
    
    
     <tr> 
     <td>
    <div class="col-xs-12 col-sm-4">
    											<div class="widget-box">
    												
    
    
    												<div class="widget-body">
    													<div class="widget-main">
    														<div>
    															<label for="form-field-select-1">Comune</label>
                                    <select name="comune" class="form-control" id="form-field-select-1" form="frmAddProduct">
                                      <option value="">Seleziona...</option>
    													<?php 		
                                 $comune = "SELECT * FROM tbl_comune ORDER BY nome_comune ASC";
                                     $result_comune = dbQuery($comune); 
                                       if (dbNumRows($result_comune) > 0) {
                                          while($row_comune = dbFetchAssoc($result_comune)) {
    	                                      extract($row_comune);
                                         ?>   
    																
    																<option value="<?php echo $id_comune; ?>"><?php echo $nome_comune; ?></option>
    																 <?php
                                       }
                                      } else {
                                    ?>
                                      <option value="">Non ci sono dati</option>
    															   <?php
                                     }
                                     ?>
                                  </select>
    														</div>
    
    
    													<hr>	
    											<div class="widget-body">
    												<div class="widget-main">
    													<div> 
                           	     
               <input type="text" name="comune" id="comune" value="" placeholder="Aggiungi Comune" form="myform2">  
    	            <input type="submit" name="submit" value="Submit" class="btn btn-sm btn-success" form="myform2"> 
                  <p id="result"></p>
           <div id="results"></div>
    												</div>
    											</div>
    										</div>
    										 </div>
    											 </div>
    										     </div>
                               </div>
    
    
    
    
    </td>							  
      </tr>
        </table>
     
                   
                  </div><!-- /.col -->
    						</div><!-- /.row -->
    					</div><!-- /.page-content-area -->
    				</div><!-- /.page-content -->
    			</div><!-- /.main-content -->
         </div><!-- /.main-container -->
      
    	</body>
    </html>
    il file process.php non fa altro che eseguire la query:

    codice:
     foreach( $_POST as $key => $value ) {     
    $sql   = "INSERT INTO tbl_".$key."(nome_".$key.") VALUES ('$value')";
    $result = dbQuery($sql); 
    
    }

  8. #8
    Allora, l'html che hai scritto è sbagliato...

    I tag <input> <select> e simili devono essere DENTRO a un tag <form>, mentre qui non solo si trovano al di fuori di un qualsiasi tag <form>, ma di tag <form> ce ne sono almeno 3 diversi tutti chiusi su se stessi senza niente dentro...

    Così non potrà mai funzionare nulla!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  9. #9
    Quote Originariamente inviata da Shores Visualizza il messaggio
    Allora, l'html che hai scritto è sbagliato...

    I tag <input> <select> e simili devono essere DENTRO a un tag <form>, mentre qui non solo si trovano al di fuori di un qualsiasi tag <form>, ma di tag <form> ce ne sono almeno 3 diversi tutti chiusi su se stessi senza niente dentro...

    Così non potrà mai funzionare nulla!
    Non è vero. I moduli <form> non possono essere annidati l'uno dentro l'altro, l'html non lo permette ma html5 ti da a disposizione una specia di funzione che si chiama proprio "form" che ti permette di creare uno stratagemma per aggirare questo limite. Non è quello il problema

  10. #10
    Invece ho ragione io:

    http://caniuse.com/#search=form%20attribute

    Il che ti dimostra che form non è affatto un attributo supportato da tutti i browser, quindi l'html che hai scritto non funzionerà ovunque.

    Comunque, mi sono stufato, sto cercando di essere d'aiuto e non mi va di essere corretto quando ho invece ragione.

    Saluti.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

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.