DELETE dans une boucle - PHP - Programmation
Marsh Posté le 15-01-2006 à 17:16:03
Le mieux ça serait pê de passer obligatoirement par le php pour ajouter/effacer des fichers et mettre à jour la base en même.
Ici, le plus simple est pê de vider la table avant de la remplir avec les fichiers qui sont présents.
Marsh Posté le 15-01-2006 à 17:23:18
C'est bien ce que je faisais auparavant mais il faudrait que je remette tous les commentaires pour chaque fichier ! Quand il y en a plus de 1000, c'est un peu de travail !
Marsh Posté le 15-01-2006 à 17:40:13
Tu as le choix des fonctions en PHP :
http://fr2.php.net/manual/fr/function.file-exists.php
http://fr2.php.net/manual/fr/function.is-file.php
http://fr2.php.net/manual/fr/function.fopen.php
Marsh Posté le 15-01-2006 à 17:41:50
Et tu lis au moins l'exemple 1 de chaque fonction avant de venir dire que tu ne comprends pas comment ca marche.
Marsh Posté le 15-01-2006 à 18:15:22
A force de batailler un peu partout, voici ce que j'ai réussi à faire :
J'ai fait une autre boucle de ma table. J'avais peur que ca soit un peu lourd. Je cherchais donc une solution à çà.
Code :
|
Il y avait une autre solution mais je me rends compte en même temps que j'ai un autre probleme.
En ajoutant un nouveau champs quelconque à ma table, j'aurai pu le supprimer en fonction.
Le probleme est que je ne peux plus rien ajouter dans cette requête :
Code :
|
Si je fais, par exemple :
Code :
|
moi ne sera pas ajouter !!!
Ca devient un peu complexe tout çà !
Marsh Posté le 16-01-2006 à 00:25:46
Ca te rend quel type erreur au moment de l'insert ?
(y a pas de "or die mysql_error" etc... dans ton code)
Marsh Posté le 16-01-2006 à 07:34:21
Salut !
J'ai cette erreur :
Citation : Erreur SQL !Resource id #2 |
Le message disparait si je remplace INSERT par REPLACE.
J'ai rajouté la valeur Unique à id.
Cependant, ceci n'est pas une solution car il faudrait que je refasse tous les commentaires de mes fichiers.
Marsh Posté le 16-01-2006 à 08:08:26
Je viens de modifier mon champs id pour UNSIGNED et BIGINT...toujours pareil !
Marsh Posté le 16-01-2006 à 08:35:11
Je viens de trouver à l'instant même où je recois le mail pour ton post !
Il suffisait de changer le champs id de INT à tinyint.
Je savais bien que ca venait de la table !
Merci à tous
Marsh Posté le 16-01-2006 à 08:47:35
Je vais trop vite moi !
En fait le probleme revient !!
Au lieu de me donner l'erreur :
Citation : Erreur SQL !Resource id #2 |
j'ai l'erreur
Citation : Erreur SQL !Resource id #2 |
Voici la structure :
Code :
|
Marsh Posté le 16-01-2006 à 12:16:57
replace utilise la clé primaire pour savoir quoi remplacé en cas de doublon.
Si tu lui donnes pas de valeur pour la clé primaire, alors ca sert strictement à rien de faireun "replace".
De plus si tu mets une colone en autoincrément, alors soit tu laisses la base de donnée gérer l'autoincrémentation et tu lui envoie aucune valeur pour cette colone, soit tu lui en précises une et l'autoincrémentation ne sera pas utilisé par la base de donnée.
Ceci dit, c'est quoi ta requette actuelle pour insérer les données?
Marsh Posté le 16-01-2006 à 12:52:55
mikedimoi a écrit :
j'ai l'erreur
|
C'est normal que ça plante vu que tu as mis le titre en clé unique et que tu dois inserer 2 fois le même titre. Le message est suffisamment clair à ce propos "Duplicate entry"
Pourquoi tu fais "insert id values ('')" ? Ca sert à rien (c'est faux même, non ? mysql va pas essayer de mettre 0 ? flemme de tester)
Conclusion : Ouvrir un livre traitant de SQL ou de MySQL pour comprendre ce que tu copies-colles. La doc officielle est très bien pour ça.
Marsh Posté le 16-01-2006 à 12:58:02
Arf lol, j'avais pas vu un truc evident
Question naïve à mikedimoi :
Quel est le type de de la colonne 'titre' ?
edit : et le primay key + unique key sur 'id' c'est top
Marsh Posté le 16-01-2006 à 13:05:48
J'ai enlevé le UNIQUE sur id. C'était simplement pur un test
Marsh Posté le 16-01-2006 à 13:08:07
Ma requête :
Code :
|
Marsh Posté le 16-01-2006 à 14:01:02
mikedimoi a écrit : VARCHAR(255), NotNull. |
ah ok donc le script de la table que tu as posté plus haut était faux.
Marsh Posté le 16-01-2006 à 17:10:10
Oui, désolé
Code :
|
Marsh Posté le 16-01-2006 à 17:51:52
J'ai donc enlevé la valeur UNIQUE à TITRE et fait ce script avec une boucle qui vérifie les entrées.
Code :
|
Cependant, il me reste cette erreur :
Citation : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\mes sites web\accueil\film.php on line 39 |
J'ai toujours quelque chose qui coince !
Marsh Posté le 16-01-2006 à 17:57:12
Ca serait peut être bien une bonne idée que de vérifier que la requette à bien marché et qu'elle retourne des données. Evidement, comme tu vérifie pas, t'as une alerte quand ca marche pas ou que ca retourne rien.
Je te laisse chercher dans la doc comment corriger ce probléme.
Marsh Posté le 16-01-2006 à 18:27:33
Sache que ca fait plusieurs fois que je la potasse !
Si je rajoute une ligne pour les erreurs mysql, j'ai toujours la meme chose.
Marsh Posté le 16-01-2006 à 18:33:17
Et t'as regardé aussi les exemples?
Code :
|
Dans ton code à toi, elle est où cette vérification?
Marsh Posté le 16-01-2006 à 20:10:24
Elle est où cette ligne 39 ??
Marsh Posté le 16-01-2006 à 20:12:38
ReplyMarsh Posté le 16-01-2006 à 20:46:11
mikedimoi a écrit : Celle-ci :
|
Puisque tu n'écoutes pas ce qu'on te conseille (faire le controle de $result), va lire une doc, t'en as bien besoin.
Marsh Posté le 16-01-2006 à 20:50:52
Je te dis que je l'ai fait et que je n'ai pas de nouveau message d'erreur !!!!!
J'avais fait çà avant que omega2 ne poste :
Code :
|
Je n'avais rien de plus non plus !
Marsh Posté le 16-01-2006 à 21:14:25
Et toi ??????
Je t'ai dit que j'avais aussi fait ce qu'omega2 m'avait dit !!! Je n'ai rien de plus !!!!!
Marsh Posté le 17-01-2006 à 01:45:13
T'as vraiment copié du code sans lire la doc :
Code :
|
$result est initialisé à quelle valeur ?
Code :
|
avec :
$query = "INSERT INTO matable(id, titre) VALUES('','".$fichier."')";
$sql=mysql_query("SELECT COUNT(*) FROM matable WHERE titre='".$fichier."'" );
$sql_update = "DELETE FROM matble WHERE id='".$id."'";
Et ça c'est une nouvelle syntax que t'as inventée ?
C'est nawak ton code
Comme je disais, tu copies-colles des lignes de codes sans comprendre ce que tu fais => va lire la doc PHP plutôt que de la ramener.
A propos tu connais l'utilisation du double-quote ?
Ca permet d'écrire "SELECT COUNT(*) FROM matable WHERE titre='$fichier'" sans concaténer...
C'est un peu la base de PHP
Marsh Posté le 17-01-2006 à 09:22:29
mikedimoi a écrit : Je te dis que je l'ai fait et que je n'ai pas de nouveau message d'erreur !!!!!
|
mikedimoi a écrit : Celle-ci :
|
chercher l'erreur : $sql d'un côté, $result de l'autre
Si tu fais la vérification à la sorti de la fonction, c'est bien, mais si c'est pour utiliser derriére une variable qui correspond pas et dans laquelle tu n'as rien mis du tout, ca sert pour ainsi dire à rien.
Smaragdus > Ne jamais mettre de nom de variable dans une chaine, même si ca marche, c'est une trop grande source d'erreur.
Marsh Posté le 15-01-2006 à 15:13:45
Bonjour,
J'ai ce script qui me permet de lister un repertoire et d'ajouter les entrées à ma table.
Tout fonctionne pour le mieux.
Néanmoins, il reste simplement un petit bémol.
Ce repertoire est mis à jour régulièrement. On y ajoute des fichiers et on en retire fréquemment.
Comment, dans la boucle, pourrai-je supprimer les fichiers qui n'existe plus ?
Voici mon script :
Merci d'avance