Vous n'êtes pas identifié(e).
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.
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
}
Hors ligne
si tu utilises pdo, bah, fait le totalement ou pas du tout
tu ouvres et sélectionnes avec les fonctions standarts
a++
Hors ligne
désolé mais je ne vois pas de quoi tu parles ...
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é
!!!:/
Hors ligne
mysql_connect('localhost', 'root', '')
ca, c'est PDO ????
a++
Hors ligne
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 ...:(
Hors ligne
Je ne comprends pas où est ton soucis ....
Apparemment, tu as mis ton lien (dynamisé semble-t-il) sous le nom...
As-tu crée la page d'affichage des infos complète ?? avec basiquement un $_GET['id'] ??
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
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
$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>
Dernière modification par frlobe (03-05-2010 11:46:42)
Hors ligne
Ton code de première page devrait correctement te créer tes liens dynamiques.
La récupération se fait bien sur ton second code (même s'il n'est pas sécurisé) et donc un affichage devrait avoir lieu.
Bref je suis de même, je ne comprend pas ton problème.
Hors ligne
ç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 !!!
Hors ligne
Hum enfin si j'avais mal lu...
Ce serait pas plutôt :
Et de même pour les autres champs.
Par ce que d'une part html_entity_decode() sur la clé ne sert pas à grand chose, donc je suppose que tu le voulais sur la variable, et enfin je me demande pouruqoi il ne te génère pas d'erreur avec la syntaxe "<?php=$variable?>. M'enfin peut être une syntaxe que je ne connais pas.
Hors ligne
merci de ton retour. J'ai fini apr avancer un peu ... J'arrive à avoir une URL qui fonctionne comme une URL
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
Hors ligne
L'url de ta première page est-elle une url simple ? (comme index.php ou page.php)
Ou bien une url composée ? (index.php?page=mapage)
Car $_SERVER['PHP_SELF'] ne contient que le nom du script et ne comprend pas les arguments.
Hors ligne
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 ...)
Hors ligne
je répare ce qui me semble gros
tu t'es mélangé les pinceau dans les balises
[code : php]
<?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>
<?php
if (isset($_GET['id'])) {
$id=$_GET['id'];
print $id;
}
?>
[/code]
a++
Hors ligne
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 ...
Hors ligne
Attention !
Ton $_SERVER['PHP_SELF'] peut te renvoyer des surprises
Tente avec un chemin "en dur" ou alors même, juste avec :
Et si jamais tu avais déjà des transmissions de variable via l'url, remplace ?id par &id
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
Bonsoir,
En ce qui me concerne je vais revenir au post initial et ce que j'en ai compris.
1) Tu ouvres une requête "complète" en terme de contenu
2) tu en affiche qu'une petite partie
3) sur selection unique dans le 2) tu affiche le reste de la requête pour la selection.
Si c'est bien ca que tu veux faire alors saches que :
1) à moins d'utiliser PDO et d'être sur un serveur dédié, tu n'auras pas accès ni ne pourra gérer les connexions persistantes sur ta bases de données.
2) Tu es donc obligé d'utiliser 2 requêtes mySQL pour faire ce que tu souhaites : la première pour ta première partie et la seconde qui va chercher les infos de ta sélection.
Voilà.
Dernière modification par Jc (03-05-2010 23:07:02)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
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é ...).
Hors ligne
Vu que tu codes sous Joomla ca change les choses en effet car joomla utilise son propre système évènementiel au sein des classes. D'ailleurs c'est par là qu'il faut que tu cherches pour recharger ta page comme pour les $_post.
=> Go Lire la documentation joomla^^
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
OK merci. Je vais retourner lire Joomla. Mais tous mes $post fonctionnent à ce jour ... sauf celui là ...:(
A plus
Hors ligne
Bon, j'ai finalement résolu mon problème en le contournant: j'utilise un bouton "voir" qui transmet ma variable.
Hors ligne