IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Aide PHP/MySQL - récupération id impossible / affichage du dernier Id systématique [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    En formation de développeur logiciel
    Inscrit en
    Janvier 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : En formation de développeur logiciel

    Informations forums :
    Inscription : Janvier 2019
    Messages : 13
    Par défaut Aide PHP/MySQL - récupération id impossible / affichage du dernier Id systématique
    Bonjour à tous et à toutes, actuellement je travaille une sur projet qui jusque ici déroulait assez bien avant de buter sur le pb suivant :

    Je génère et remplis une tableau de données en même temps, ce tableau est un tableau d'affichage de tickets utilisateurs. Le 2éme champ est un champ Id_ticket qui je fais passer en variable globale à la page/formulaire suivant mais le pb est que systématiquement la page suivante récupère le dernier enregistrement de ma base de données et il est donc impossible de passer à la suite de mon projet. j'ai passé beaucoup de temps à chercher une solution et je pense éventuellement qu'AJAX pourrait m'aider à faire passer ma variable à la page suivante mais il me semble qu'il doit y avoir une solution plus élégante et plus simple que je ne vois pas ou alors je n'ai pas utilisé la bonne méthode pour mon tableau.

    J'en appelle à vos lumières et remercie par avance ceux qui prendront le temps de me lire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?php 
    require_once 'affichedb.php'; /* remplit le tableau */
    // si on a récupéré un résultat on l'affiche.
    if($total) {
    // debut du tableau
    echo '<div id="tab-conteneur">';
    echo '<p><table border="2" cellpadding="1" cellspacing="2" width="80%" id="tab_tickets"></p>';
    echo '<tr>';
    /*entetes du tableau*/
    echo '<th width="5%" align="center" id="checkbox">Checkbox</th>';
    echo '<th width="9%" align="center" id="id_ticket">Id ticket</th>';
    echo '<th width="8%" align="center" id="date">Date</th>';
    echo '<th width="50%" align="center" id="sujet">Sujet</th>';
    echo '<th width="25%" align="center" id="emmeteur">Emetteur</th>';
     
    echo '</tr>'."\n";
    // lecture et affichage des résultats 1 résultat par ligne. 
    while($row = mysqli_fetch_array($result)) {
    echo '<tr>';
    echo 'tab_tickets';
    /*remplissage du tableau*/
    echo '<td align="center" valign="center" > <input type="checkbox" id="checkbox" name="checkbox"> </td>';
    echo '<td bgcolor="#CCCCCC">'.$_SESSION['id_Ticket'] = formateId($row["id_Ticket"]).'</td>';
    echo '<td bgcolor="#CCCCCC">'.$_SESSION['date'] = date("d/m/Y H:i", strtotime($row["date_Ticket"])).'</td>'; /* convert date */
    echo '<td bgcolor="#CCCCCC">'.$_SESSION['remarque']= $row["remarque_Client"].'</td>';
    echo '<td bgcolor="#CCCCCC">'.$_SESSION['email'] = formateEmail($row["eMail_Client"]).'</td>'; 
    echo '</tr>'."\n";
    }
    echo '</table>'."\n";
    // fin du tableau.
    }
    else echo 'Pas d\'enregistrements dans cette table...';
    // on libère le résultat
    mysqli_free_result($result);
    ?>

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 524
    Par défaut
    Salut,
    avant de répondre a ta question initiale, je vois des trucs que tu dois changer, comme :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <th width="5%" align="center" id="checkbox">Checkbox</th>
    Et
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while($row = mysqli_fetch_array($result)) {
    ...
    /*remplissage du tableau*/
    echo '<td align="center" valign="center" > <input type="checkbox" id="checkbox" name="checkbox"> </td>';
    }
    Tu as déjà un <th> avec id="checkbox" et dans chaque première ligne <tr> le premier <td> contient aussi un checkbox avec id="checkbox", ce qui n'est pas bon, parce que un id doit être unique dans une page html.

    Pour corriger ça, ajoute une variable $i=0 avant la boucle et a chaque fois tu l'incrémente.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $i=0;//initialisation de $i
    while($row = mysqli_fetch_array($result)) {
    ...
    /*remplissage du tableau*/
    echo '<td align="center" valign="center" > <input type="checkbox" id="checkbox'.$i.'" name="checkbox"> </td>';//concaténer $i avec la chaîne "checkbox".
    ....
    $i++;//incrémentation de $i avant la fin de la boucle while.
    }
    Il faut voir le code de la page 'affichedb.php' que tu as inclus au début du script.
    je n'arrives pas à comprendre ce que tu veux dire par cette ligne
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    '<td bgcolor="#CCCCCC">'.$_SESSION['id_Ticket'] = formateId($row["id_Ticket"]).'</td>';
    A chaque fois qu'il y a un $row["id_Ticket"], la variable $_SESSION['id_Ticket'] stocke cette valeur, finalement cette $_SESSION["id_Ticket"] ne contiendra que la dernière valeur parcourue.

  3. #3
    Membre averti
    Homme Profil pro
    En formation de développeur logiciel
    Inscrit en
    Janvier 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : En formation de développeur logiciel

    Informations forums :
    Inscription : Janvier 2019
    Messages : 13
    Par défaut
    Bonsoir, tout d'abord merci d'avoir pris le temps de me répondre, c'est vraiment sympa.

    les fonction formateId() et formateEmail() servent à rendre plus lisible le code de la page principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php	
    	/*FONCTION QUI RENVOIE LE LIEN EMAIL DANS LE TABLEAU*/
    	function formateEmail($email)
    	{
    		return '<a href="mailto:' . $email . '?subject=Votre Message sur la base de données EDIBATEC ">' . $email . '</a>';
    	}
    	/*FONCTION QUI MET EN LIEN L ID DANS LE TABLEAU*/
    	function formateId($idTicket)
    	{
    		return '<a href="vue_ticket.php">' . $idTicket . '</a>';
    	}
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    '<td bgcolor="#CCCCCC">'.$_SESSION['id_Ticket'] = formateId($row["id_Ticket"]).'</td>';

    Il faut voir le code de la page 'affichedb.php' que tu as inclus au début du script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php	/*fonction qui recupere les enregistrements de la bdd et remplie le tableau*/
    	$host = 'localhost';
    	$user = 'root';
    	$pass = '';
    	$db = 'edibatec';
    	$link = mysqli_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error());
    	mysqli_select_db($link,$db) or die ('Erreur :'.mysql_error());
    	$select = 'SELECT * FROM tickets';
    	$result = mysqli_query($link, $select) or die(mysqli_error($link));
    	$total = mysqli_num_rows($result);
    ?>
    je suis en train de regarder les modifications à apporter sur tes recommandations, je te dis un grand merci car je me suis vraiment creusé la tete sur ce pb et ne m'etant pas mis depuis bien longtemps au PHP c'est encore un peu laborieux. Un grand merci

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 524
    Par défaut
    En gros,Ta page doit ressembler à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    <?php
    	session_start();//j'ai initialisé la session pour que les variables $_SESSION seront reconnus.	
     
    	/*FONCTION QUI RENVOIE LE LIEN EMAIL DANS LE TABLEAU*/
    	function formateEmail($email)
    	{
    		return '<a href="mailto:' . $email . '?subject=Votre Message sur la base de données EDIBATEC ">' . $email . '</a>';
    	}
    	/*FONCTION QUI MET EN LIEN L ID DANS LE TABLEAU*/
    	function formateId($idTicket)
    	{
    		return '<a href="vue_ticket.php">' . $idTicket . '</a>';
    	}
     
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8" />
    </head>
    <body>
    <?php 
    	require_once "affichedb.php";
    	$i=0;
    	if($total>0) {
    		// debut du tableau
    		echo '<div id="tab-conteneur">'
    		.'<table border="2" cellpadding="1" cellspacing="2" width="80%" id="tab_tickets">'//attention, au <p>, il est mal placé autour de <table>, je l'ai supprimé
    		.'<tr>'
    		/*entetes du tableau*/
    		.'<th width="5%" align="center" id="checkbox">Checkbox</th>'
    		.'<th width="9%" align="center" id="id_ticket">Id ticket</th>'
    		.'<th width="8%" align="center" id="date">Date</th>'
    		.'<th width="50%" align="center" id="sujet">Sujet</th>'
    		.'<th width="25%" align="center" id="emmeteur">Emetteur</th>'
    		.'</tr>'."\n";
     
    	// lecture et affichage des résultats 1 résultat par ligne. 
    		while($row = mysqli_fetch_array($result)) {
    			/*remplissage du tableau*/
    			echo '<tr>'
    			.'<td align="center" valign="center" > <input type="checkbox" id="checkbox'.$i.'" name="checkbox"> </td>'
    			.'<td bgcolor="#CCCCCC">'.$_SESSION['id_Ticket'] = formateId($row["id_Ticket"]).'</td>'
    			.'<td bgcolor="#CCCCCC">'.$_SESSION['date'] = date("d/m/Y H:i", strtotime($row["date_Ticket"])).'</td>' /* convert date */
    			.'<td bgcolor="#CCCCCC">'.$_SESSION['remarque']= $row["remarque_Client"].'</td>'
    			.'<td bgcolor="#CCCCCC">'.$_SESSION['email'] = formateEmail($row["eMail_Client"]).'</td>' 
    			.'</tr>'."\n";
    			$i++;
    		}
    		echo '</table></div>'."\n";//ne pas oublier de fermer la div id="tab-conteneur"
    		// fin du tableau.
    	}
    	else echo 'Pas d\'enregistrements dans cette table...';
    	// on libère le résultat
    	mysqli_free_result($result);
    	//var_dump($_SESSION);
    ?>
    </body>
    </html>

  5. #5
    Membre averti
    Homme Profil pro
    En formation de développeur logiciel
    Inscrit en
    Janvier 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : En formation de développeur logiciel

    Informations forums :
    Inscription : Janvier 2019
    Messages : 13
    Par défaut
    je te remercie le code est vraiment propre et je saurais comment faire la prochaine fois, cependant le pb de départ est encore présent car pour tout te dire je suis actuellement en stage et l'on m'a demandé de concevoir une système de gestion de ticket et jusqu’à présent cela avançait bien jusqu’à ce pb que je n'avais pas prévu et vu venir. Je souhaite solliciter le moins possible mon responsable. Et ce code est le code de la page la plus importante et lorsque l'utilisateur clique sur Id_ticket (0001, cela est censé ouvrir le ticket correspondant dans un autre formulaire mais comme $_SESSION['id_ticket'] me renvoie toujours le dernier identifiant dans la base de données du dernier enregistrement, je ne peux plus avancer et je ne sais pas trop comment faire.

    En tout cas merci pour l'aide déjà apportée et si tu n'as pas le temps merci pour tout.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while($row = mysqli_fetch_array($result)) {
    	/*remplissage du tableau*/
    	//...
    	$_SESSION['xxx']= yyyyyyy.'</td>'
    	//...
    	$i++;
    }
    A chaque tour de boucle, $_SESSION['xxx'] est remplacé par la nouvelle valeur.
    Par conséquent, à la fin de la boucle, $_SESSION['xxx'] contient la DERNIERE valeur.
    Idem pour les autres $_SESSION.

    C'est une erreur de conception.

    Citation Envoyé par MaxVarchar Voir le message
    ...Le 2éme champ est un champ Id_ticket qui je fais passer en variable globale à la page/formulaire suivant mais le pb est que systématiquement la page suivante...
    Je ne comprends pas ce que tu cherches à faire.
    • Pourquoi utiliser des SESSIONS ici ??
    • Quelle "page suivante" ?
    Dernière modification par rawsrc ; 12/02/2019 à 22h36.

  7. #7
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 524
    Par défaut
    Citation Envoyé par MaxVarchar
    et lorsque l'utilisateur clique sur Id_ticket (0001, cela est censé ouvrir le ticket correspondant dans un autre formulaire
    Poste le code de la page du formulaire.

    Si tu utilises $_SESSION pour ça, eh ben je peux te dire que ce n'est même pas la peine, parce que le id ticket tu peux le mettre directement dans le href retourné par la fonction formateId() comme paramètre pour qu'ensuite le récupérer dans la page du formulaire
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    return '<a href="vue_ticket.php?idTicket='.$idTicket.'">' . $idTicket . '</a>';

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide php mysql
    Par carlosdz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 13/07/2006, 16h42
  2. aide pour script php/mysql
    Par jem27 dans le forum Débuter
    Réponses: 18
    Dernier message: 27/03/2006, 18h08
  3. Windows 2003 server et php mysql besoin d'aide ^^
    Par iceje dans le forum Windows Serveur
    Réponses: 47
    Dernier message: 25/03/2006, 09h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo