MAJ de base de donnée

Eléphanteau du PHP | 45 Messages

14 nov. 2006, 15:41

Voila je voudrai faire une update de ma DB pour ne pas le faire manuellement car trop de donné et en fait j'ai simplement rajouté un champ à la table et je voudrai que lke script met a jour ce champ en y mettant une valeur propre en relation avec un autre champs voila mon script
$connection = mysql_connect($hostname_connection, $username_connection, $password_connection) or die("");
mysql_select_db($database_connection,$connection) or die("");
// lecture base de donnee
$requete="SELECT grade,id FROM DB";
echo $requete;
$result=mysql_query($requete,$connection) or die("rate !!");
//affectation valeur equivalente pour grade
while ($enreg=mysql_fetch_array($result))
{
	$grade=$enreg['grade'];
	switch ($grade)
	{
		case "S";
			$gradevalue=0;
			break;
		case "A";
			$gradevalue=1;
			break;
		case "B";
			$gradevalue=2;
			break;
		case "C";
			$gradevalue=3;
			break;
		case "D";
			$gradevalue=4;
			break;
		case "No Grade";
			$gradevalue=5;
			break;
	}
	//mise a jour vase de donnee
	$requete="UPDATE DB SET gradeeq=".$gradevalue." WHERE id=".$enreg['id'];
	$result=mysql_query($requete,$connection) or die("rate 2!!");
}
mysql_free_result($result);
mysql_close();
?>
Et voila l'erreur qui va avec
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/135/sdb/1/4/mondelendill/misajourgrade.php on line 24

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /mnt/135/sdb/1/4/mondelendill/misajourgrade.php on line 52


Et impossible de trouver mon erreur donc si quelqu'un peut m'aider merci d'avance

Mammouth du PHP | 19672 Messages

14 nov. 2006, 15:59

ça veut dire que l'exécution de ta requête retourne une erreur : as-tu testé ta requête directement via phpMyAdmin par exemple ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 45 Messages

14 nov. 2006, 16:08

non ca m'avancera a quoi de l'esayé avec phpmyadmin d'abord????

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

14 nov. 2006, 16:11

à vérifier que ta requête générée est correcte.

Eléphanteau du PHP | 45 Messages

14 nov. 2006, 16:13

et je le vois a quoi car j'utilise pas vraiment phpmyadmin car j'aime pas trop bien que c utile je l'admet

ViPHP
ViPHP | 3607 Messages

14 nov. 2006, 16:14

ça servira peut-être à te rendre aimable, quoique, les carottes c'est mieu pour ça...
non en fait ça te servira surtout à te dire que c'est pas ton script php qui plante, mais ta requête qui ne fonctionne pas...
tu est sur que ta table s'appel DB ?

Mammouth du PHP | 684 Messages

14 nov. 2006, 16:17

Fait un echo de ta requete et passe la dans phpmyadmin ou dans tout autre outils qui peut faire la requete sur ton serveur.
$requete="UPDATE DB SET gradeeq=".$gradevalue." WHERE id=".$enreg['id'];
echo $requete;
Zigz4g

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

14 nov. 2006, 16:18

A la place des or die("") qui ne servent absolument à rien, ou du or die("rate !!") qui n'est pas spécialement explicite. Utilise des message explicite ("Impossible de se connecter à la base", ...) ou bien mysql_error() en cas d'erreur SQL, cela aura au moins pour effet de te la signaler tout de suite :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 3607 Messages

14 nov. 2006, 16:18

m'est avis qu'il manque des ' autour du champ grade

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 nov. 2006, 16:20

A la place des or die("") qui ne servent absolument à rien,...
Le

Code : Tout sélectionner

or die('')
a tout de même l'utilité d'arreter l'exécution du script. Même si l'affichage d'un affichage n'est pas inutile pour savoir où s'est arreté le script.

Sinon, libre à toi de ne pas suivre nos conseils pour phpMyAdmin ... mais ne vient pas demander de l'aide si tu ne l'acceptes pas ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

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

14 nov. 2006, 16:22

Jojo >> c'est un nombre, y a pas besoin d'apostrophe... :)

Ceci dit, vous noterez que l'erreur provient du mysql_fetch et donc du SELECT, pas de l'UPDATE...

$result n'est pas bon, donc le mysql_query n'est pas bon.
A vérifier maintenant si c'est la requête ou la connexion qui ne fonctionne pas...

Edit : oops au temps pour moi jojo, je croyais que tu parlais du champ de l'update (qu'à un nom assez proche :))... ceci dit, je crois pas que "grade" soit un mot clé sql et qu'il ne nécessite d'être protégé...

Edit bis : bon bah au temps pour moi itou zeus, c'est vrai que je ne pensais pas à l'interruption, mais c'est sur que sans plus d'information ça risque de pas être évident en cas d'erreur de trouver d'où ça vient :)
Modifié en dernier par Ryle le 14 nov. 2006, 16:28, modifié 1 fois.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 45 Messages

14 nov. 2006, 16:28


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>
<?php
// script de connexion
$hostname_connection = "localhost";//le host
$database_connection = "mondelendill";//nom de la table
$username_connection = "root";//login de connexion
$password_connection = "";//mot de pass
$connection = mysql_pconnect($hostname_connection, $username_connection, $password_connection) or  die('');
mysql_select_db($database_connection,$connection) or die('');
// lecture base de donnee
$requete="SELECT grade,id FROM DB";
echo $requete;
$result=mysql_query($requete,$connection) or  die('');
//affectation valeur equivalente pour grade
while ($enreg=mysql_fetch_array($result))
{
	$grade=$enreg['grade'];
	switch ($grade)
	{
		case "S";
			$gradevalue=0;
			break;
		case "A";
			$gradevalue=1;
			break;
		case "B";
			$gradevalue=2;
			break;
		case "C";
			$gradevalue=3;
			break;
		case "D";
			$gradevalue=4;
			break;
		case "No Grade";
			$gradevalue=5;
			break;
	}
	//mise a jour vase de donnee
	$requete="UPDATE DB SET gradeeq=".$gradevalue." WHERE id=".$enreg['id'];
	$result=mysql_query($requete,$connection) or  die('');
}
mysql_free_result($result);
mysql_close();
?>
</body>
</html>

Voila le nouvo code pour le phpmyadmin

et voila l'erreur avec l'echo qui été demandé

SELECT grade,id FROM DB
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in f:\site\misajourgrade.php on line 22

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in f:\site\misajourgrade.php on line 50

[/b]

ViPHP
ViPHP | 3607 Messages

14 nov. 2006, 16:35

voila le nouvo code pour le phpmyadmin
c'est à dire ?
nous on souhaite que tu fasses un essais de tes deux requêtes dans phpmyadmin... et nous rapporter ce que ça a donné
Modifié en dernier par jojolapine le 14 nov. 2006, 16:36, modifié 1 fois.

Mammouth du PHP | 684 Messages

14 nov. 2006, 16:36

Je me rappel pas avoir demande cette information... :shock:
$requete="SELECT grade,id FROM DB";
echo $requete;
Mais plus celle ci :
$requete="UPDATE DB SET gradeeq=".$gradevalue." WHERE id=".$enreg['id'];
echo $requete;
De plus afficher une requete qui n'est pas dynamique se copie colle directement dans phpmyadmin.
Zigz4g

Eléphanteau du PHP | 45 Messages

14 nov. 2006, 16:36

sorry jsuis a la ramasse jvien de comprendre ce que vous vouliez avec phpmyadmin mdr


SELECT grade,id FROM db (echo 1ere requete)
UPDATE DB SET gradeeq=0 WHERE id=6607 (echo 2e requete)
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in f:\site\misajourgrade.php on line 22

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in f:\site\misajourgrade.php on line 51