2010-11-07 17 views
0

Toutes mes excuses à l'avance si cette question est malformé ou un peu épais, mais ici va ...supprimer l'entrée db après Délier

J'ai une forme php wh entrée de données de commentaires

Une partie traite w téléchargé des dossiers.

Il y a 3 cases à cocher pour trois fichiers possibles qui peuvent être téléchargés par ligne de table. Il y a 3 champs dans la base de données relatifs à ces téléchargements de fichiers possibles. Cochez les cases à cocher pour que les fichiers téléchargés correspondants soient dissociés. Ça fonctionne bien.

Voici mon puzzle. Comment supprimer/mettre à jour la bonne entrée dans la base de données correspondant au (x) fichier (s) non lié (s)?

Le problème est que les 3 cases à cocher sont nommées de la même manière dans le fichier html: 'delpic []'. En d'autres termes, les valeurs renvoyées en cochant les cases sont placées dans un tableau. C'est la clé de la gestion de la dissociation succinctement (je pense).

Si un seul fichier pour une ligne particulière doit être dissocié, comment l'application peut-elle «connaître» le champ correspondant dans la base de données mysql à mettre à jour?

Argghhh.

Tom

+1

s'il vous plaît s'abstenir de abrégeant inutilement régulièrement des mots anglais. tout le monde ne parle pas la même langue que vous. – stillstanding

+1

L'application ne sait rien. Il suffit d'exécuter l'algorithme ** que vous avez écrit **.Qu'est-ce qui vous empêche de remplir le nom de fichier en valeur de case à cocher? –

+0

Excuses aussi bien que pour les abréviations. – Tom

Répondre

0

Comment il « savoir » est que vous le dire dans votre script en utilisant la requête appropriée. Dites que vous avez un champ, 'file_names', dans la table de base de données, 'table', qui stocke les noms de fichiers uniques et tous vos fichiers dans un répertoire associé ont des noms uniques. Ensuite, quand vous faites quelque chose pour le fichier 'foo', vous allez interroger votre table et regarder la ligne qui a 'foo' dans si et faire quelque chose à la ligne de chapeau en utilisant le bon sql. comme supprimer cette ligne pour, par exemple.

$db = mysql_connect('YOUR_DB_ADDRESS','YOUR_DB_USER','YOUR_DB_PASS') or die("Database error"); 
mysql_select_db('YOUR_DB', $db); 

$SQL = 'DELETE FROM table WHERE file_names = "foo"'; 
mysql_query($SQL); 
+0

Oui, mais votre requête SQL supprime la ligne entière. Je voudrais faire une opération de mise à jour. Mon exemple pose une table avec 3 champs pour enregistrer les urls des fichiers téléchargés. Pour modifier un fichier téléchargé, il faut le supprimer, le télécharger de nouveau et mettre à jour l'URL qui enregistre l'emplacement du fichier. L'utilisation de cases à cocher dans un formulaire pour choisir le fichier déjà téléchargé à remplacer semble être une impasse. Il n'y a aucun moyen évident de passer de l'opération de dissociation à l'URL désormais orpheline. – Tom

0

Dans votre formulaire, vous utilisez des tableaux. Je devine que ces tableaux contiennent le nom des fichiers que vous voulez supprimer, comme ci-dessous?

<?php 
array => (
    [0] => 'file1.gif', 
    [1] => 'file2.gif', 
    [2] => 'file3.jpg' 
    // ... 
) 
?> 

Je vous recommande personnellement que vous utilisez les clés primaires de la base de données ici au lieu des noms de fichiers (votre table de DB ne ont une clé primaire, non?), Puis allez chercher les lignes de la base de données. De cette façon, vous savez que les lignes existent, et vous serez en mesure d'obtenir les noms de fichiers de la table.

En ce qui concerne la suppression réelle, si votre base de données prend en charge les transactions, alors je serais plus enclin à le faire dans l'autre sens et supprimer les lignes avant que les fichiers, avec le pseudo-code suivant:

  1. Démarrer une transaction
  2. supprimer la ligne de la base de données
  3. tentative de supprimer le fichier
  4. si (ligne supprimée) et (fichier supprimé)
  5. commit transaction
  6. autre
  7. Annulez transaction et erreur rapport
+0

Merci. Commencer par l'autre extrémité - mettre à jour l'URL du fichier dans la table en premier - est plus judicieux. J'ai fini où j'étais et je me demandais s'il y avait un moyen de sortir. Il n'y a pas: je suis coincé, donc le temps de repenser le long de vos lignes. – Tom