Mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result [Résolu]

Messages postés
863
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015
- - Dernière réponse : kohntark
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
- 9 sept. 2011 à 08:11
Salut !

Pouvez-vous me dire ce que signifie cette erreur svp ?
mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 6 in


Voici mon code source :
<?php
include("../conf.php"); include("../fonctions.php"); include("../verif.php");

if (empty($_GET["idadmin"]));
$idadmin = $_GET["idadmin"];
$r = mysql_query("SELECT * FROM Adm_Connection WHERE idadmin='$idadmin';");
if (mysql_num_rows($r)==0);

$login 	= mysql_result($r,0,"login");
$email 	= mysql_result($r,0,"email");
$prenom = mysql_result($r,0,"prenom");
$nom 	= mysql_result($r,0,"nom");
$site 	= mysql_result($r,0,"site");
$msn 	= mysql_result($r,0,"msn");
$aim 	= mysql_result($r,0,"aim");
$yahoo 	= mysql_result($r,0,"yahoo");
$jabber = mysql_result($r,0,"jabber");
$gmail 	= mysql_result($r,0,"gmail");
$renseignements = mysql_result($r,0,"renseignements");
?>


Merci

----------
OS : Windows XP SP3 et Vista 32
Platforme : VB 6.0 + SP6
Ok VB6.0 c'est pas net !
Afficher la suite 

20/24 réponses

Meilleure réponse
Messages postés
863
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015
3
Merci
Salut à tous et merci pour toute votre aide.
En fait, j'ai relu tous les postes pour savoir où j'en suis. Une idée m'étais venue, celle de revoir où je fais mention de id_admin et j'ai remarqué que dans le démarrage de session, dans mon verif.php, j'ai fais appel à $s_idadmin qui lui, charge l'idadmin de l'user en cours.
Etant donné que l'idadmin st un chiffre incrémenté automatiquement, il ne pouvait donner le résultat (je penses) et donc faisait les erreurs de non affichage que je rencontrais.

Ceci dit, voici le résultat final :
<?php
include("../conf.php"); include("../fonctions.php"); include("../verif.php");

$sql = "SELECT * FROM Adm_Connection WHERE idadmin='".$s_idadmin."'";
$requete=mysql_query($sql);
$data = mysql_fetch_assoc($requete);
mysql_close();
?>

<?php echo htmlentities($data['login']); ?>
<?php echo htmlentities($data['nom']); ?>
<?php echo htmlentities($data['email']); ?>

Et là, je reçois un affichage comme il se doit.
On avais tous oublié le $s_idadmin = $_SESSION["idara"]["admin"]["idadmin"]; de verif.php

En tout cas, merci infiniment pour votre aide et votre gentillesse et surtout votre patience pour m'avoir écouté et filé autant de coups de mains.

Encore un grand merci à tous les gars !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Sinsitrus
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
if (mysql_num_rows($r)==0) die("pas de résultat");


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Commenter la réponse de cs_ghuysmans99
Messages postés
197
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
20 février 2013
1
0
Merci
bonsoir,

es tu sur que ta requete renvoie une ligne et que tu ne demandes pas un identifiant qui n'existe pas ?

bonne soirée
Commenter la réponse de cs_47
Messages postés
863
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015
0
Merci
Voici l'édition du code :
<?php
include("../conf.php"); include("../fonctions.php"); include("../verif.php");

if (empty($_GET["idadmin"])){
$idadmin = $_GET["idadmin"];
$r = mysql_query("SELECT * FROM Adm_Connection WHERE idadmin='$idadmin';");
if (mysql_num_rows($r)!=0) {
$login 	= mysql_result($r,0,"login");
$email 	= mysql_result($r,0,"email");
$prenom = mysql_result($r,0,"prenom");
$nom 	= mysql_result($r,0,"nom");
$site 	= mysql_result($r,0,"site");
$msn 	= mysql_result($r,0,"msn");
$aim 	= mysql_result($r,0,"aim");
$yahoo 	= mysql_result($r,0,"yahoo");
$jabber = mysql_result($r,0,"jabber");
$gmail 	= mysql_result($r,0,"gmail");
$renseignements = mysql_result($r,0,"renseignements");
}}
?>

Là je n'ai plus d'erreur, mais aucun resultat ne s'affiche dans
<?php echo("$login"); ?>


Ai-je omis quelque chose ?
idadmin est l'identifiant (id) dans ma table
Les restes sont justes...
Commenter la réponse de Sinsitrus
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
Salut,


Là je n'ai plus d'erreur, mais aucun resultat ne s'affiche dans


Est ce que "login" contient bien une valeur ?
Est ce que ce champ est écrit correctement (un espace qui se balade qqpart, etc ...) ?

Tu ne devrais pas utiliser mysql_result() mais mysql_fetch_*, plus simple et plus adapté (l'idéal étant d'utiliser PDO ou mysqli())
Il faut également penser à traiter les données provenant de l'utilisateur pour éviter les erreurs et les injections SQL

Cordialement,


Kohntark -
Commenter la réponse de kohntark
Messages postés
863
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015
0
Merci
Salut !

Oulà, vous êtes partis trop loin :D je ne connais rien à tout ça :D
Il y a juste quelques 7 ou 8 jours que je fais du php. Je prends des cours avec le site du zero pour avancer :D

Le code source que je vous ai donné plus haut provient d'une page d'un script déjà fini que j'ai modifié moi même pour me donner le résultat que je souhaite (infos client).
Commenter la réponse de Sinsitrus
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
Ajoute un else pour dire qu'il n'y a pas de résultat ...

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Commenter la réponse de cs_ghuysmans99
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
Oulà, vous êtes partis trop loin :D je ne connais rien à tout ça :D
Il y a juste quelques 7 ou 8 jours que je fais du php. Je prends des cours avec le site du zero pour avancer :D

Raison de plus pour partir sur de bonnes bases et ne pas prendre de mauvaises habitudes.
Les fonctions mysql_* sont dépréciées et ne devraient plus être utilisées.
C'est tout de même dommage d'apprendre des choses qui sont vouées à disparaitre non ?
C'est pour cela que je te conseillais PDO ou mysqli (cf doc sur php.net)

Ca peut te paraitre complexe, et je le comprends, mais il est indispensable que tu prennes le temps de te renseigner sur ces injections SQL (voir aussi mysql_real_escape_string())
Sans ça n'importe qui s'identifie sans problème en admin.

Ton script devrait fonctionner. J'attends que tu veilles bien répondre aux 2 questions simples posées.
Est ce que "login" contient bien une valeur ?
Est ce que ce champ est écrit correctement (un espace qui se balade qqpart, etc ...) ?


Cordialement,


Kohntark -
Commenter la réponse de kohntark
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
Les fonctions mysql_* sont dépréciées et ne devraient plus être utilisées.
Source ? Pas vu dans la doc officielle

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Commenter la réponse de cs_ghuysmans99
Messages postés
863
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015
0
Merci
Merci à toi ghuysmans99 pour ta précieuse aide.
Peux tu me donnée des pages où mieux apprendre php et mysql ?

En attendant, j'ai édité mon code comme suite :
<?php
include("../conf.php"); include("../fonctions.php"); include("../verif.php");

$sql = "SELECT * FROM Adm_Connection WHERE idadmin=idadmin";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
$data = mysql_fetch_assoc($req);
mysql_close();
?>

<?php echo ($data['login']); ?>
<?php echo ($data['email']); ?>

Là par contre il affiche les infos, mais du premier utilisateur de ma base de données. Je n'arrives pas à lui préciser "l'utilisateur en cours".
Commenter la réponse de Sinsitrus
Messages postés
863
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015
0
Merci
KohnTark, je te remerci aussi pour ton aide.
Est ce que "login" contient bien une valeur ?
Est ce que ce champ est écrit correctement (un espace qui se balade qqpart, etc ...) ?

- login est le nom de l'utilisateur lors de sa connexion. Normalement oui il contient une valeur dans la table MySQL
- Non, il est bien écrit. Tout en minuscule et 'login' est correct.
Mais comme j'ai dis plus haut, j'ai édité mon code et là je ne reçois que les résultats du premier enregistrement de ma table... comment lui préciser que je veux celui de l'utilisateur en cours ?

ps: Fichier verif.php
<?php
if (empty($_SESSION["idara"]["admin"])) { header("location: ".DOSSIER_ADMIN."logout.php"); exit(); }

$s_idadmin = $_SESSION["idara"]["admin"]["idadmin"];
$s_login = $_SESSION["idara"]["admin"]["login"];
$s_password = $_SESSION["idara"]["admin"]["password"];

$r = mysql_query("select * from Adm_Connection where login='".addslashes($s_login)."' and password='".addslashes($s_password)."' ;");
if (mysql_num_rows($r)==0) { header("location: ".DOSSIER_ADMIN."logout.php"); exit(); }
?>
Commenter la réponse de Sinsitrus
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
<?php
include("../conf.php"); include("../fonctions.php"); include("../verif.php");

$idadmin = (int) ???; //insérer ici la variable à utiliser dans le SQL (castée en int pour éviter les injections SQL)
$sql = "SELECT * FROM Adm_Connection WHERE idadmin=$idadmin"; //pas de SELECT * si tu n'utilises que 2 champs. SELECT login,email [...]
$req = mysql_query($sql);
while ($data = mysql_fetch_assoc($req))
{
echo("{$data['login']} {$data['email']}
\n");
}
mysql_close();
?>


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Commenter la réponse de cs_ghuysmans99
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
Source ? Pas vu dans la doc officielle

J'employais "dépréciées" dans le sens vieillotes, pas dans celui d'une erreur PHP "DEPRECATED", mais ça viendra sans doute assez vite, ... quoiqu'il y a encore tellement de gens qui les utilise, alors qu'il y la simplicité et la puissance de PDO / mysqli() à côté.

On en revient toujours aux problèmes des tutos qui datent et que suivent les débutants

Le développement des fonctions mysql_* est abandonné et elles ne sont plus recommandées depuis pas mal de temps il me semble.

Débuter avec elles me semble une mauvaise idée.

Pour la doc c'est ici :
http://fr.php.net/manual/en/mysqli.overview.php

Quelques remarques au passage :
location: machintruc c'est L
ocation: machintruc
die('Erreur SQL !
'.$sql.'
'.mysql_error()); => a n'utiliser que pour le débogage, sinon tu fournis des informations utiles à une attaque avec le message du die()


Cordialement,

Kohntark -
Commenter la réponse de kohntark
Messages postés
863
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015
0
Merci
<?php
include("../conf.php"); include("../fonctions.php"); include("../verif.php");

$idadmin = 'idadmin';
$sql = mysql_query("SELECT * FROM Adm_Connection WHERE idadmin=$idadmin");
while ($data = mysql_fetch_assoc($sql))
{
echo("{$data['login']} {$data['email']}
\n");
}
mysql_close();
?>

Même si je n'ai pas bien compris l'injection MySQL, voilà ce que j'ai comme résultat :
La liste de tout mes utilisateurs.
Or vu que c'est une session utilisateur et que je ne dois avoir que les infos de l'utilisateur en cours... le while ne me sert pas à grand chose
Commenter la réponse de Sinsitrus
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
le while ne me sert pas à grand chose

Bah vire le !!

<?php
$data = mysql_fetch_assoc($sql); // retourne un tableau

// affichage de l'index 'login' et 'email' du tableau
echo $data['login'].' .'$data['email'].'
';
?>



Cordialement,

Kohntark -
Commenter la réponse de kohntark
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
arf, j'ai fait une petite erreur de frappe :

echo $data['login'].' '.$data['email'].'
';



Kohntark -
Commenter la réponse de kohntark
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
(désolé pour le multi post)
voilà ce que j'ai comme résultat :
La liste de tout mes utilisateurs.

... pas normal, ta requête ne doit retourner qu'un seul enregistrement, sinon ça veut dire que tu as plusieurs utilisateurs ayant le même id.

Peut on voir la structure de ta base ?

Par ailleurs :
<?php
$idadmin = 'idadmin'; // c'est une string
// il faut donc l'encadrer de "'" dans la requête, contrairement à un int
//$sql = mysql_query("SELECT * FROM Adm_Connection WHERE idadmin=$idadmin");
$sql = mysql_query("SELECT * FROM Adm_Connection WHERE idadmin='$idadmin'");
?>



Cordialement,

Kohntark -
Commenter la réponse de kohntark
Messages postés
863
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015
0
Merci
Voici la structure de ma table :
CREATE TABLE IF NOT EXISTS `Adm_Connection` (
  `idadmin` int(1) NOT NULL AUTO_INCREMENT,
  `login` varchar(20) NOT NULL,
  `password` varchar(35) NOT NULL,
  `prenom` varchar(35) NOT NULL,
  `nom` varchar(35) NOT NULL,
  `email` varchar(35) NOT NULL,
  `site` varchar(35) DEFAULT NULL,
  `msn` varchar(35) DEFAULT NULL,
  `aim` varchar(35) DEFAULT NULL,
  `yahoo` varchar(35) DEFAULT NULL,
  `jabber` varchar(35) DEFAULT NULL,
  `gmail` varchar(35) DEFAULT NULL,
  `renseignements` text,
  PRIMARY KEY (`idadmin`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Mon code en haut du header
<?php
include("../conf.php"); include("../fonctions.php"); include("../verif.php");

$idadmin = 'idadmin';
$sql = mysql_query("SELECT * FROM Adm_Connection WHERE idadmin='$idadmin'");
$data = mysql_fetch_assoc($sql);
mysql_close();
?>

Mon code dans le body
<?php echo ($data['login']); ?>

<?php echo ($data['email']); ?>

<?php echo ($data['nom']); ?>

<?php echo ($data['prenom']); ?>

Le reste des infos client
Commenter la réponse de Sinsitrus
Messages postés
41
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
13 décembre 2012
0
Merci
Je suis pas sûr de comprendre. Ton idadmin est un integer ou un string? Dans ta table du le déclare comme un int `idadmin` int(1) NOT NULL AUTO_INCREMENT, et tu viens écraser ta variable $idadmin = 'idadmin'; en string...

Déjà si tu veux comparer deux strings en sql tu dois faire LIKE 'variable' et dans ton cas si c'est bien un int comme déclarer dans ta table tu dois faire WHERE idadmin = $idadmin. Et que ce soit un chiffre qu'il y est dans ta variable $idadmin.

Ensuite je crois que tu peux faire:
while ($row = mysql_fetch_assoc($result)) {
echo $row["userid"];
echo $row["fullname"];
echo $row["userstatus"];
}
Commenter la réponse de galled
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
Salut Galled,

Ensuite je crois que tu peux faire:
while ($row = mysql_fetch_assoc($result)) {
echo $row["userid"];
echo $row["fullname"];
echo $row["userstatus"];
}

Comme je l'ai dit plus haut la boucle ne sert à rien puisqu'il n'y a, ou plutôt devrait, n'y avoir qu'un seul résultat.
mysql_fetch_assoc() retourne un tableau pour chaque ligne de résultat, inutile donc de jouer avec le pointeur interne.

Pour le reste, oui, je ne comprends pas non plus cette histoire d'idadmin.
D'ailleurs la requête ne devrait retourner aucun résultat. Il y a quelque chose de louche là.


Cordialement,

Kohntark -
Commenter la réponse de kohntark