Changer?

develop_adn Messages postés 7 Date d'inscription samedi 13 août 2016 Statut Membre Dernière intervention 4 décembre 2016 - Modifié par KX le 26/08/2016 à 08:10
 develop_adn - 29 août 2016 à 00:28
Bonjour,
qui peut m'aider à modifier ce code pour eviter ce msg d'erreur:

Warning: mysql_num_fields() expects parameter 1 to be resource, object given in C:\wamp\www\formulaire\afficher_plsrs tbl\afficherResultat.php on line 8

et aussi:
Warning: mysql_fetch_row() expects parameter 1 to be resource, object given in C:\wamp\www\formulaire\afficher_plsrs tbl\afficherResultat.php on line 10

code:
<?php
//affichage partiel des results d'une reqte
//creation d'un tbleau html avec autant de colonnes que d'attributs
//on affiche $pNbLignes lignes à partir de la ligne indiquée par $pPosition
function afficherResultat($pResultat,$pPosition,$pNbLignes){
 echo "<table border='1'>";
 $compteurLignes=1;
 mysql_num_fields($pResultat);
 $nbAttributs=mysql_num_fields($pResultat);
 while ($tableAttributs=mysql_fetch_row($pResultat)){
  //avant la 1ere ligne on affiche
  //on affiche l'entete du tableau html avec le nom des attributs
  if($compteurLignes==1){
   echo "<tr>";
   //affichage des noms d'attributs
   for($i=0;$i<$nbAttributs;$i++)
    echo "<th>".mysql_field_name($pResultat,$i)."</th>\n";
  }
  //pour chaque ligne comprise entre la 1ere($pPosition) et la derniere($pPosition+$pNbLignes-1)
  //on affiche les valeurs de chaque attributs
if($compteurLignes >= $pPosition 
and $compteurLignes <= $pPosition+$pNbLignes-1){
 echo "<tr>";
 for($i=0;$i<$nbAttributs;$i++){
  //le champ est vide
  if(empty($tableAttributs[$i])) $tableAttributs[$i]="";
  echo "<td>".$tableAttributs[$i]."</td>";
 }
 echo "</tr>\n";
}
//incremente le compteur
$compteurLignes++;
//inutile de continuer si tout est affiché
if($compteurLignes >= $pPosition+$pNbLignes-1) break;
 }
 echo "</table>\n";
}
?>

2 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
26 août 2016 à 10:14
Bonjour,

Pour commencer.... attention tu utilises l'ancienne extension mysql considérée comme Obsolète.
Je t'invite fortement à passer à Mysqli ou (je préfère...) PDO.
http://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
http://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli
http://www.commentcamarche.net/faq/27489-pdo-une-autre-facon-d-acceder-a-vos-bases-de-donnees


Ensuite.... nous ne savons rien de ta variable $pResultat. Le souci vient vraisemblablement de là....

0
merci
le probleme est que je travaille ici par l'API mysql et non pas avec mysqli recemment recommandé par php.net...

mais le probleme est comment adapter mes codes avec la nouvelle approche car j'ai essayé de changer tous les mysql en mysqli et j'ai pas arrivé à une solution(toujours il y a des msg d'erreur...etc).

voilà le code qui appelle cette fonction que j'ai publié là-dessus pouvez vous m'aider et merci: (affichageMultipages.php)

<!Doctype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""
http://www.w3.org/TR/xhtml1/DTD/xhtml-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html" charset="utf-8" />
<title>affichage multipages</title>

</head>
<body>
<?php
require("fonctionBDD.php");
require("constantes.php");
require("afficherResultat.php");
define ("NB_LIGNES",5);
$connexion=mysql_connect(SERVEUR,NOM_SERVEUR,MOT_PASSE,NOM_BASE);
//on initialise la position
if(isSet($_GET["position"])) $position=$_GET['position'];
else $position=1;
//on cree le formulaire de saisie de requete
echo "<form action='affichageMultipages.php' method='post'>\n";
echo "<textarea name='requete' cols='50' rows='4'>";
//si on reçoit une requete en POST ou en GET
if(isSet($_REQUEST['requete'])) $requete=urldecode($_REQUEST['requete']);
else $requete="SELECT * FROM utilisateurs ORDER BY nom";
//affiche la requete ds le chmps textarea
echo $requete;
echo "</textarea>\n";
echo "<br/>";
echo "<input name='submit' type='submit' value='Executer' />\n";
echo "</form>\n";

//on excute la reqte
$resultat=mysql_query($connexion,$requete);
//on affich le tabl html avec Nb lignes à partir de la ligne $position
afficherResultat($resultat,$position,NB_LIGNES);
//on calcule les positions avt et apres
$positionAvant=$position-NB_LIGNES;
$positionApres=$position+NB_LIGNES;
$requeteCode=urlEncode($requete);
//s'il ya des lignes avant la 1ere affichée
if($positionAvant >0)
echo "<a href='affichageMultipages.php?position=$positionAvant&requete=$requeteCode' rel="nofollow" target="_blank"><<page précédente</a>\n";
//s'il ya des lignes apres la derniere affichee
if($positionApres<= mysql_num_rows($resultat))
echo "<a href='affichageMultipages.php?position=$positionApres&requete=$requeteCode' rel="nofollow" target="_blank">page suivante>></a>\n";
?>
</body>
</html>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
28 août 2016 à 23:21

j'ai essayé de changer tous les mysql en mysqli et j'ai pas arrivé à une solution(toujours il y a des msg d'erreur...etc).

Il ne suffit pas de mettre un "i" à la fin pour que ça marche.....
Tu dois adapter le code de tes fonctions.....
Pour ça il te suffit de lire la doc des différentes fonctions pour savoir comment les écrire.....

par exemple, pour la connexion :
http://www.w3schools.com/php/func_mysqli_connect.asp

Puis pour faire une requête
http://php.net/manual/fr/mysqli.query.php
ou un exemple plus complet :
http://www.w3schools.com/php/func_mysqli_query.asp

...
je te laisse faire ces modifications avant de revenir nous voir avec ton code si ça ne fonctionne toujours pas.
0
develop_adn > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
29 août 2016 à 00:28
merci bcp je vais essayer
0
Rejoignez-nous