Spostare record da tabella a altra... help!

Ivano Cardassi

Nuovo Utente
23 Nov 2013
14
0
0
Magione (Italia), Italy
Buongiorno a tutti... premetto che ho letto il forum in lungo e in largo ma non riezsco ad integrare e farlo funzionare...

dunque ho 2 tabelle: 1° stock - 2° usato

la tabella stock ha 9 campi
la tabella usato ha 12 campi (i 9 campi della tabella stock uguali + altri 3)

la necessità è di copiare un record dalla tabella stock alla tabella usato.
premetto come ho strutturato il codice:

l'id mi serve per selezionare il record per poi rimuoverlo
carica i dati inserimenti dalla tabella stock
scrive gli stessi dati sulla tabella usato
cancella dalla tabella stock l'id scelto...

ma non funge...
ho provato anche ad inserire select from *
ma non funge uguale...


posto il codice:
PHP:
$id = intval($_REQUEST['id']);
$Marca = $_REQUEST['Marca'];
$Modello = $_REQUEST['Modello'];
$Allestimento = $_REQUEST['Allestimento'];
$Tipo = $_REQUEST['Tipo'];
$Colore = $_REQUEST['Colore'];
$Accessori = $_REQUEST['Accessori'];
$Alim = $_REQUEST['Alim'];
$Km = $_REQUEST['Km'];
$Anno = $_REQUEST['Anno'];
$Rif = $_REQUEST['Rif'];
$Prop = $_REQUEST['Prop'];
$Vendita = $_REQUEST['Vendita'];
$Targa = $_REQUEST['Targa'];
$Carico = $_REQUEST['Carico'];
$Ubi = $_REQUEST['Ubi'];
$Soc = $_REQUEST['Soc'];

include 'conn.php';

$sql = "insert into usato(Marca,Modello,Allestimento,Tipo,Colore,Accessori,Alim,Km,Anno,Rif,Prop,Vendita,Targa,Carico,Ubi,Soc) values('$Marca','$Modello','$Allestimento','$Tipo','$Colore','$Accessori','$Alim', '$Km', '$Anno','$Rif', '$Prop','$Vendita', '$Targa','$Carico','$Ubi','$Soc')";
$sql = "delete from stock where id=$id";
$result = @mysql_query($sql);
if ($result){
	echo json_encode(array('success'=>true));
} else {
	echo json_encode(array('msg'=>'Some errors occured.'));
}
?>
 
In primis puoi effettuare la copia del dato senza necessariamente farti passare tutti quei parametri, ti basta semplicemente l'id e i 3 campi aggiuntivi che non sono presenti nella tabella stock:

PHP:
$id = intval($_REQUEST['id']);

#> Provo ad Ipotizzare che i 3 campi extra siano "carico", "Ubi" e "Soc", se così non fosse, modificali tu di conseguenza.
$Carico = $_REQUEST['Carico'];
$Ubi = $_REQUEST['Ubi'];
$Soc = $_REQUEST['Soc']; 

#> Nella dichiarazione ho aggiunto anche il campo id, che in teoria dovresti avere identico da entrambe le parti: rimuovilo se così non fosse
$sql = "insert into usato(id, Marca,Modello,Allestimento,Tipo,Colore,Accessori,Alim,Km,Anno,Rif,Prop,Vendita,Targa,Carico,Ubi,Soc) 
    select id, Marca,Modello,Allestimento,Tipo,Colore,Accessori,Alim,Km,Anno,Rif,Prop,Vendita,Targa, '$Carico' as Carico, '$Ubi' as Ubi, '$Soc' as Soc from stock where id = $id";

if (!mysql_query($sql)) {
    echo 'Errore Mysql: (', mysql_errno(), ') ', mysql_error();
}

$sql = "delete from stock where id=$id";

if (!mysql_query($sql)) {
    echo 'Errore Mysql: (', mysql_errno(), ') ', mysql_error();
}

Secondariamente, il problema del delete è causato dal fatto che per un impostazione di sicurezza non è possibile eseguire più di un unica query tramite la funzione mysql_query(), di conseguenza devi fare come nel mio esempio affinché funzioni (ed è il motivo per cui eliminando la query di delete il tutto sembra funzionare).

Terzo, la tua applicazione presenta buchi di sicurezza molto preoccupanti che possono facilmente portare ad attacchi di tipo SQL Injection.
Una volta che sei riuscito a far funzionare lo script ti consiglio di sanitizzare i dati che ricevi tramite l'uso di filter_var() e, inoltre, -se possibile- di convertire le funzioni mysql_* in mysqli_* (attento che non sono proprio identiche, non basta cambiare solo il nome) questo perché la prima estensione è omai deprecata in quanto obsoleta.
 

Discussioni simili