Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/04/2011, 11h57   #1
Invité de passage
 
Homme Youyou
Administrateur de base de données
Inscription : avril 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme Youyou
Âge : 20
Localisation : Maroc

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Boutique - Magasin

Informations forums :
Inscription : avril 2011
Messages : 16
Points : 1
Points : 1
Envoyer un message via MSN à Prototype
Par défaut Problème variable FOR ou Array.

Bonjour,

J'utilise un CMS pour mon serveur, et je viens de trouvé une faute PHP assez gênante que je n'arrive pas encore à comprendre, c'est pour ceci que je viens demander votre aide.
Je vais essayé de vous donné les éléments qui faut pour que vous puissiez m'aider:

ERREUR:
Code :
1
2
Tout en haut: Warning: Cannot use a scalar value as an array in C:\wamp\www\pages\acheter.php on line 15
La barre de sélection du personnage: <b>Notice</b>: Trying to get property of non-object in <b>C:\wamp\www\pages\acheter.php</b> on line <b>57</b>
PAGE source:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<div class="titleSite"><b>&#8362;</b> Boutique - Choix du personnage !</div>
 
<center>
<div style="font-size: 13px">
 
<?php
//$module = mysql_fetch_array(mysql_query("SELECT Valeur FROM status_modules WHERE Module='boutique'"));
if (true)
 
	{
 
	// Créations des objets 'Perso'
	$repListePerso = mysql_query("SELECT guid FROM personnages WHERE account = '".$compte->guid."' ORDER BY level DESC");
	for ($i=0; $donListePerso = mysql_fetch_array($repListePerso); $i++)
LIGNE 15	$perso[$i] = new Perso($donListePerso[0]);
	$nbrPerso = mysql_num_rows($repListePerso);
 
if (isset($_GET['objet']))
{
	$error = FALSE;
	if (!$connect) $error = 1; // test si connecté
	if (!$error) // Test si l'objet existe
	{
		$rep = mysql_fetch_array(mysql_query("SELECT ID FROM boutique_objets WHERE ID='".$_GET['objet']."'"));
		if (!isset($rep[0])) $error = 2;
	}
	if (!$error) // test s'il a assez de points
	{
		$item = new Item($rep[0]);
		if ($compte->points < $item->cout) $error = 3;
	}
 
	if (!$error) // Test si un personnage est séléctionné
	{
		if (isset($_POST['persoSelect']))
		{
			$error = 99;
			$result = $item->buy($perso[$_POST['persoSelect']]->guid);
		}
	}
 
	if (!$error)
	{
		?>
		Vous êtes sur le point d'acheter l'item <b><?php echo $item->name ?></b> pour un coup de <b><?php echo $item->cout ?></b> points<br><br>
		<span style="color: rgb(255, 0, 0)">ATTENTION : Vous devez impérativement avoir votre personnage connecté au jeu avant de valider la commande.</span><br><br>
		Aucun remboursement ne pourra avoir lieu en cas de perte si vous ne respectez pas cette indication.<br>
		Veuillez vérifier maintenant que vous n'avez pas été déconnecté du jeu avant de faire l'achat.<br><br>
		Pour confirmer, selectionnez le personnage <b>connecté</b> sur lequel vous voulez recevoir votre achat :<br><br>
 
		<?php if ($nbrPerso > 0) { ?>
		<form method="POST" action="">
		<select style="width:200px" class="input" name="persoSelect" class="champLong">
		<?php
		for ($i=0; $i < $nbrPerso; $i++)
		{
LIGNE 57			?><option value="<?php echo $i; ?>"><?php echo $perso[$i]->name; ?></option><?php
		}
		?>
		</select>
		<input type="hidden" name="obj" value="<?php echo $_GET['objet']; ?>">
		<input class="input" type="submit" value="Confirmer">
		</form>
		<br />
		<?php } else echo "Aucun personnage sur ce compte";
	}
 
	if ($error)
	{
		switch ($error)
		{
			case 1: echo "Erreur : Vous devez être connecté"; break;
			case 2: echo "Erreur : Objet introuvable"; break;
			case 3: echo "Erreur : Pas assez de points"; break;
			case 6: echo "Trop de commandes sont en cours, veuillez réésayer plus tard."; break;
			case 99:
 
			switch ($result)
			{
				case 1: echo '<span style="color:green">Transaction effectuée avec succés, vous devrez recevoir votre commande dans les 10 minutes qui suivent...</span><br><br>
				<b><span style="color: rgb(255, 0, 0)">IMPORTANT : Afin de valider totalement votre commande,<br>
				il est impératif d\'utiliser la commande ".SAVE" sur le canal défaut afin de sauvegarder votre achat après l\'avoir reçus.</span><br><br></b>
				Les pertes suites au reboots sont rarements rendus faute de preuves, donc merci de suivre notre conseil.<br><br>
				<b><a href="index.php?p=boutique">Retourner à la boutique</a></b><br>
				'; break;
				case 2: echo "Erreurr : Vous n'avez pas assez de points"; break;
				case 3: echo "Erreur : Emulateur non connecté"; break;
				case 4: echo "Erreur : Connexion à la reception des commandes échouée."; break;
				case 5: echo "Erreur : Atribution de personnage échouée"; break;
			}
 
			break;
		}
	}
 
}
else echo "Aucun objet séléctionné";
?>
 
</div>
</center>
 
<?php
} else echo "<center>Boutique en maintenance</center>";
?>
 
<br />
Voila, je vous ai fourni les ligne où j'ai trouvé l'erreur ainsi que la page PHP, j'espère que vous pourriez m'aider, si vous avez besoin d'autre chose faite le moi savoir, je suis prêt à tout pour résoudre cette erreur. MERCI ^^
Prototype est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 12h20   #2
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 709
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 709
Points : 3 279
Points : 3 279
Salut


Ce n'est pas la 1ère fois que je vois ça, et jusqu'à lors j'ai jamais compris l'utilité d'une telle condition/alternative.
Dire : SI Vrai ALORS ... traitement ...
Vrai n'est il pas toujours VRAI ?


Mise à part ce détail, as tu fais un peu de débogage comme par exemple vérifier si la requête retourne quelque chose ?
J'ai plutôt l'impression que non, du coup $donListePerso ne contiendrait rien, donc pas la valeur attendue par Perso.

Vu que $perso ne serait pas créé, ça expliquerait plus bas ligne 57 que $perso ne serait pas un Objet.


As tu essayé de faire une boucle que je qualifierais de plus conventionnelle sur les résultats de MySQL.
Genre :
Code :
1
2
3
4
5
6
 
$i = 0;
while ($donListePerso = mysql_fetch_array($repListePerso)) {
    $perso[$i] = new Perso($donListePerso['guid']);
    $i++;
}

[edit]
Tiens donc, une nouveauté on dirait. Dans les BBCode il y a les N° de ligne.
Très pratique ça.
[/edit]
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/04/2011, 12h32   #3
Invité de passage
 
Homme Youyou
Administrateur de base de données
Inscription : avril 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme Youyou
Âge : 20
Localisation : Maroc

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Boutique - Magasin

Informations forums :
Inscription : avril 2011
Messages : 16
Points : 1
Points : 1
Envoyer un message via MSN à Prototype
Salut,

Comme je suis débutant, je n'arriverais pas tout seule, j'utilise un CMS que je modifie à mon niveau mais ce problème je n'arrive pas le comprendre, je sais que je devrais prendre des cours mais le temps presse et je dois le mettre enligne aujourd'hui ^^.

Si vous pouvez m’expliquer votre méthode je l'appliquerais et je vous dirais si sa marche.

MERCI !

[EDIT] J'ai tester ton code, sa ne donne rien, plutot un parse error ^^ [/EDIT]
[EDIT] JE comprends uniquement que le code demande à la base de donnée et fait une liste des personnage qui commence du plus haut niveau. [/EDIT]
Prototype est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 12h38   #4
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
Salut;

Pour la deuxième erreur c'est tout à fait naturel, parce que la première erreur empêche de créer un objet que tu utilises dans le ligne 57.
pour la première erreur la variable $perso n'est pas déclarée comme array!!

bonne chance.
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/04/2011, 12h40   #5
Invité de passage
 
Homme Youyou
Administrateur de base de données
Inscription : avril 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme Youyou
Âge : 20
Localisation : Maroc

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Boutique - Magasin

Informations forums :
Inscription : avril 2011
Messages : 16
Points : 1
Points : 1
Envoyer un message via MSN à Prototype
Citation:
Envoyé par omar24 Voir le message
pour la première erreur la variable $perso n'est pas déclarée comme array!!

bonne chance.
Comment faire en sorte qu'elle le soit ?

[EDIT] J'accepte de l'aide via TEAM-VIEWER [/EDIT]
Prototype est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 12h48   #6
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
il faut ecrire tout simplement avant la boucle
$perso = array();
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/04/2011, 12h51   #7
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
Aussi une autre chose essaye de faire comme t'a dit RunCodePhp d'utilser la boucle while qui est la plus adaptée.
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/04/2011, 12h54   #8
Invité de passage
 
Homme Youyou
Administrateur de base de données
Inscription : avril 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme Youyou
Âge : 20
Localisation : Maroc

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Boutique - Magasin

Informations forums :
Inscription : avril 2011
Messages : 16
Points : 1
Points : 1
Envoyer un message via MSN à Prototype
TROP FORT Omar un grand merci du fonds du coeur.

Si tu été là prêt de moi je t'aurais enlacer sa fait déjà 2 jours que je cherche une solution.


+1 et encore merci !!!!!!
Prototype est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 12h55   #9
Invité de passage
 
Homme Youyou
Administrateur de base de données
Inscription : avril 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme Youyou
Âge : 20
Localisation : Maroc

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Boutique - Magasin

Informations forums :
Inscription : avril 2011
Messages : 16
Points : 1
Points : 1
Envoyer un message via MSN à Prototype
Je remplace Whil par for?
Prototype est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 13h03   #10
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
Si le code marche ce n'est pas la peine mais à titre d'information presque tous les développeurs utilisent while au lieu de for quand ils veulent parcourir des informations provenant d'une base de données c'est très pratique.
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/04/2011, 13h05   #11
Invité de passage
 
Homme Youyou
Administrateur de base de données
Inscription : avril 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme Youyou
Âge : 20
Localisation : Maroc

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Boutique - Magasin

Informations forums :
Inscription : avril 2011
Messages : 16
Points : 1
Points : 1
Envoyer un message via MSN à Prototype
D'accord merci Omar, je note ceci. Encore un grand merci pour avoir résolu mon problème !
Prototype est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h08.


 
 
 
 
Partenaires

Hébergement Web