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

Résolu
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015 - 20 août 2011 à 22:21
kohntark Messages postés 3705 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 !

24 réponses

Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
23 août 2011 à 23:31
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 !
3
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
20 août 2011 à 23:25
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
0
cs_47 Messages postés 197 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 20 février 2013 1
20 août 2011 à 23:26
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
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
20 août 2011 à 23:30
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
21 août 2011 à 08:53
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 -
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
21 août 2011 à 16:53
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).
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
21 août 2011 à 20:26
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
22 août 2011 à 18:55
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 -
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
22 août 2011 à 19:22
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
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
22 août 2011 à 20:06
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".
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
22 août 2011 à 20:25
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(); }
?>
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
22 août 2011 à 20:44
<?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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
22 août 2011 à 21:32
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 -
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
22 août 2011 à 21:56
<?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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
22 août 2011 à 22:07
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 -
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
22 août 2011 à 22:08
arf, j'ai fait une petite erreur de frappe :

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



Kohntark -
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
22 août 2011 à 22:14
(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 -
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
23 août 2011 à 00:45
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
0
galled Messages postés 41 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 13 décembre 2012
23 août 2011 à 14:39
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"];
}
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
23 août 2011 à 18:53
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 -
0
Rejoignez-nous