PHP|Débutant :: Forums

Advertisement

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

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

#1 23-03-2010 22:28:58

Furox
Membre
Inscription : 28-05-2009
Messages : 9

Interroger une bdd

Bonjour à tous,

mon cas est le suivant: je souhaiterai afficher les informations contenues dans ma bdd, au sein d'un tableau html.

Ainsi, j'ai réalisé le code suivant:


<?php
// on se connecte à MySQL
$db = mysql_connect('****', '****', '****');

// on sélectionne la base
mysql_select_db('****',$db);

// on crée la requête SQL
$sql = 'SELECT * FROM ****';

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// on fait une boucle qui va faire un tour pour chaque enregistrement
while ($data = mysql_fetch_array($req))
    {
    // on affiche les informations de l'enregistrement en cours
  echo '<table>';
  echo '<tr>';
  echo '<td>Nom</td>';
  echo '<td>Prénom</td>';
  echo '<td>Téléphone</td>';
  echo '<td class="mail">Mail</td>';
  echo '<td>Jours</td>';
  echo '<td>Horaires</td>';
  echo '<td>Id</td>';
  echo '<td>Conseiller</td>';
  echo '<td>Status</td>';
  echo '</tr>';
  echo '</table>';

  echo '<table class="contenu">';
  echo '<tr>';
    echo '<td class="contenu">'.$data['nom'].'</td>';
    echo '<td class="contenu">'.$data['prenom'].'</td>';
    echo '<td class="contenu">'.$data['telephone'].'</td>';
    echo '<td class="mail">'.$data['email'].'</td>';
    echo '<td class="contenu">'.$data['jours'].'</td>';
    echo '<td class="contenu">'.$data['horaires'].'</td>';
    echo '<td class="contenu">'.$data['identifiant'].'</td>';
    echo '<td class="contenu"><input name="conseiller" type="text" value="'.$data['conseiller'].'" /></input></td>';
    echo '<td class="contenu"><input name="status" type="text" value="'.$data['status'].'" /></input></td>';

  echo '</tr>';
  echo '</table>';
 
    }

// on ferme la connexion à mysql
mysql_close();
?>
 

Ça fonctionne très bien, seulement, un problème de taille: le script n'affiche que la ligne la plus récente de la bdd (traitement par id), en remplaçant systématiquement la ligne affichée précédemment.

Or, j'aimerai que les lignes soient toutes affichées. Et je ne comprends pas d'où vient le problème.


Si l'un d'entre-vous pouvait m'aider, ce serait une excellente nouvelle smile

Merci à tous.

Hors ligne

#2 24-03-2010 07:03:19

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Interroger une bdd

Actuellement ton script n'a rien qui semblerait pouvoir remplacer le tout. Je n'ai pas aperçu de balises non fermées.

Et si tu parlais de la ligne avec les noms des colonnes qui se répète il te faut la placer en dehors de la boucle while pour ne l'afficher qu'une fois.

Jettes un oeil au code html généré tu trouveras peut être ta réponse. Car je suppose que ceci est intégré dans un design qui peut être est trop fixe ce qui empêcherait une partie d'être visible ou autre.

Hors ligne

#3 24-03-2010 09:30:26

Furox
Membre
Inscription : 28-05-2009
Messages : 9

Re : Interroger une bdd

Merci pour ta réponse xTG.

Je parle bien de la deuxième ligne, et plus, donc des lignes de traitement (récupération des informations de la bdd).

Pour donner un exemple concret, actuellement la table_bdd concernée contient 3 enregistrements, aussi, il devrait apparaître les 3 lignes sur la page. Pourtant, il n'apparait que la dernière (celle ayant l'id la plus récente).

Je vous recopie le code avec le HTML, peut-être y trouverai-vous une réponse. Parce que moi, non sad


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Accès reservé - Haut Conseil</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 8]> <script type="text/javascript" src="css/roundies.js"> </script><![endif]-->
</head>

<body>

<div id="site">
<img src="images/logo.gif" class="logo"/>
<img src="images/logo.gif" class="logo2"/>

<form id="formulaire" name="formulaire" method="post" action="index.php">
  <label>
    <input type="submit" name="button" id="button" class="bouton" value="Sauvegarder les modifications" />
  </label>
    <label>
    <input type="submit" name="button" id="button" class="bouton2" value="Actualiser" />
  </label>

<?php
// on se connecte à MySQL
$db = mysql_connect('*', '*', '*');

// on sélectionne la base
mysql_select_db('*',$db);

// on crée la requête SQL
$sql = 'SELECT * FROM *';

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// on fait une boucle qui va faire un tour pour chaque enregistrement
while ($data = mysql_fetch_array($req))
    {
    // on affiche les informations de l'enregistrement en cours
  echo '<table>';
  echo '<tr>';
  echo '<td>Nom</td>';
  echo '<td>Prénom</td>';
  echo '<td>Téléphone</td>';
  echo '<td class="mail">Mail</td>';
  echo '<td>Jours</td>';
  echo '<td>Horaires</td>';
  echo '<td>Id</td>';
  echo '<td>Conseiller</td>';
  echo '<td>Status</td>';
  echo '</tr>';
  echo '</table>';

  echo '<table class="contenu">';
  echo '<tr>';
    echo '<td class="contenu">'.$data['nom'].'</td>';
    echo '<td class="contenu">'.$data['prenom'].'</td>';
    echo '<td class="contenu">'.$data['telephone'].'</td>';
    echo '<td class="mail">'.$data['email'].'</td>';
    echo '<td class="contenu">'.$data['jours'].'</td>';
    echo '<td class="contenu">'.$data['horaires'].'</td>';
    echo '<td class="contenu">'.$data['identifiant'].'</td>';
    echo '<td class="contenu"><input name="conseiller" type="text" value="'.$data['conseiller'].'" /></input></td>';
    echo '<td class="contenu"><input name="status" type="text" value="'.$data['status'].'" /></input></td>';

  echo '</tr>';
  echo '</table>';
  }
 
 
$conseiller=$_POST['conseiller'];
$status=$_POST['status'];

$sql2="UPDATE acn_partenaires SET conseiller='$conseiller',status='$status' WHERE id='17'";
mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());


// on ferme la connexion à mysql
mysql_close();
?>
</form>
</div>

</body>
</html>


Merci à tous.

Dernière modification par Furox (24-03-2010 09:31:39)

Hors ligne

#4 24-03-2010 09:46:50

Capi
Membre
Inscription : 03-03-2010
Messages : 45

Re : Interroger une bdd

while ($data = $req->fetch())
{
...
}

Ca devrait marcher ?

Hors ligne

#5 24-03-2010 12:31:47

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Interroger une bdd

S'il utilise la même classe que ce que tu utilises oui, mais là ce n'est pas le cas.

Est-ce réellement le code généré ? Si c'est le cas il faut changer l'extension de ta page en .php pour que le code s'exécute.

Hors ligne

#6 24-03-2010 14:06:45

Furox
Membre
Inscription : 28-05-2009
Messages : 9

Re : Interroger une bdd

Oui c'est réellement le code généré, et l'extension est déjà en .php

La table_bdd contient 3 lignes d'enregistrements, pourtant, seule la dernière est appelée (id la plus récente).

Je ne trouve absolument aucune explication, et il semblerait que vous non plus sad

Pour autant, j'imagine qu'il y en a forcément une, que ce n'est pas un "caprice virtuel" smile


Quelqu'un pour résoudre ce mystère ?

Hors ligne

#7 24-03-2010 14:20:27

Furox
Membre
Inscription : 28-05-2009
Messages : 9

Re : Interroger une bdd

Je tiens à m'excuser auprès de vous, car c'était non pas lié au PHP, mais au CSS..

#site table{
  position: absolute;
  top: 100px;
  left: 30px;
  border: #393939 2px solid;
}
 

Replaçait systématiquement le contenu du tableau sur la même ligne...

Beaucoup de temps, pour pas grand chose. Comme souvent.

Merci à tous.

Hors ligne

#8 24-03-2010 15:07:27

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Interroger une bdd

Au passage, ce que tu nous a montré n'était aucunement le code généré.
Le code généré est celui que produit ton navigateur internet (clic droit > code source de la page).

Hors ligne

#9 24-03-2010 15:19:49

Furox
Membre
Inscription : 28-05-2009
Messages : 9

Re : Interroger une bdd

Au temps pour moi. smile

Hors ligne

Pied de page des forums