Multiple Update MySQL [Résolu]

cs_paul13 8 Messages postés lundi 10 avril 2006Date d'inscription 22 juin 2006 Dernière intervention - 20 juin 2006 à 20:06 - Dernière réponse : cs_paul13 8 Messages postés lundi 10 avril 2006Date d'inscription 22 juin 2006 Dernière intervention
- 22 juin 2006 à 12:05
Bon, comme je ne sais pas trop comment poser la question, voila le contexte.

Depuis une page en php me servant à requeter dans la base MySQL, je peux faire des inserts sur plusieurs lignes et plusieurs champs en une passe. Ok. C'est bien pratique.

'INSERT IGNORE INTO `admin` (`id`, `nom`, `titre`, `numero`, `administrateur`, `id_level`, `valeur`) VALUES ' ; ?><?php $text = stripslashes($textfield) ;?><?php echo trim($text, ",").";"; ?>
ensuite la liste des valeurs. 3, 5, 10, 100, lignes d'un coup ça roule

Tout ça c'est ok

Question : Je tente de réaliser la meme démarche depuis une page en php me servant à requeter (je me répète) et là, non plus en INSERT mais en UPDATE et ben ça veut pas. Je suis pas balaise ça fait que 7 heures que je bosse sur la commande et que je cherche un exemple , mais bon jusqu'à présent, rien de concluant.

L'UPDATE ressemble à ça

UPDATE `table_1`
SET
`nom` = 'blabla',
`titre` = 1 ,
`numero` = 2 ,
`administrateur` = 'blablabla' ,
`id_level` = 1 ,
`valeur` = 2 ,
 WHERE
`id` =34;


UPDATE `table_1`
SET
`nom` = 'boubou',
`titre` = 1 ,
`numero` = 3 ,
`administrateur` = 'blablabla' ,
`id_level` = 1 ,
`valeur` = 2 ,
 WHERE
`id` =35;

ça copier dans mon formulaire ça passe pas erreur MySQL, ça donne
UPDATE `table_1` SET `nom` 'blabla', `titre` 1 , `numero` = 2 , `administrateur` = 'blablabla' , `id_level` = 1 , `valeur` = 2  WHERE `id` =34; UPDATE `table_1` SET `nom` = 'boubou', `titre` = 1 , `numero` = 3 , `administrateur` = 'blablabla' , `id_level` = 1 , `valeur` = 2  WHERE `id` =35;Erreur 1064 : 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 '; UPDATE `table_1` SET `nom` 'blabla', `titre` 1 , `nu

Mais la meme chose copier dans le SQL TEXTAREA de phpmyadmin passe comme une lettre à la poste 'quand elle est pas en grève' lol

Voili voilou
Je continue à chercher et je reviens dès que j'ai du news.

Si y'en à un ou une qui aurait déjà rencontrer ce contexte je suis preneur d'infos à++ 

paulo
Afficher la suite 

7 réponses

Répondre au sujet
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 20 juin 2006 à 22:41
+3
Utile
Ben dis, pour 7 heures de MySQL, t'es plutôt sur la bonne voix !

Bon, il y'aurit une virgule de trop avant chaque WHERE
`valeur` = 2 ,
 WHERE
`id` =34;

Sinon, ça à l'air correct...

Je te laisse regarder la doc MySQL pour les histoire de version (et autre) :

13.1.10. Syntaxe de
UPDATE


Bonne chance.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de J_G
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 20 juin 2006 à 23:55
+3
Utile
Salut,

cette erreur suffit...

en php, une seule requette par mysql_query... c'est la règle...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de coucou747
capoueidiablo 316 Messages postés jeudi 9 janvier 2003Date d'inscription 1 février 2010 Dernière intervention - 21 juin 2006 à 02:00
+3
Utile
coucou747 à tout a fait raison :D, je me suis heurté aux même problème y'a pas longtemps mais sur des insertions dans la base ...

au final j'ai créé un tableau contenant toute mes requetes et j'ai lancé un foreach sur le tableau pour récup les requetes une a une et les executer les unes arpres les autres ... :D

--=Capoueidiablo=--
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de capoueidiablo
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 21 juin 2006 à 10:34
+3
Utile
<dd>



</dd>
<dt>

<var class="parameter">query</var>

</dt>
<dd>


Une requête SQL





La chaîne de requête ne doit pas se terminer par un point-virgule.



</dd>Voilà ce que je lis dans la doc de mysql_query... C'est hallucinant car j'ai toujours terminé mes requètes par un point virgule !?! Pensant bien faire. et j'ai jamais eu de problème.<dt>Etonnant !
</dt>
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de J_G
cs_paul13 8 Messages postés lundi 10 avril 2006Date d'inscription 22 juin 2006 Dernière intervention - 21 juin 2006 à 15:20
+3
Utile
Merci de chercher avec moi une solussastuce à ce malin souci.

Réponse à J_G, bien vu pour la virgule mais afin d'ecourter la liste des champs à mettre à jour j'en ai virer quelques uns et j'ai pas virer la derniere virgule avant where. Ceci fait et verifier ça n'a pas résolu le probleme.


Concernant le point virgule en fin de chaine de requete c'est vrai et enchainer deux requetes update dans le SQL TEXTAREA de phpmyadmin fonctionne. Evidemment après avoir testé dans le TEXTAREA de ma page ça bug.

D'accord aussi avec coucou747 et capoueidiablo une seule requete par mysql_query mais une requete peut 'entre guillemet' englober un ensemble ou sous ensemble d'action. Par exemple un INSERT peut permettre d'entrer en une passe 1, 10 100 10000 lignes, de plusieurs champs, dans MySQL, je le sais je le fais, par une methode pas très orthodoxe, peut etre au yeux des puristes mais ça fonctionne. Je fais plusieurs action dans un formulaire ensuite je génère mais lignes avec While et ensuite je met en forme et j'envoie la requete INSERT.

Bon et bien pourquoi ça semble moins facile avec UPDATE certainement que je m'y prend pas très bien alors je vais chercher. Mais j'insiste sur le fait que copier, coller dans le SQL TEXTAREA de phpmyadmin fonctionne mais pas dans le TEXTAREA de ma page qui lui peut fonctionner en collant un ensemble INSERT. > leschamps > lesvaleurs.

Bon à part ça j'ai trouver ceci


//select query


while ($row = mysql_fetch_array ($result, MYSQL_ASSOC)) {

$id = $row[id];
$pref = $row[pref];

//you'll need to write the code for the rest of the table, the important bit is below

print "<td> </tr></td>

//include submit button here
}

// Then above all this I would have my conditional for the submit


if (isset($_POST[submit])) {

foreach ($_POST as $key) {
$id=$key[id];
$pref=$key[pref];


$query = "UPDATE table set pref= $pref where id = $id";

}
}
Je vais tenter et voir. Si de votre coté vous avez une voie, je prends.
A++

Paulo
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_paul13
cs_paul13 8 Messages postés lundi 10 avril 2006Date d'inscription 22 juin 2006 Dernière intervention - 22 juin 2006 à 12:01
+3
Utile
Bon Ben voilà

après moultes recherches par dela les horizons des forums lointains j'ai fini par trouver mon bonheur et
l'adapter à mes besoins
ça tiens en ceci

<form>
<?php
//préparation des valeurs à modifier
while (){
//édition de la liste
echo ....
}
//submit
?>
</form>

<?php
for ($i = 0; $i < count($_REQUEST['id'])+1; $i++) {
$admin = $_REQUEST['admin][$i];
$level = $_REQUEST['level'][$i];
$nom  = $_REQUEST['nom'][$i];
$titre = $_REQUEST['titre'][$i];
$id = $_REQUEST['id'][$i];
$query = "UPDATE stock SET admin='".$admin."',level='".$level."',nom='".$nom."',titre='".$titre."' WHERE id='".$id."'";
$result = mysql_query($query);
}
?>

c'était pas difficile, encore fallait il le savoir.

A++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_paul13
cs_paul13 8 Messages postés lundi 10 avril 2006Date d'inscription 22 juin 2006 Dernière intervention - 22 juin 2006 à 12:05
+3
Utile
Au fait Merci beaucoup à ceux qui se sont pencher avec moi sur ce probleme

Paulo
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_paul13

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.