Trasferire il record lavorato in altra tabella

Max61

Utente Attivo
2 Mar 2014
654
3
18
Buonasera, sono alle prese con un problema di trasferimento dati da una tabella ad un altra.
Mi spiego, ho la tabella A dove ho già i record con alcuni dati, seleziono un record e aggiungo informazioni, quando lo salvo vorrei che lo facesse nella tabella B, ho trovato in rete alcuni esempi, ma non riesco a farli funzionare, l'unico che funziona mi trasferisce tutti i record nella seconda tabella, mentre a me servirebbe che mi trasferisse soltanto quello che sto lavorando.
Allego codice utilizzato:
PHP:
$query = "INSERT IGNORE INTO tbl_rilevati(idrilevati, PROD, M, V, Q, PP, PS)
			SELECT id, PROD, M, V, Q, PP, PS
			FROM tbl_darilevare ON DUPLICATE KEY UPDATE idrilevati = (idrilevati)";
Successivamente o simultaneamente avrei la necessità di cancellare il record trasferito nella tabella B dalla tabella A.

Mi sapete aiutare?
Grazie, Max61
 

marino51

Utente Attivo
28 Feb 2013
2.741
141
63
Lombardia
con MS SQL faccio così,
Codice:
select count(*) from tabella     
select count(*) from tabella_2014

DELETE FROM tabella
OUTPUT DELETED.*        
INTO tabella_2014  
WHERE iv_year=2014      

select count(*) from tabella     
select count(*) from tabella_2014
il comando sposta le righe da una tabella all'altra
 

Max61

Utente Attivo
2 Mar 2014
654
3
18
con MS SQL faccio così,
Codice:
select count(*) from tabella     
select count(*) from tabella_2014

DELETE FROM tabella
OUTPUT DELETED.*        
INTO tabella_2014  
WHERE iv_year=2014      

select count(*) from tabella     
select count(*) from tabella_2014
il comando sposta le righe da una tabella all'altra
Scusami forse non ho capito bene, ma non mi funziona e comunque ho bisogno di spostare il record a video, quello che sto lavorando.
IL codice che ho postato me li sposta tutti, forse c'è da correggere qualcosa la.

Ciao e grazie
 

Max61

Utente Attivo
2 Mar 2014
654
3
18
Scusami forse non ho capito bene, ma non mi funziona e comunque ho bisogno di spostare il record a video, quello che sto lavorando.
IL codice che ho postato me li sposta tutti, forse c'è da correggere qualcosa la.

Ciao e grazie

Ho provato ancora la tua query, sicuramente sbagliando qualcosa perchè mi da questo errore:
Notice: Undefined index: PROD in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 18

Notice: Undefined index: M in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 19

Notice: Undefined index: V in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 20

Notice: Undefined index: Q in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 21

Notice: Undefined index: PP in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 22

Notice: Undefined index: PS in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 23

Notice: Undefined variable: id in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 34
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select count(*) from tbl_rilevati DELETE FROM tbl_darilevare OUTPUT DELETED.*' at line 2

La query usata è questa (ma non vedo l'insert):
PHP:
$query = "select count(*) from tbl_darilevare     
	select count(*) from tbl_rilevati

	DELETE FROM tbl_darilevare
	OUTPUT DELETED.*        
	INTO tbl_darilevare  
	WHERE id='$id'      

	select count(*) from tbl_darilevare     
	select count(*) from tbl_rilevati";
Grazie ancora per la pazienza
Max61
 

marino51

Utente Attivo
28 Feb 2013
2.741
141
63
Lombardia
DELETE FROM tbl_darilevare
OUTPUT DELETED.* INTO tbl_rilevati
WHERE id='$id'

output è di fatto la insert nella nuova tabella,
ovvero cancella da "tbl_darilevare" e inserisce (output) nella "tbl_rilevati"
agendo sui record della condizione where

tu hai detto al sistema di cancellare e di inserire nella stessa tabella ...

le select count... a me servono per controllare il lavoro finito, a te forse non servono ed in ogi caso non sono parte della delete ...
 
Ultima modifica:

Max61

Utente Attivo
2 Mar 2014
654
3
18
DELETE FROM tbl_darilevare
OUTPUT DELETED.* INTO tbl_rilevati
WHERE id='$id'

output è di fatto la insert nella nuova tabella,
ovvero cancella da "tbl_darilevare" e inserisce (output) nella "tbl_rilevati"
agendo sui record della condizione where

tu hai detto al sistema di cancellare e di inserire nella stessa tabella ...

le select count... a me servono per controllare il lavoro finito, a te forse non servono ed in ogi caso non sono parte della delete ...

Scusami ma mi continua a dare errore:

Ti posto tutta la pagina dell'insert, probabilmente l'errore sta da un altra parte:
PHP:
<?php
     // connessione al database
include('Connessione.php');

	 $db= 'tbl_rilevati';
		
     $db = mysql_connect($host, $user, $password) or die ("Impossibile connettersi al server");
	 echo " ";
				
     mysql_select_db($database, $db) or die ("impossibile connettersi al database");
	 echo " ";
	 
	$PROD = $_POST['PROD'];
	$M = $_POST['M'];
	$V = $_POST['V'];
	$Q = $_POST['Q'];
	$PP = $_POST['PP'];
	$PS = $_POST['PS'];
	
	$query = "select count(*) from tbl_darilevare     
	select count(*) from tbl_rilevati

	DELETE FROM tbl_darilevare
	OUTPUT DELETED.* INTO tbl_rilevati
	WHERE id='$id'";      
	
   // invio la query
   $result = mysql_query($query);

   // controllo l'esito
   if (!$result) {
				die("<span style=\"color:red: font-size: 20pt\"Errore nell'inserimento. Riprova...</span>" . mysql_error());
   }
   echo "<span style=\"color: yellow; font-size: 24pt\"><strong><i>Calcolo inserito correttamente. </span>";
      header('location:../views/VisualizzaDati.php');//reindirizza alla pag
?>
L'errore:
Notice: Undefined index: PROD in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 18

Notice: Undefined index: M in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 19

Notice: Undefined index: V in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 20

Notice: Undefined index: Q in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 21

Notice: Undefined index: PP in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 22

Notice: Undefined index: PS in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 23

Notice: Undefined variable: id in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 30
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select count(*) from tbl_rilevati DELETE FROM tbl_darilevare OUTPUT DELETED.*' at line 2


Ciao
Max61
 

marino51

Utente Attivo
28 Feb 2013
2.741
141
63
Lombardia
ok... mysql

PHP:
    $query = "
      START TRANSACTION;
      set @id := ".$id.";
      INSERT INTO tbl_rilevati select * from tbl_darilevare where id=@id;
      DELETE FROM tbl_darilevare WHERE id=@id;
      COMMIT;
    ";
     
   // invio la query 
   $result = mysql_query($query);
 

Max61

Utente Attivo
2 Mar 2014
654
3
18
ok... mysql

PHP:
    $query = "
      START TRANSACTION;
      set @id := ".$id.";
      INSERT INTO tbl_rilevati select * from tbl_darilevare where id=@id;
      DELETE FROM tbl_darilevare WHERE id=@id;
      COMMIT;
    ";
     
   // invio la query 
   $result = mysql_query($query);

Scusami, ma ancora non ci siamo, infatti mi restituisce questo errore:

Notice: Undefined index: PROD in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 18

Notice: Undefined index: M in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 19

Notice: Undefined index: V in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 20

Notice: Undefined index: Q in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 21

Notice: Undefined index: PP in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 22

Notice: Undefined index: PS in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 23

Notice: Undefined variable: id in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 27
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set @id := ; INSERT INTO tbl_rilevati select * from tbl_darilevare where i' at line 2

Non so come risolverlo.
Ciao
Max61
 

marino51

Utente Attivo
28 Feb 2013
2.741
141
63
Lombardia
potresti cominciare a sistemare questi errori,
Notice: Undefined index: PROD in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 18
Notice: Undefined index: M in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 19
Notice: Undefined index: V in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 20
Notice: Undefined index: Q in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 21
Notice: Undefined index: PP in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 22
Notice: Undefined index: PS in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 23
Notice: Undefined variable: id in C:\xampp\htdocs\Sopravitto\views\Inserisci.php on line 27
il $_POST non viene passato a "Inserisci.php" o i nomi dei campi sono diversi da quelli che hai inserito
e la variabile $id non è definita
 

Max61

Utente Attivo
2 Mar 2014
654
3
18
potresti cominciare a sistemare questi errori,

il $_POST non viene passato a "Inserisci.php" o i nomi dei campi sono diversi da quelli che hai inserito
e la variabile $id non è definita

Buongiorno, e grazie per la pazienza, i campi sono gli stessi in tutte le pagine e nel DB, il problema credo che sia su come l'ho organizzato, cerco di spiegarmi:
vado in visualizzazione di tutti i record (nell'edit), seleziono il record da lavorare e lo modifico con la query Update, successivamente gli passo la pagina di insert, secondo me è qui il problema, quando gli passo l'insert, è come se non avesse a più disposizione i dati dei campi con $_POST, va rivisto tutto.
Infatti se faccio solo l'edit mi modifica i record perfettamente, dovrei poi passarli all'insert modificati.

Con la speranza di essermi spiegato ti invio la pagina di edit dove secondo me sta l'errore.
Ciao
Max61
Vedi l'allegato Edit_Dati.zip
 

marino51

Utente Attivo
28 Feb 2013
2.741
141
63
Lombardia
lo script è impossibile da leggere ...
ti evidenzio solo la riga seguente,
HTML:
&nbsp;<form><input type="submit" name="submit" value="Salva modifiche"></form>
passa solo il bottone, non il set dei dati ....
 

Max61

Utente Attivo
2 Mar 2014
654
3
18
lo script è impossibile da leggere ...
ti evidenzio solo la riga seguente,
HTML:
&nbsp;<form><input type="submit" name="submit" value="Salva modifiche"></form>
passa solo il bottone, non il set dei dati ....


Ciao e scusa se non ti ho risposto prima, ma durante il fine settimana ho avuto molto da fare.
Come ti dicevo nel post precedente il problema secondo me stava nella pagina di Edit che ti ho inviato, infatti oggi sono riuscito a passare i dati modificati alla query di insert, e una volta andato a buon fine l'nsert lo cancello dalla'archivio di partenza.
Allego la parte di codice di Update, insert, delete:
PHP:
// salva i dati nel database
mysql_query("UPDATE tbl_darilevare SET PROD='$PROD', M='$M', V='$V', Q='$Q', PP='$PP', PS='$PS' WHERE id='$id'")
or die(mysql_error());	
 
	$PROD = $_POST['PROD'];
	$M = $_POST['M'];
	$V = $_POST['V'];
	$Q = $_POST['Q'];
	$PP = $_POST['PP'];
	$PS = $_POST['PS'];
	

	$query = "INSERT INTO tbl_rilevati (PROD, M, V, Q, PP, PS)
			VALUES ('$PROD', '$M', '$V', '$Q', '$PP', '$PS')";

   // invio la query
   $result = mysql_query($query);

   // controllo l'esito
   if (!$result) {
				die("<span style=\"color:red: font-size: 20pt\"Errore nell'inserimento. Riprova...</span>" . mysql_error());
   }
   
   // elimina la voce
$resultDelete = mysql_query("DELETE FROM tbl_darilevare WHERE id=$id")
or die(mysql_error());

   header('location:../views/VisualizzaDati.php');//reindirizza alla pag
Ti ringrazio per la pazienza

Max61
 

marino51

Utente Attivo
28 Feb 2013
2.741
141
63
Lombardia
se le due tabelle "darilevare" e "rilevati", sono uguali,
io userei una sola query, che fa l'insert e la delete contemporaneamente,
perchè in caso di errore il db rimane "consistente"

nella tabella "rilevati" importerei lo stesso "id" della tabella "darilevare" senza usare l'incremento automatico

poi... va bene tutto ma, per me, logica e sicurezza sono importanti

PHP:
$query = "
START TRANSACTION; 
INSERT INTO tbl_rilevati select * from tbl_darilevare where id=".$id."; 
DELETE FROM tbl_darilevare WHERE id=".$id."; 
COMMIT;
";
$result = mysql_query($query);