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

    Valori ripetuti nel database dopo inserimento con checkbox

    Salve a tutti e auguri passati.

    Ho un problema.
    Riporto di seguito il codice di interesse:
    insert_campagna.php
    codice:
    <?php 
    session_start(); // inizio sessione utente loggato
    require('connessionedb.php');
    
    if(isset($_POST['submit'])) {
    	$luogo=$_POST['luogo'];
    	$descrizione=$_POST['descrizione'];
    	$data=$_POST['data'];
    	
    	$query_campagna = mysql_query("INSERT INTO campagna_di_elaborazione SET
    					data='$data',
    					luogo='$luogo',
    					descrizione='$descrizione'", $db);
    	
    	$result = mysql_query("SELECT * FROM campagna_di_elaborazione", $db);
    	while ($record_campagna=mysql_fetch_array($result)) {				
    	$sensori=$_POST['sensori'];
    		foreach ($sensori as $value){ 
    		$insert_sensori = mysql_query("INSERT INTO operazione (id_sensore,id_campagna) VALUES 
    			   	('$value','$record_campagna[id]')", $db);
    			
    		} 
    	}
    ...
    
    <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" 
          	onsubmit="return (ver() && ControllaData() && checkscript() )">
    ...
    <td>Sensori utilizzati</td>
          <td>
          	<?php $result = mysql_query ("SELECT * FROM sensore",$db); ?>
         	<?php while ($records = mysql_fetch_array($result)) { ?>
            <input name="sensori[]" type="checkbox" id="sensori[]" value="<?php echo $records['id']; ?>" />
            <?php echo $records['marca']; ?> 
    
            <?php } ?>  
          
          </td>
    L'inserimento dei sensori tramite checkbox avviene perfettamente però il database si comporta in maniera strana e non ho trovato nessuna soluzione per questo.
    Ecco ciò che scrive nella tabella "operazioni" dopo l'inserimento di due campagne di elaborazione:

    id_sensore id_campagna
    1 [->] 1 [->]
    2 [->] 1 [->]
    3 [->] 1 [->]
    4 [->] 1 [->]
    5 [->] 1 [->]
    1 [->] 1 [->]
    2 [->] 1 [->]
    3 [->] 1 [->]
    1 [->] 2 [->]
    2 [->] 2 [->]
    3 [->] 2 [->]

    Cioè nella prima campagna vengono utilizzati 5 sensori mentre nella seconda campagna vengono utilizzati solo 3 sensori.
    Quindi quando vado ad inserire la seconda campagna e andrò a scrivere nella tabella "operazioni", il database mi riporta l'id della prima campagna (cosa che non voglio!).

    Il risultato finale dovrebbe essere questo:

    id_sensore id_campagna
    1 [->] 1 [->]
    2 [->] 1 [->]
    3 [->] 1 [->]
    4 [->] 1 [->]
    5 [->] 1 [->]
    1 [->] 2 [->]
    2 [->] 2 [->]
    3 [->] 2 [->]

    Potete darmi una mano?
    Grazie!

  2. #2
    Scusate.....volevo aggiungere che id_campagna e id_sensore sono due chiave esterne FOREIGN KEY

  3. #3
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    è sbagliato questo
    Codice PHP:
    $result mysql_query("SELECT * FROM campagna_di_elaborazione"$db); 
    che ti tira su tutte le righe, a te serve solo l'ultima inserita

  4. #4
    Originariamente inviato da bstefano79
    è sbagliato questo
    Codice PHP:
    $result mysql_query("SELECT * FROM campagna_di_elaborazione"$db); 
    che ti tira su tutte le righe, a te serve solo l'ultima inserita
    Mi stai dicendo di eliminare questa riga oppure modificarla in questa maniera:
    Codice PHP:
    $result mysql_query("SELECT id FROM campagna_di_elaborazione"$db); 
    In effetti non ho capito

  5. #5
    Potresti spiegarti meglio???

  6. #6
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    puoi usare MAX(id) nella select oppure se l'id è autoincrement puoi usare direttamente la funzione mysql_insert_id()

    quindi o
    Codice PHP:
    $result mysql_query("SELECT MAX(id) FROM campagna_di_elaborazione"$db); 
    oppure se auto increment e se ti serve solo l'id come mi sembra di vedere dal codice puoi eliminare la query
    Codice PHP:
    if(isset($_POST['submit'])) {
        
    $luogo=$_POST['luogo'];
        
    $descrizione=$_POST['descrizione'];
        
    $data=$_POST['data'];
        
        
    $query_campagna mysql_query("INSERT INTO campagna_di_elaborazione SET
                        data='
    $data',
                        luogo='
    $luogo',
                        descrizione='
    $descrizione'"$db);
            
                  
    $idmysql_insert_id();    
        
    $sensori=$_POST['sensori'];
            foreach (
    $sensori as $value){ 
            
    $insert_sensori mysql_query("INSERT INTO operazione (id_sensore,id_campagna) VALUES 
                       ('
    $value','$id')"$db);
                
            } 

  7. #7
    Perfetto! Funziona alla grande.

    Ammetto che non sapevo dell'esistenza della funzione mysql_insert_id().
    Mi conviene rivedere il manuale ufficiale di PHP.

    Grazie per la collaborazione

    Ciao

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