Problème de mise à jour de données mysql [Réglé]
boucle while
Discussions Générales
Forensic Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre Forensic
- Inscrit le : 18/12/2006
Je sais que vous êtes très occupés soit par le retour aux études ou la sortie de la V2, mais j'ai une petite question sur lequel je commence à vouloir arracher les cheveux blancs que j'ai sur la tête. J'en ai juste six, hahah. Je récupère des player id dans ma base de données et je fais une boucle while pour allé chercher les données reliées à chaque player id sur un serveur externe. Ensuite, j'update ma table mysql avec ces données. C'est à cet endroit que le script foire.
J'obtiens ce message d'erreur:
Citation:
Erreur lors de la mise à jour des données: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
J'ai fais quelques recherches concernant ce message d'erreur, je ne suis pas sûr de tout capté les explications que j'ai lues.
Le code
[code]
<?php
$req = 'SELECT id FROM users';
$res = mysql_query($req) or die('Erreur lors de la sélection des données: '. mysql_error());
$count = mysql_num_rows($res);
while ($row = mysql_fetch_array($res)) {
$id = $row['id'];
$query_url = 'http://serveur.com/file.php?id=' . $id . '';
$results = @file($query_url);
if(isset($results) && is_array($results)) {
$descriptions = explode("t", $results[3]);
$values = explode("t", $results[4]);
for($i = 0; $i<count($values) ; $i++) {
$v[$descriptions[$i]] = $values[$i];
}
}
$score = $v['scor'];
$time = $v['time'];
$kill = $v['kill'];
$death = $v['deth'];
$req2 = "UPDATE users SET score='$score', time='$time', kills='$kill', deaths='$death' WHERE id='$id'";
$res2 = mysql_query($req2) or die('Erreur lors de la mise à jour des données: '. mysql_error());
if (!$res2) {
// On définit le message d'erreur
$erreur_maj_complete = 'Une erreur s'est produite lors de la mise à jour des données complètes!';
// On affecte la variable d'erreur au template
$template->assign_vars(array(
'ERREUR_MAJ_COMPLETE' => $erreur_maj_complete
));
// On parse le template
$template->pparse('erreur');
}
else {
$template->pparse('maj_complete_ok');
mysql_close($connect);
}
}
?>
[/code]
Le script bloque dès la ligne $req2. J'ai fait un echo $score; echo '<br>'; tout de suite après cette variable, et toutes les données que je suis sensé récupérer sont bien là. Toutefois, lorsque c'est le moment de mettre à jour la base de données avec les nouvelles données récupérées, ça plante avec le message inscrit plus haut.
edit: La connection au serveur mysql est fait dans un fichier externe que j'inclus au début du code que j'ai omis d'inscrire lorsque j'ai copié le code ici.
Une petite idée de la correction à faire?
Merci à l'avance,
Forensic
Édité par Forensic Le 15/09/2007 à 01h42
Chercher sur le forum - /Consulter la Documentation - Consulter la Foire aux Questions (FAQ)
Dire bonjour et merci, c'est toujours apprécié et pensez à mettre vos messages en Réglé!
CrowkaiT Membre non connecté
-
Modérateur
- Voir le profil du membre CrowkaiT
- Inscrit le : 17/06/2005
- Site internet
- Groupes :
-
Equipe Historique
Bonne chance pour la suite!
Pas de support par messages privés! Pensez à mettre vos messages en réglé en cliquant sur le bouton réglé!
Forensic Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre Forensic
- Inscrit le : 18/12/2006
Sans commentaire.
Forensic
Chercher sur le forum - /Consulter la Documentation - Consulter la Foire aux Questions (FAQ)
Dire bonjour et merci, c'est toujours apprécié et pensez à mettre vos messages en Réglé!
CrowkaiT Membre non connecté
-
Modérateur
- Voir le profil du membre CrowkaiT
- Inscrit le : 17/06/2005
- Site internet
- Groupes :
-
Equipe Historique
N'hésite surtout pas si tu as encore un problème!
Pas de support par messages privés! Pensez à mettre vos messages en réglé en cliquant sur le bouton réglé!
Snipefire Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre Snipefire
- Inscrit le : 09/09/2006
Forensic Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre Forensic
- Inscrit le : 18/12/2006
Encore un petit problème, non relié au premier, mais pour le même site. Je vais chercher dans ma base mysql les statistiques que j'ai récupérées sur le serveur externe pour les afficher. C'est un classement de statistiques.

Le problème est simple, je veux afficher le rang devant chaque pseudo. Mais comme vous voyez sur l'image ci-dessus, ça foire, encore.
Le code php:
[code]<?php
include 'fichiers/begin.php';
$template->set_filenames(array(
'header' => 'header.tpl',
'menuhaut' => 'menuhaut.tpl',
'menudroit' => 'menudroit.tpl',
'contenu' => 'contenu/liste_user.tpl',
'footer' => 'footer.tpl',
));
$template->pparse('header');
$template->pparse('menuhaut');
$class = $_GET['class'];
switch ($class) {
case 'pseudo':
$req = "SELECT pseudo,id,score,time,kills,deaths,kdratio,scoreparminute FROM users ORDER BY pseudo DESC";
$res = mysql_query($req) or die('Erreur lors de la requête pour afficher les users: '. mysql_error());
break;
case 'score':
$req = "SELECT pseudo,id,score,time,kills,deaths,kdratio,scoreparminute FROM users ORDER BY score DESC";
$res = mysql_query($req) or die('Erreur lors de la requête pour afficher les users: '. mysql_error());
break;
case 'time':
$req = "SELECT pseudo,id,score,time,kills,deaths,kdratio,scoreparminute FROM users ORDER BY time DESC";
$res = mysql_query($req) or die('Erreur lors de la requête pour afficher les users: '. mysql_error());
break;
case 'kills':
$req = "SELECT pseudo,id,score,time,kills,deaths,kdratio,scoreparminute FROM users ORDER BY kills DESC";
$res = mysql_query($req) or die('Erreur lors de la requête pour afficher les users: '. mysql_error());
break;
case 'deaths':
$req = "SELECT pseudo,id,score,time,kills,deaths,kdratio,scoreparminute FROM users ORDER BY deaths DESC";
$res = mysql_query($req) or die('Erreur lors de la requête pour afficher les users: '. mysql_error());
break;
case 'kdratio':
$req = "SELECT pseudo,id,score,time,kills,deaths,kdratio,scoreparminute FROM users ORDER BY kdratio DESC";
$res = mysql_query($req) or die('Erreur lors de la requête pour afficher les users: '. mysql_error());
break;
case 'spm':
$req = "SELECT pseudo,id,score,time,kills,deaths,kdratio,scoreparminute FROM users ORDER BY scoreparminute DESC";
$res = mysql_query($req) or die('Erreur lors de la requête pour afficher les users: '. mysql_error());
break;
default:
$req = "SELECT pseudo,id,score,time,kills,deaths,kdratio,scoreparminute FROM users ORDER BY score DESC";
$res = mysql_query($req) or die('Erreur lors de la requête pour afficher les users: '. mysql_error());
break;
}
$count = mysql_num_rows($res);
$i = 1;
while($row = mysql_fetch_array($res)) {
$template->assign_block_vars('users', array(
'PSEUDO' => $row['pseudo'],
'ID' => $row['id'],
'SCORE' => $row['score'],
'TIME' => convertTime($row['time']),
'KILLS' => $row['kills'],
'DEATHS' => $row['deaths'],
'KDR' => $row['kdratio'],
'SPM' => $row['scoreparminute'],
));
for ($i; $i <= $count; $i++) {
$rank = $i;
$template->assign_block_vars('users.rank', array(
'RANK' => $rank
));
}
}
$template->pparse('contenu');
$template->pparse('menudroit');
$template->pparse('footer');
ob_end_flush();
?>[/code]
Le code html:
[code]<div id="contenu">
<div class="contenu-header">
Classement des Joueurs
</div>
<div class="contenu">
Vous pouvez trier le classement dans l'ordre que vous voulez à l'aide des entêtes de colonnes.
</div><br />
<table class="users">
<tr>
<td class="underline bold center">Rang</td>
<td class="underline bold center"><a class="liens-mh" href="classement.php?class=pseudo">Pseudo</a></td>
<td class="underline bold center">Player ID</td>
<td class="underline bold center"><a class="liens-mh" href="classement.php?class=score">Score</a></td>
<td class="underline bold center"><a class="liens-mh" href="classement.php?class=time">Temps Joué</a></td>
<td class="underline bold center"><a class="liens-mh" href="classement.php?class=kills">Kills</a></td>
<td class="underline bold center"><a class="liens-mh" href="classement.php?class=deaths">Deaths</a></td>
<td class="underline bold center"><a class="liens-mh" href="classement.php?class=kdratio">K./D. Ratio</a></td>
<td class="underline bold center"><a class="liens-mh" href="classement.php?class=spm">Score par Minute</a></td>
</tr>
<!-- BEGIN users -->
<tr>
<!-- BEGIN rank -->
<td class="center">{users.rank.RANK}</td>
<!-- END rank -->
<td class="center">{users.PSEUDO}</td>
<td class="center"><a class="liens-mh" href="maj_utilisateur.php?id={users.ID}">{users.ID}</a></td>
<td class="center">{users.SCORE}</td>
<td class="center">{users.TIME}</td>
<td class="center">{users.KILLS}</td>
<td class="center">{users.DEATHS}</td>
<td class="center">{users.KDR}</td>
<td class="center">{users.SPM}</td>
</tr>
<!-- END users -->
</table>
</div>
[/code]
Je veux que le rang soit affiché dans la colonne Rang. Le problème est entre autre dans le code html du template. C'est logique que ça s'affiche à l'horizontal. Le <td> contenant le rang se duplique dans le <tr>. C'est donc normal que ça s'affiche ainsi.
J'ai pensé le mettre dans une table séparé ou dans un <tr> séparé, le résultat est pas super. Encore un peu d'aide serait apprécié.
Bonne fin de soirée à tous!
Forensic
PS. Pour le switch, est-ce qu'il y a plus optimal, surtout au niveau sécurité?
Édité par Forensic Le 16/09/2007 à 01h02
Chercher sur le forum - /Consulter la Documentation - Consulter la Foire aux Questions (FAQ)
Dire bonjour et merci, c'est toujours apprécié et pensez à mettre vos messages en Réglé!
Forensic Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre Forensic
- Inscrit le : 18/12/2006
J'ai remplacé:
[code]
while($row = mysql_fetch_array($res)) {
$template->assign_block_vars('users', array(
'PSEUDO' => $row['pseudo'],
'ID' => $row['id'],
'SCORE' => $row['score'],
'TIME' => convertTime($row['time']),
'KILLS' => $row['kills'],
'DEATHS' => $row['deaths'],
'KDR' => $row['kdratio'],
'SPM' => $row['scoreparminute'],
));
for ($i; $i <= $count; $i++) {
$rank = $i;
$template->assign_block_vars('users.rank', array(
'RANK' => $rank
));
}
}
[/code]
par:
[code]
$i = 1;
while($row = mysql_fetch_array($res)) {
$template->assign_block_vars('users', array(
'RANK' => $i,
'PSEUDO' => $row['pseudo'],
'ID' => $row['id'],
'SCORE' => $row['score'],
'TIME' => convertTime($row['time']),
'KILLS' => $row['kills'],
'DEATHS' => $row['deaths'],
'KDR' => $row['kdratio'],
'SPM' => $row['scoreparminute'],
));
$i++;
}
[/code]
et ça fonctionne!
Bonne journée, merci encore.
Forensic
Chercher sur le forum - /Consulter la Documentation - Consulter la Foire aux Questions (FAQ)
Dire bonjour et merci, c'est toujours apprécié et pensez à mettre vos messages en Réglé!
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
Par contre pour la switch j'ai une solution plus simple, la voici.
[code]
<?php
//Définition du critère sur lequel on va ordonner
//Liste des critères possibles
$criteres_possibles = array('pseudo', 'score', 'time', 'kills', 'death', 'kdratio', 'scoreparminute');
//Si le critère n'est pas choisi on met le score
$critere = !empty($_GET['class']) ? $_GET['class'] : 'score';
//Si un critère est choisi on vérifie qu'il existe
$critere = in_array($_GET['class'], $criteres_possibles) ? $_GET['class'] : 'score';
//Puis pour la requête tu mets
$req = "SELECT pseudo,id,score,time,kills,deaths,kdratio,scoreparminute FROM users ORDER BY '" . $critere . "' DESC";
$res = mysql_query($req) or die('Erreur lors de la requête pour afficher les users: '. mysql_error());
?>[/code]
J'espère avoir répondu à ta question clairement.
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
CrowkaiT Membre non connecté
-
Modérateur
- Voir le profil du membre CrowkaiT
- Inscrit le : 17/06/2005
- Site internet
- Groupes :
-
Equipe Historique
Pas de support par messages privés! Pensez à mettre vos messages en réglé en cliquant sur le bouton réglé!
Snipefire Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre Snipefire
- Inscrit le : 09/09/2006
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie