problème mysql_fetch_array

Petit nouveau ! | 3 Messages

20 mars 2007, 12:10

bonjour,
j'ai un problème avec un morceau de mon code PHP
celui-ci me met une erreur au deuxième mysql_fetch_array et je ne comprend pas pourquoi
En gros se que je veux faire avec ce code est d'echanger le contenu de deux enregistrement. id_test recoi les infos de id_test2 et vice versa.
merci d'avance

Code : Tout sélectionner

if (isset($_GET['monter_test'])) { $retour = mysql_query('SELECT * FROM test WHERE id_test=' . $_GET['monter_test']); $donnees = mysql_fetch_array($retour); $photo_test = $donnees['photo_test']; $description_test = $donnees['description_test']; $id_test_test = $donnees['id_test']; $retour2 = mysql_query('SELECT * FROM test WHERE id_test<' . $_GET['monter_test'] . 'AND id_test IN (SELECT max(id_test) FROM test WHERE id_test<' .$_GET['monter_test']); $donnees2 = mysql_fetch_array($retour2); $photo_test2 = $donnees2['photo_test']; $description_test2 = $donnees2['description_test']; $id_test_test2 = $donnees2['id_test']; mysql_query ("UPDATE test SET photo_test='" . $photo_test2 . "', description_test='" . $description_test2 . "' WHERE id_test=" . $_GET['monter_test']); mysql_query ("UPDATE test SET photo_test='" . $photo_test . "', description_test='" . $description_test . "' WHERE id_test= '". $id_test_test2 . "'"); }

Mammouth du PHP | 1776 Messages

20 mars 2007, 12:15

Code : Tout sélectionner

$retour2 = mysql_query('SELECT * FROM test WHERE id_test<' . $_GET['monter_test'] . 'AND id_test IN (SELECT max(id_test) FROM test WHERE id_test<' .$_GET['monter_test']);
Essaie plutôt :

Code : Tout sélectionner

$retour2 = mysql_query("SELECT * FROM test WHERE id_test<'".$_GET['monter_test']."' AND id_test IN (SELECT max(id_test) FROM test WHERE id_test<'".$_GET['monter_test'])."'";

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 mars 2007, 12:27

Le problème EST lié à un soucis d'espace entre la valeur et le AND et à l'absence de parenthèse fermante dans la sous requête. En revanche, il ne faut utiliser d'apostrophes en SQL qu'autour des dates et des chaines de caractère. Pour un nombre (tel un id) il ne faut surtout pas en mettre, même si MySQL les tolères :)

$sql = "SELECT ... FROM test 
  WHERE id_test<" . $_GET['monter_test'] . " 
  AND id_test IN (SELECT max(id_test) FROM test WHERE id_test<" .$_GET['monter_test'].")";

$retour2 = mysql_query($sql);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

20 mars 2007, 12:46

j'ai mis ton moreau de code
et j'ai toujours la même erreur

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 mars 2007, 13:02

Affiche la requête générée et teste la sous MySQL ou phpMyAdmin :)

ou alors, utilise la fonction mysql_error() pour voir s'il n'y a pas un message d'erreur :
$retour2 = mysql_query($sql) or die(mysql_error());

As-tu remplacé mes '...' par les noms de tes champs ? ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

20 mars 2007, 13:04

oui g remplacer