Fatal error suite à une requète UPDATE

Eléphanteau du PHP | 34 Messages

23 août 2010, 00:23

Bonjour / Bonsoir,

J'ai un petit soucis avec une requête UPDATE, et je me rapporte aux plus expérimentés après avoir cherché de longues heures.. sans succès...

Voici la partie de la page qui permet au(x) membre(s) de modifier ces données :
<form name=inscipt action="fonctions/MAJ.php" method="post" enctype="multipart/form-data">
		<select name="avatar_peau_maj">
		<option value="'.$perso_peau.'">Ne pas changez</option>
		<option value="Beige.png">Beige</option>
		<option value="Jaune.png">Jaune</option>
		<option value="Noir.png">Noir</option>
		<option value="Pale.png">Pale</option>
		<option value="Rose.png">Rose</option>
		</select>

Voici la page MAJ.php
db_connect();
$avatar_peau_edit = $_POST['avatar_peau_maj'];
echo "Couleur de peau : $avatar_peau_edit - ID : $id";
$bdd->exec('UPDATE characters SET avatar_peau = "$avatar_peau_edit" WHERE id=$id'); 

Dans mon exemple, je choisis l'option Pale. Voici ce qui m'est retourné :

Code : Tout sélectionner

Couleur de peau : Pale.png - ID : 1 Fatal error: Call to a member function on a non-object in ../fonctions/MAJ.php on line 262
Si vous voyez la moindre erreur ou la moindre piste, surtout n'hésitez pas, j'ai fais des dizaines de test et je ne trouve toujours pas..
En attente de la moindre piste pour avancer :roll:

Hiro.
Modifié en dernier par Hirokumi le 23 août 2010, 02:40, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

23 août 2010, 00:29

$bdd ca sort d'ou ?

Eléphanteau du PHP | 34 Messages

23 août 2010, 00:43

Bonsoir, et merci de ta réponse,

Mmhh c'est une variable que j'ai choisi pour exécuter la requête. C'est pris du cours sur le site du zéro.

Code : Tout sélectionner

<?php $bdd->exec('UPDATE jeux_video SET prix = 10, nbre_joueurs_max = 32 WHERE nom = \'Battlefield 1942\''); ?>
Source sur le site du Zéro


ViPHP
ViPHP | 5462 Messages

23 août 2010, 00:45

oui mais avant elle est égale a quoi ?

Eléphanteau du PHP | 34 Messages

23 août 2010, 01:19

Bonne question... C'est sans doute ça le problème...
Désolé si je répond lentement j'analyse et je fais des tests entre tes réponses et les miennes..

Eléphanteau du PHP | 34 Messages

23 août 2010, 01:22

Ils l'utilisent pour insérer des données je pense... J'avais d'en l'optique de l'utiliser pour faire une condition par la suite mais je ne les pas définis auparavant...

ViPHP
ViPHP | 5462 Messages

23 août 2010, 01:33

montre tout ton code, y'a des choses qui vont pas

Eléphanteau du PHP | 34 Messages

23 août 2010, 02:10

C'est assez compliqué dans le sens où c'est mon premier projet et que je suis encore novice en la matière..
Donc merci de votre indulgence...


Voici le "corps"de ma page 'Mon compte'.

	if(session_is_registered('userlogin') ||session_is_registered('smartid'))
    	{

	$result_sql = mysql_query("SELECT * FROM membres WHERE login='$name'");
		$id = mysql_result($result_sql,0,"id");
		$login   = mysql_result($result_sql,0,"login");
		$pass   = mysql_result($result_sql,0,"password");	
		$vip   = mysql_result($result_sql,0,"vip");
		$mail    = mysql_result($result_sql,0,"email");		
		$date_enr    = mysql_result($result_sql,0,"date_reg");
		$annee = date("Y", $date_enr);
		$mois = date("m", $date_enr);
		$jour = date("d", $date_enr);
		$heures = date("H", $date_enr);
		$minutes = date("i", $date_enr);
		$date_enr = $jour."/".$mois."/".$annee." à ".$heures."h".$minutes;
		
			echo '<u>Informations sur votre compte</u><br/><br/>Pseudo : '.$login.'<br/>';
			echo 'Mot de Passe : '.$pass.'<br/>';
			echo 'E-mail : '.$mail.'<br/>';
			echo 'Inscrit le '.$date_enr.'<br/>';
			
		if ($vip == 0)
			{echo 'Votre compte n\'est pas VIP.';}	
		if ($vip >= 1)
			{echo 'Vous êtes un membre VIP<br/>';}
		if ($vip == 2)
			{echo 'Vous disposez des droits de Graphiste/Designer';}
		if ($vip == 3)
			{echo 'Vous disposez des droits de Modérateur';}
		if ($vip == 4)
			{echo 'Vous disposez des droits de Développeur';}
		if ($vip == 5)
			{echo 'Vous disposez des droits d\' Administrateur';}
			echo '<br/><br/><br/>';
			
	$tablecharacters = mysql_query("SELECT * FROM characters WHERE id='$id'");
		$perso_id = mysql_result($tablecharacters,0,"id");
		$perso_name = mysql_result($tablecharacters,0,"pseudo");
		$perso_sexe = mysql_result($tablecharacters,0,"sexe");
		$perso_level = mysql_result($tablecharacters,0,"level");
		$perso_position_x = mysql_result($tablecharacters,0,"position_x");
		$perso_position_y = mysql_result($tablecharacters,0,"position_y");
		$perso_peau = mysql_result($tablecharacters,0,"avatar_peau");
		$perso_cheveux = mysql_result($tablecharacters,0,"avatar_cheveux");
		$perso_yeux = mysql_result($tablecharacters,0,"avatar_yeux");
		$perso_bouche = mysql_result($tablecharacters,0,"avatar_bouche");
		
			echo '<TABLE BORDER="0"'; if ($vip >= 1)	{ echo 'width="60%"'; } else { echo 'width="30%"';} echo 'align="center">
			<TR>
				<TH align="center">Personnage</TH>
				<TH>Pseudo</TH>
				<TH>Niveau</TH>';
				if ($vip >= 1)	{ echo '<TH> VIP </TH>'; }
			echo '
			</TR>
			<TR>
				<TD align="center">
				<img src="../Images/Avatar/Corps/'.$perso_peau.'" style="position:absolute;z-index:1;" />
				<img src="../Images/Avatar/Yeux/'.$perso_yeux.'" style="position:absolute;z-index:2;" />
				<img src="../Images/Avatar/Cheveux/'.$perso_cheveux.'" style="position:absolute;z-index:3" />
				<img src="../Images/Avatar/Bouche/'.$perso_bouche.'" style="position:absolute;z-index:4;" />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
				<TD align="center">'.$perso_name.'</TD>
				<TD align="center">'.$perso_level.'</TD>
				<TD align="center">
				
		<form name=inscipt action="fonctions/MAJ.php" method="post" enctype="multipart/form-data"><select name="avatar_peau_maj">
		<option value="'.$perso_peau.'">Ne pas changez</option>
		<option value="Beige.png">Beige</option>
		<option value="Gris.png">Gris</option>
		<option value="Jaune.png">Jaune</option>
		<option value="Marron.png">Marron</option>
		<option value="Noir.png">Noir</option>
		<option value="Pale.png">Pale</option>
		<option value="Rose.png">Rose</option>
			</select></TD>
				</TR>
			
			<TR>
			<TD align="center"></TD>
			<TD align="center"></TD>
			<TD align="center"><a href="fonctions/MAJ.php">LOL</a></TD>
			<TD align="center"><input type="submit" name="submit" value="Enregistrer" class="button" disable></form></TD>
			</TR>
			</TABLE> ';
		
		
    	}
	else
	{
	echo '<br/><br/><br/><br/>Vous devez être connecté pour accédez à cette page.<br/><br/><br/><br/>';
	}
Et la requête de la page MAJ.php est celle mise au dessus :
db_connect();
$avatar_peau_edit = $_POST['avatar_peau_maj'];
echo "Couleur de peau : $avatar_peau_edit - ID : $id";
$bdd->exec('UPDATE characters SET avatar_peau = "$avatar_peau_edit" WHERE id=$id'); 
Modifié en dernier par Hirokumi le 23 août 2010, 02:40, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

23 août 2010, 02:15

tu mélanges 2 extensions pour mysql (mysql et PDO)

et db_connect(); ca sort d'ou ?
$bdd n'existe pas avant dans ton code (il ne sortira pas de db_connect si c'est ce que tu attend)

je te conseil aussi d'activer les erreurs php et de mettre le niveau au max

Eléphanteau du PHP | 34 Messages

23 août 2010, 02:28

Oki, ça le mérite d'être clair et précis, je te remercie,
Le db_connect(); viens de la fonction pour se connecter qui est une partie inclue d'en l'en-tête de ma page
function db_connect() 
{
	global $dbhost,$dblogin,$dbpassword,$dbname,$dbtable;
	$db = mysql_connect($dbhost, $dblogin, $dbpassword); 
	mysql_select_db($dbname,$db); 
}
Pour activer les erreurs, je ne vois pas trop comment faire, mais je vais cherché, quand aux deux extensions j'ai tendance comme beaucoup j'ai l'impression de mélanger les deux.. j'vais approfondir le sujet là-dedans :p
Si tu as d'autres précisions à apporter des conseils ou tout simplement des critiques, elles sont les bienvenues ! :P
Modifié en dernier par Hirokumi le 23 août 2010, 02:43, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

23 août 2010, 02:31

$bdd->exec('UPDATE characters SET avatar_peau = "$avatar_peau_edit" WHERE id=$id'); 
ca c'est du PDO, mais dans ton code y'en a pas, donc fais un requete avec mysql_query a la place


pour activé les erreur tu peux le faire dans ton php.ini
display_errors = On
error_reporting = E_ALL | E_STRICT

pour voir les erreurs de ton mysql il faut faire
mysql_query('blabla') or exit(mysql_error());

pour ca
$tablecharacters = mysql_query("SELECT * FROM characters WHERE id='$id'");
$perso_id = mysql_result($tablecharacters,0,"id");
$perso_name = mysql_result($tablecharacters,0,"pseudo");
$perso_sexe = mysql_result($tablecharacters,0,"sexe");
$perso_level = mysql_result($tablecharacters,0,"level");
$perso_position_x = mysql_result($tablecharacters,0,"position_x");
$perso_position_y = mysql_result($tablecharacters,0,"position_y");
$perso_peau = mysql_result($tablecharacters,0,"avatar_peau");
$perso_cheveux = mysql_result($tablecharacters,0,"avatar_cheveux");
$perso_yeux = mysql_result($tablecharacters,0,"avatar_yeux");
$perso_bouche = mysql_result($tablecharacters,0,"avatar_bouche");
tu t'embêtes utilise mysql_fetch_assoc tu aura tout d'un coup
si t'est pas a l'aise avec les tableau tu peux faire un extract, et lui rajouté le paramètre prefix pour faire $perso_blabla

Eléphanteau du PHP | 34 Messages

23 août 2010, 03:01

Je note chacun de tes précieux conseils :D
Pour le fichier php.ini, je crains de ne pas pouvoir le modifier car je travaille sur un site héberger par free.. donc assez spécial #-o

Si je reprend ma requête dans MAJ.php

Je modifie tout simplement
$bdd->exec('UPDATE characters SET avatar_peau = "$avatar_peau_edit" WHERE id=$id');
Par :
$maj_peau = mysql_query('UPDATE characters SET avatar_peau = "$avatar_peau_edit" WHERE id=$id');
La requête me renvoie

Code : Tout sélectionner

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in ../fonctions/MAJ.php on line 262
Je souhaite garder une variable à la requête pour crée une condition qui ressemblerait à ceci
if ($maj_peau)
	{
		echo 'Modification en cours... Merci de patienter.
		<META HTTP-EQUIV="refresh" CONTENT=2; URL=/">';

	}

ViPHP
ViPHP | 5462 Messages

23 août 2010, 03:10

ton erreur c'est parce que t'es pas connecté

pour t'es erreur au debut de t'es script fais
error_reporting(-1);
mais pourquoi tu testes pas en local ?

EDIT : de plus
'UPDATE characters SET avatar_peau = "$avatar_peau_edit" WHERE id=$id'
ne marchera pas, il faut faire l'inserve au niveau des quote
"UPDATE characters SET avatar_peau = '$avatar_peau_edit' WHERE id=$id"
verifie chaque requête que tu fais, en les mettant d'hab dans un variable
$sql = "UPDATE characters SET avatar_peau = '$avatar_peau_edit' WHERE id=$id";
ca te permettra de faire echo $sql; et de voir a quoi correpond ta chaine

tu pourras faire par le suite
mysql_query($sql) or exit('<pre> . $sql . PHP_EOL . mysql_error() . '</pre>');
Modifié en dernier par stealth35 le 23 août 2010, 03:18, modifié 1 fois.

Eléphanteau du PHP | 34 Messages

23 août 2010, 03:17

Ah ok... L'erreur de base... #-o

"error_reporting(-1);" Ça sert à afficher les erreurs ?

Sinon, c'est vrai que c'est plus facile de tester en local.. j'ai toujours ignoré cette méthode de travail car j'ai été plus d'une fois embêter (pour rester poli) avec le problème de sessions mais j'ai appris il y a longtemps maintenant que c'était juste un dossier nommé "sessions" à placer à la racine.. enfin bref, ça a dût me marquer, allez hop wamp est en cours d'install :P

ViPHP
ViPHP | 5462 Messages

23 août 2010, 03:21

Ah ok... L'erreur de base... #-o

"error_reporting(-1);" Ça sert à afficher les erreurs ?
ca sert a monter le niveau des erreurs, plus il sera haut plus il affichera ce qu'il ne va pas

Sinon, c'est vrai que c'est plus facile de tester en local.. j'ai toujours ignoré cette méthode de travail car j'ai été plus d'une fois embêter (pour rester poli) avec le problème de sessions mais j'ai appris il y a longtemps maintenant que c'était juste un dossier nommé "sessions" à placer à la racine.. enfin bref, ça a dût me marquer, allez hop wamp est en cours d'install :P[/quote]

le problème de sessions c'est que sous free :wink:
fais gaffe sous free par défaut c'est php 4, pour activé php 5 il faut mettre un fichier .htaccess avec : php 1