PHP|Débutant :: Forums

Advertisement

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

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

#1 Re : Forum Général PHP » Commande SELECT avec LIMIT: pas le bon nombre de résultats » 15-06-2010 22:31:55

oui, j'ai la réponse pour calculer le nb de ligne (ça ne fonctionne pas encore mais ça ve venir hmm) mais pour l'affichage.
Je te mets mon code à tout hasard finalement big_smile

function barre_navigation ($nb_total,
    $nb_affichage_par_page,
    $debut,
    $nb_liens_dans_la_barre)
{
  $barre = '';

  // on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
  if ($_SERVER['QUERY_STRING'] == "")
  {
    $query = $_SERVER['PHP_SELF'].'?debut=';
  }
  else
  {
    $tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
    $nb_element = count ($tableau);
    if ($nb_element == 1)
    {
      $query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
    }
    else
    {
      if ($tableau[0] == "")
      {
        $query = $_SERVER['PHP_SELF'].'?debut=';
      }
      else
      {
        $query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
      }
    }
  }

  // on calcule le numéro de la page active
  $page_active = floor(($debut/$nb_affichage_par_page)+1);
  // on calcule le nombre de pages total que va prendre notre affichage
  $nb_pages_total = ceil($nb_total/$nb_affichage_par_page);

  // on calcule le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
  // exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
  if ($nb_liens_dans_la_barre%2==0)
  {
    $cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
    $cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
  }
  else
  {
    $cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
    $cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
  }

  if ($cpt_deb1 <= 1)
  {
    $cpt_deb = 1;
    $cpt_fin = $nb_liens_dans_la_barre;
  }
  elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total)
  {
    $cpt_deb = $cpt_deb1;
    $cpt_fin = $cpt_fin1;
  }
  else
  {
    $cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
    $cpt_fin = $nb_pages_total;
  }

  if ($nb_pages_total <= $nb_liens_dans_la_barre)
  {
    $cpt_deb=1;
    $cpt_fin=$nb_pages_total;
  }

  // si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
  if ($cpt_deb != 1)
  {
    $cible = $query.(0);
    $lien = '<A HREF="'.$cible.'"><<</A>  ';
  }
  else
  {
    $lien='';
  }
  $barre .= $lien;

  // on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
  for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++)
  {
    if ($cpt == $page_active)
    {
      if ($cpt == $nb_pages_total)
      {
        $barre .= $cpt;
      }
      else
      {
        $barre .= $cpt.' - ';
      }
    }
    else
    {
      if ($cpt == $cpt_fin)
      {
        $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
        $barre .= "'>".$cpt."</A>";
      }
      else
      {
        $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
        $barre .= "'>".$cpt."</A> - ";
      }
    }
  }

  $fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
  if (($nb_total % $nb_affichage_par_page) == 0)
  {
    $fin = $fin - $nb_affichage_par_page;
  }

  // si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
  if ($cpt_fin != $nb_pages_total)
  {
    $cible = $query.$fin;
    $lien = '  <A HREF="'.$cible.'">>></A>';
  }
  else
  {
    $lien='';
  }
  $barre .= $lien;

  return $barre;
}

#2 Re : Forum Général PHP » Commande SELECT avec LIMIT: pas le bon nombre de résultats » 15-06-2010 22:31:55

oups, OK je vois mon erreur.
Je dois donc avoir un problème dans mon code global alors car je n'arrive pas à afficher mes résultats sur plusieurs pages.

Mon code réel est le suivant:

$req = $bdd->prepare('SELECT * FROM jos_annonces LIMIT '.$_GET['debut'].','.$nb_affichage_par_page);
$req->execute(array());
$nb_resultats = $req->rowCount();

nb_affichage_par_page est initialisé à 3 --> sensé me limiter le nombre d'affichage par page à 3 lignes
$_GET['debut'] --> c'est la valeur du premier enrégistrement de chaque page (pour la page 1 => 0; pour la page 2 => 3; etc ...)

Le $nb_resultat est toujours 3, ce qui semble logique vu ton message. Comment calculer le nombre résultat de ma commande SELECT ET gérer l'affichage à 3 lignes par page ? C'est ça que je je n'arrive pas à faire

PS: je te fais grace du code de ma fonction fonction de calcul pour la page à afficher ...

#3 Forum Général PHP » Commande SELECT avec LIMIT: pas le bon nombre de résultats » 15-06-2010 22:31:55

frlobe
Réponses : 4

Bonjour
je cherche à limiter l'affichage par page du résultat de ma requête. Vu que çe ne fonctionnait pas avec des variables, je suis revenu à la méthode de base.
Mon code est le suivant:

$req = $bdd->prepare('SELECT * FROM jos_annonces LIMIT 0, 3');
$req->execute(array());
$nb_resultats = $req->rowCount();
print $nb_resultats

Le problème est $nb_resultat=3 alors que ma BdD contient 6 lignes. Je ne vois pas où est le souci ...
Merci d'avance de vos lumières.

#4 Re : Forum Général PHP » URL et consultation d'une base de données sql » 06-05-2010 01:59:23

Bon, j'ai finalement résolu mon problème en le contournant: j'utilise un bouton "voir" qui transmet ma variable.

#5 Re : Forum Général PHP » URL et consultation d'une base de données sql » 06-05-2010 01:59:23

OK merci. Je vais retourner lire Joomla. Mais tous mes $post fonctionnent à ce jour ... sauf celui là ...:(
A plus

#6 Re : Forum Général PHP » URL et consultation d'une base de données sql » 06-05-2010 01:59:23

mon fichier emploi.php est composé d'une succesion de if(isset) car j'ai plusieurs possibilité (recherche d'annonce, dépôt d'annonce notamment). Donc si je sélectionne recherche d'annonce, mon script entre dans un if(isset($_post)), recherche dans la BdD et affiche les résultats trouvés avec 3 champs pour chaque annonce listée. Je sors du if(isset).
Si je clique sur un des liens du tableau, je pense qu'il faut "relancer "emploi.php" et entrer dans un if(isset ($_get('id'))), avec l'ide qui aura récupéré dans l'URL du tableau. Sauf que ça ne marche pas car le fichier emploi.php ne se relance pas comme pour les i(isset($_post)).
Vu que j'utilise un 2ème if(isset() avec le get, je relance une recherche sur ma BdD. Mais il faudrait déjà que j'arrive à rentrer dans cette satanée boucle !!!

PS: vu que je code sous Joomla et Jumi, est-ce que ça change des choses ?

Par contre, pour le serveur PDO, il faut que je me renseigne auprès de mon hébergeur (je n'y avais pas pensé ...). hmm

#7 Re : Forum Général PHP » URL et consultation d'une base de données sql » 06-05-2010 01:59:23

merci: j'ai pu me mélanger les pinceaux: il est 1 heure du mat' pour moi ...
Mais ça ne fonctionne pas mieux ... Le code m'envoie toujours une url à la mord-moi-le-noeud ...

#8 Re : Forum Général PHP » URL et consultation d'une base de données sql » 06-05-2010 01:59:23

l'url est une url simple.
En fait, j'ai un fichier emploi.php pour le code d'origine. Il n'y a aucun include dans mon code. Pour le moment, je ne "joue" qu'avec des if(isset) ou if($_get). Donc je reste dans la même page de code et je ne veux pas en bouger.

J'ai ma boucle while PUIS mon if($_get($id)). Sauf que le code ne rentre pas dans le if($_get)) car il sort de la page pour aller ailleurs ... Si je supprimer le  $_SERVER['PHP_SELF'] (qui me faisait aller là:  http://localhost/SOFIOM/index.php?opti [...] d=8&Itemid=15), je sors aussi du code de ce fichier pour aller là:  localhost/association/?id=2?id="l'id trouvé et qui est juste" (je pensais que cette commande reloadait la même page ...)

#9 Re : Forum Général PHP » URL et consultation d'une base de données sql » 06-05-2010 01:59:23

merci de ton retour. J'ai fini apr avancer un peu ... J'arrive à avoir une URL qui fonctionne comme une URL big_smile
Mais quand je clique sur la-dite URL, je sors de mon script pour aller sur index.php?id="celui qui est récupéré". Or je veux rester dans le même script et passer dans mon code: if (isset($_GET['id']))

Voila le code que j'ai actuellement. Je pense que ça vient du echo $_SERVER['PHP_SELF']; mais je ne vois pas par quoi le remplacer. SI je le supprime, ça me fait la même chose ...
Merci encore


<?php
while ($donnees = $req->fetch())
{
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?id=<?php echo htmlspecialchars($donnees['id']); ?>"><?php echo htmlspecialchars($donnees['contact']); ?></a> </font>
};
if (isset($_GET['id'])) //affichage détaillé d'un membre de l'annuaire
{
$id=$_GET['id'];
print $id;
}
?>
 

#10 Re : Forum Général PHP » URL et consultation d'une base de données sql » 06-05-2010 01:59:23

ça me rassure ... même si je n'ai toujours pas de soluce ... Je continue de chercher. Je vais bien y arriver un jour, même dans 10 ans !!! tongue

#11 Re : Forum Général PHP » URL et consultation d'une base de données sql » 06-05-2010 01:59:23

oui, j'ai créé le code d'affichage mais je n'arrive pas à passer l'id de l'utilisateur. Plus exactement, si ma première requête sort 10 résultats, je ne vois pas comment, en cliquant sur lien dynamique (déjà créé), je puisse récupérer l'id spécifique à chacune des lignes. Faut-il que j'utilise la fonction ISSET, onClick (mais je passe au Javascript), autre solution à laquelle je n'aurai pas pensé ?

Ci-dessous le code en question. Merci de ton aide, si tu as une idée

<?php

  $id=$_GET['id'];

  $bdd = new PDO('mysql:host=localhost; dbname=DB_annuaire','root','');
  $req = $bdd->prepare('SELECT * FROM jos_annuaire WHERE id= ?');
  $req->execute(array($id));// Requête SQL
  $donnees = $req->fetch();

?>
  <table align="center" cellPadding="4" cellspacing="0">
    <form action="" method="post">
      <tr>
         <td noWrap class="ligne_foncee">
         <font style="font-size: 10pt; color: #FFFFFF; font-weight: bold; font-family: Verdana, Helvetica, Arial, Tahoma">Nom</font>
         </td>
         <td noWrap class="ligne_foncee">
         <font style="font-size: 10pt; color: #FFFFFF; font-weight: bold; font-family: Verdana, Helvetica, Arial, Tahoma">Prénom</font>
         </td>
         <td noWrap class="ligne_foncee">
         <font style="font-size: 10pt; color: #FFFFFF; font-weight: bold; font-family: Verdana, Helvetica, Arial, Tahoma">Année de naissance</font>
         </td>
         <td noWrap class="ligne_foncee">
         <font style="font-size: 10pt; color: #FFFFFF; font-weight: bold; font-family: Verdana, Helvetica, Arial, Tahoma">Nationalité</font>
         </td>
      </tr>

      <tr>
        <td noWrap class="ligne_claire">
          <font style="font-size: 10pt; color: #000000; font-family: Verdana, Helvetica, Arial, Tahoma"><?php echo $donnees[html_entity_decode('nom')]; ?></font>
        </td>
        <td noWrap  class="ligne_claire">
          <font style="font-size: 10pt; color: #000000; font-family: Verdana, Helvetica, Arial, Tahoma"><?php echo $donnees[html_entity_decode('prenom')]; ?></font>
        </td>
        <td noWrap class="ligne_claire">
          <font style="font-size: 10pt; color: #000000; font-family: Verdana, Helvetica, Arial, Tahoma"><?php echo $donnees[html_entity_decode('datenaissance')];?></font>
        </td>
        <td noWrap class="ligne_claire">
          <font style="font-size: 10pt; color: #000000; font-family: Verdana, Helvetica, Arial, Tahoma"><?php echo $donnees[html_entity_decode('nationalite')]; ?></font>
        </td>
      <tr>
    </form>
  </table>

#12 Re : Forum Général PHP » URL et consultation d'une base de données sql » 06-05-2010 01:59:23

exact ... Mea culpa. Mais pour en revenir à ma question d'origine, PDO ou pas (je suis ouvert aux deux options), as-tu une idée pour me faire avancer ? Je sèche depuis 2 jours ...:(

#13 Re : Forum Général PHP » URL et consultation d'une base de données sql » 06-05-2010 01:59:23

désolé mais je ne vois pas de quoi tu parles ... sad
J'utilise PDO partout ... et je ne vois pas en quoi ça va m'aider à résoudre mon problème. Ou alors je ne suis pas réveillé
!!!:/

#14 Forum Général PHP » URL et consultation d'une base de données sql » 06-05-2010 01:59:23

frlobe
Réponses : 20

Bonjour
j'ai une base de données SQL que j'arrive à interroger sans souci par PHP. L'affichage se fait sous forme de tableau, qui affiche tous les résultats trouvés.
Mais, comme ma table contient une trentaine de champs, je souhaiterais faire l'affichage en 2 temps:
1- on affiche les résultats dans un tableau selon le critère sélectionné et dans ce cas, seuls 4 champs sont affichés (nom, prénom, école, société). --> fonction while
2- on clique sur un des noms affichés dans le tableau de résultat (sous forme d'URL ou sous forme d'un bouton "Voir") et on affiche tous les champs de la personne sélectionnée. --> ???

Je bloque sur la procédure à utiliser. J'ai essayé plusieurs choses, sans succès jusqu'à présent.
- j'ai tenté le href avec lien sur la BdD fonction de l'id de la personne sélectionnée
- j'ai tenté de mettre un bouton "Voir" mais je ne sais pas comment différencier chaque bouton si j'ai plusieurs résultat, notamment en utilisant un $isset de chaque bouton
- j'ai tenté d'utiliser la fonction onclick mais je ne vois pas comment récupérer l'id de mon utilisateur une fois qu'il est affiché et je ne suis pas très fort en Javascript.

J'ai actuellement ce code, qui m'affiche bien mon nom sous forme dURL. Dans ma table, chaque utilisateur est notamment repéré par un id et j pense que c'est par là que se trouve la soluce ...

PS: Je souhaite avoir tout le code dans ma page php et ne pas faire faire appel à une autre page.


<?php
if(isset($_POST['envoi']))
{
  /* Récupération des donné du formulaire */
   
  $nom = htmlentities($_POST['nom']);
  $ecole = htmlentities($_POST['ecole']);
  $societe = htmlentities($_POST['societe']);
   
  // Connexion à la BdD
  $db = mysql_connect('localhost', 'root', '') or die (mysql_error());
  // Sélectionner la base de données DB_annuaire comme la base courante
  $db_selected = mysql_select_db('DB_annuaire', $db);
  mysql_set_charset("utf8", $db);

  if (!$db_selected)
  {
  die ('Impossible de sélectionner la base de données : ' . mysql_error());
  }
  else
  {
  $query = "";
  $result = "";
  $row = "";
  $Nombre = "";

  if (!empty($nom))
  {
  if (!empty($ecole))
  {
  if (!empty($societe))
  {
  print "recherche nom+école+société";
  }
  else
  {
  print "recherche nom+ école";
  }
  }
  else
               {
  // Connexion à la BdD
  $db = mysql_connect('localhost', 'root', '') or die (mysql_error());
  // Sélectionner la base de données DB_annuaire comme la base courante
  $db_selected = mysql_select_db('DB_annuaire', $db);
  mysql_set_charset( 'utf8' );

  if (!$db_selected)
  {
  die ('Impossible de sélectionner la base de données : ' . mysql_error());
  }
  else  // Vérif pas déjà inscrit (nom + prénom)
  {
  $bdd = new PDO('mysql:host=localhost; dbname=DB_annuaire','root','');
  $req = $bdd->prepare('SELECT * FROM jos_annuaire WHERE nom = ?');
  $req->execute(array($nom));// Requête SQL
  $nb_resultats = $req->rowCount();

  if ($nb_resultats == 0) //s'il n'y a pas de résultat
  {
  print 'aucun resultat.';
  }
  else //il y a au moins un résultat
  {
  ?>
  <table align="center" cellPadding="6" cellspacing="0" border="1">
  <thead>
  <tr>
  <td noWrap class="ligne_foncee">
   <font style="font-size: 10pt; color: #FFFFFF; font-weight: bold; font-family: Verdana, Helvetica, Arial, Tahoma">Nom</font>
   </td>
  <td noWrap class="ligne_foncee">
  <font style="font-size: 10pt; color: #FFFFFF; font-weight: bold; font-family: Verdana, Helvetica, Arial, Tahoma">Prénom</font>
  </td>
   <td noWrap class="ligne_foncee">
  <font style="font-size: 10pt; color: #FFFFFF; font-weight: bold; font-family: Verdana, Helvetica, Arial, Tahoma">Ecole</font>
  </td>
  <td noWrap class="ligne_foncee">
  <font style="font-size: 10pt; color: #FFFFFF; font-weight: bold; font-family: Verdana, Helvetica, Arial, Tahoma">Société</font>
  </td>
  </tr>
  </thead>     
  <?php

  echo 'Il y a ' . $nb_resultats . ' membre(s) répondant à votre recherche.<br /><br />'; //nombre de résultats

  while ($donnees = $req->fetch())
  {
  ?>
  <tr>             
               <td noWrap class="ligne_claire">            
               <font style="font-size: 10pt; color: #000000; font-family: Verdana, Helvetica, Arial, Tahoma"><a href="<?php $affichage ?>?id=<?php=$donnees[html_entity_decode('id')]?>"><?php echo $nom;?></a> </font>
  </td>
  <td noWrap  class="ligne_claire">
  <font style="font-size: 10pt; color: #000000; font-family: Verdana, Helvetica, Arial, Tahoma"><?php echo $donnees[html_entity_decode('prenom')]; ?></font>
  </td>
  <td noWrap class="ligne_claire">
  <font style="font-size: 10pt; color: #000000; font-family: Verdana, Helvetica, Arial, Tahoma"><?php echo $donnees[html_entity_decode('ecole1')];?><br/> <?php echo $donnees[html_entity_decode('ecole2')] ; ?></font>
  </td>
  <td noWrap class="ligne_claire">
  <font style="font-size: 10pt; color: #000000; font-family: Verdana, Helvetica, Arial, Tahoma"><?php echo $donnees[html_entity_decode('societe')];?></font>
  </td>
  </tr>

  <?php
  }
  ?>
  </table>
  <?php
  }
 

Pied de page des forums

Propulsé par FluxBB