eliminare file e record db

  • Creatore Discussione Creatore Discussione ntoflip
  • Data di inizio Data di inizio

ntoflip

Utente Attivo
26 Ago 2008
50
0
0
Ciao a tutti, come da titolo ho dei dubbi sulla procedura sicura per eliminare dei record dal database e dei file immagine ad essi collegati.

Ho del codice simile al seguente:

Codice:
// $prodotti è un array contenente gli id degli elementi che intendo cancellare 
foreach ($prodotti as $key => $value) {
	
	// 1 cancello il record del prodotto dal db
	$qry1 = "DELETE FROM tabella_prodotti WHERE id = '".$value."'";
	$result1 = mysql_query($qry1, $connessione);
	
	// 2 ottengo le foto relative a quel prodotto
	$qry2 = "SELECT * FROM tabella_foto WHERE idprodotto = '".$value."'";
	$result2 = mysql_query($qry2, $connessione);
	while ($row = mysql_fetch_assoc($result2)) {
		// 3 per ogni foto cancello il file e la sua miniatura
		unlink($row['path']);
		unlink($row['pathm']);
		// 4 elimino la riga della foto
	        $qry3 = "DELETE FROM tabella_foto WHERE id = '".$row['id']."'";
	        $result3 = mysql_query($qry3, $connessione);
	}
	
}

Come faccio per effettuare le operazioni solo se tutte non incontrano problemi?
 
che tipo di problemi intendi? Potrebbe mancare o il record o il file?
 
Intendi il problema di eseguire le attività in modalità transazionale, tutte o nessuna, ovvero cancelli record e file o nessuno dei due?
Ciao, Ciro
 
Ciao, dunque quello che chiedi sono le transazioni.

A quanto ho capito, nel tuo caso c'è una operazione su db e una su file.
A tal proposito puoi usufruire di commit e roolback per gestire le transazioni sul db sql mentre per il file devi fare la verifica manuale che questo sia stato eliminato.

In altre parole elimini il file ed il record; poi verifichi che il file ed il recordo non esistono, se ok fai commit viceversa fai roolback; attenzione, però, per il commit\rooblack vale solo per il db ma non per l'eliminazione fisica dei file. Secondo me ti conviene, gestire la transazione manualemnte con una serei di if:
cancelli il record
cancelli il file,
se il file è correttamente cancellato fai commit sul db della cancellazione viceversa roolback.

Di seguito le info per gestire commit e roolback con php:
http://www.devarticles.com/c/a/MySQL/Using-Transactions-with-MySQL-4.0-and-PHP/
http://www.databasejournal.com/features/mysql/article.php/10897_3382171_1/Transactions-in-MySQL.htm
http://www.sastgroup.com/tutorials/una-semplice-transazione-in-php

Ciao, Ciro
 

Discussioni simili