PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 27-08-2016 06:00:53

develop_adn
Membre
Inscription : 13-08-2016
Messages : 4

mysql ou mysqli?

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

afficherResultat.php:

<?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";
}
?>

et qui a été appelée par ceci:(affichageMultipages.php)


<!Doctype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""
[url=http://www.w3.org/TR/xhtml1/DTD/xhtml-transitional.dtd>]http://www.w3.org/TR/xhtml1/DTD/xhtml-transitional.dtd">[/url]
<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'><<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'>page suivante>></a>\n";
?>
</body>
</html>

quel est le probleme svp merci


Hors ligne

#2 29-08-2016 14:06:27

ManicoW
Cowrespondant
Lieu : Tours
Inscription : 08-05-2009
Messages : 190
Site Web

Re : mysql ou mysqli?

Bonjour,

Typiquement cela veut dire que le résultat de la requête n'est pas bon. Il n'y a en effet rien qui vérifie que $resultat soit bien une ressources mysql après la ligne


$resultat=mysql_query($connexion,$requete);
 

Du coup lors de l'appel à la fonction, il est possible que $resultat ne soit pas une ressource mysql, et paf, les warning.

Un truc du genre


$resultat=mysql_query($connexion,$requete);
if($resultat) {
 // Le code de traitement
} else {
 // Le code quand on a une erreur
 echo 'Erreur SQL !'.$requete;
}
 

J'ai déjà une idée du problème qui cause l'erreur SQL, mysql_query attends comme paramètre d'abord la requête et ensuite l'identifiant de connexion (facultatif d'ailleurs) là ou mysqli_query prend les paramètres dans l'autre sens, de mémoire.

@+


la v2, c'est tabou, on en viendra tous a bout

Hors ligne

#3 29-08-2016 15:56:59

develop_adn
Membre
Inscription : 13-08-2016
Messages : 4

Re : mysql ou mysqli?

merci
le probleme est que je travaille ici par l'API mysql et non pas avec mysqli recemment recommandé par php.net("Il est recommandé d'utiliser soit l'extension mysqli, soit l'extension PDO_MySQL. Il n'est pas recommandé d'utiliser l'ancienne extension mysql pour de nouveaux développements sachant qu'elle est obsolète depuis PHP 5.5.0, et sera supprimée dans un futur proche. Une matrice de comparaison détaillant les fonctionnalités est fournie ci-dessous. La performance globale des 3 extensions peut être considérée comme identique. Malgré tout, la performance de l'extension constitue seulement une fraction du temps total d'exécution d'une requête web PHP. Aussi, l'impact est inférieur à 0.1%.").

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).
et maintenant c resolu par la nvlle aprche

Hors ligne

Pied de page des forums