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 :

Système de ticketing "simple"


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Système de ticketing "simple"
    Bonjour,

    j'aimerai mettre en place un système de ticket simple (mysql + php) : je m'explique j'ai des clients (identifié) et un gérant.

    Le gérant aura la liste de toutes les questions avec un bouton pour répondre (un champ réponse) et un bouton de "validation" (un champ qui contient 1 ou 0 je pense).

    Chaque client pourra poser une question et voir un historique de ces questions et la réponse du gérant si jamais il y en a une.

    Je ne vous demande pas le code mais une aide pour savoir comment mettre en place ma BDD.

    Une fois ma BDD prête je pourrai faire mes requêtes.

    Est ce préférable de crée 1 table par client (lourd à mon avis), ou 1 table client et 1 table gérant.

  2. #2
    Membre confirmé Avatar de saymoneu
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 505
    Points
    505
    Par défaut
    Bonjour,

    Il faut faire en effet une table "clients", ça c'est sur et pas une table par client .

    C'est tout ce que vous vouliez savoir?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Du coup ça me ferait une table client avec un seul champ : question

    Et une table "gerant" avec deux champs : statuts et commentaire/reponse

    Comment je peux distinguer les questions des différents clients ? Je rajoute un champ "proprietaire" à la table client ?

  4. #4
    Membre confirmé Avatar de saymoneu
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 505
    Points
    505
    Par défaut
    Hum, non ça ne va pas aller comme ça.

    Je ferais une table CLIENT, avec un id, le nom du client, et une table QUESTION, avec un identifiant de question, l'identifiant du client concerné en clé étrangère, le champ de texte pour la question, et le statut (réponse donnée ou non, un booléen quoi).

    Comme ça tes questions sont associées directement aux clients.

    Tu fais une table séparée REPONSE dans laquelle tu mets un id, un champ de texte destiné aux réponses et une clé étrangère vers l'id de la question concernée.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Merci bien pour ton aide je vais essayer de mettre ça en place.

    Donc ça donnerai :

    Table Client :
    id_client int primary key A.I
    nom_client varchar

    Table Question
    id_question int primary key A.I
    id_client
    question text
    statut bool

    Table Réponse
    id_reponse int primary key A.I
    id_question
    reponse texte

    Ce qui donnerait :

    create table `test`.`client`(
    `id_client` int(11) notnull AI primary key,
    `nom` text notnull);

    create table `test`.`question`(
    `id_question`int(11) notnull AI primary key,
    `question` text notnull,
    `id_client` int(11) references client(id_client));

  6. #6
    Membre confirmé Avatar de saymoneu
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 505
    Points
    505
    Par défaut
    Oui voila quelque chose comme ça je ne suis pas sur au niveau de la syntaxe mais moi j'aurais conçu ça comme ça.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Vu qu'il y a une seule réponse par question, personnellement, j'aurai fait une seule table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create table `test`.`question_reponse`(
    `id_question_reponse`int(11) not null AI primary key,
    `question` text not null,
    `reponse` text default null,
    `id_client` int(11) references client(id_client));
    Les requêtes sont alors plus simples à écrire.

  8. #8
    Membre confirmé Avatar de saymoneu
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 505
    Points
    505
    Par défaut
    Il n'y a forcément qu'une seule réponse par question?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par saymoneu Voir le message
    Il n'y a forcément qu'une seule réponse par question?
    Si le gérant ne pourra répondre qu'une seule fois

  10. #10
    Membre confirmé Avatar de saymoneu
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 505
    Points
    505
    Par défaut
    Dans ce cas en effet juste une table "client" et une table "question-reponse" comme l'a proposé Fred_34.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Petite question : je peux avoir plusieurs question par client avec cette implémentation.

    J'ai ajouté manuellement des données et quand j'ajoute une question je dois choisir un id_client mais du coup il est unique...

    Edit : c'est bon j'ai refait ma table

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    N'oublie pas de mettre un index car tes requêtes vont souvent utiliser idClient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE `test`.`question_reponse`
    ADD INDEX `question_reponse_id_client_IDX` (`id_client` ASC) ;

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Fred_34 Voir le message
    N'oublie pas de mettre un index car tes requêtes vont souvent utiliser idClient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE `test`.`question_reponse`
    ADD INDEX `question_reponse_id_client_IDX` (`id_client` ASC) ;
    Merci pour la précision

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Je sais pas si je peux continuer à poster ici (peut être plus dans la catégorie php) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo '<select size=1 name="cat">'."\n"; 
        echo '<option value="-1">Choisir un client<option>'."\n";  
        $liste_client = $bdd->query('SELECT client.nom_client FROM client');    
        while ($resultat = $liste_client->fetch()) { 
        	echo '<option value="'.$resultat['nom_client'].'">'.$resultat['nom_client']; 
        	echo '</option>'."\n"; 
        } 
        echo '</select>'."\n";
    qui m'affiche bien la liste de mes clients.

    Quelle requete dois je faire pour afficher les questions du clients sélectionné ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT question.question FROM question INNER JOIN client ON ...

  15. #15
    Membre confirmé Avatar de saymoneu
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 505
    Points
    505
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT question from QUESTION where id_client='.$idclient.'
    Si tu as respecté les tables de Fred.
    C'est en effet mieux de faire ta recherche sur l'ID que sur le nom, qui a un risque d'exister en double. Dans ton php tu remplaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<option value="'.$resultat['nom_client'].'">
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<option value="'.$resultat['id_client'].'">

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Au final j'ai opté pour deux tables, on ne sait jamais si un jour je décide qu'on puisse émettre plusieurs commentaire pour une question...

    Pour rappel :
    Client
    id_client
    nom_client
    Question
    id_question
    question
    statut
    cle etrangere id_client
    Reponse
    id_reponse
    reponse
    cle etrangere id_question

    Connexion à la BDD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try{
    	$bdd = new PDO('mysql:host=localhost;dbname=espacewcln', 'root', 'root');
    	}
    	catch (Exception $e){
            die('Erreur : ' . $e->getMessage());
        }
    Pour afficher une liste déroulante des clients :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo '<select size=1 name="cat">'."\n"; 
        echo '<option value="-1">Choisir un client<option>'."\n";  
        $liste_client = $bdd->query('SELECT client.nom_client FROM client');    
        while ($resultat = $liste_client->fetch()) { 
        	echo '<option value="'.$resultat['id_client'].'">'.$resultat['nom_client']; 
        	echo '</option>'."\n"; 
        } 
        echo '</select>'."\n";
    Pour afficher la liste de la/des question(s) :
    • requete : $question =$bdd->query("SELECT question.question FROM question INNER JOIN client ON id_client = id_question WHERE id_client='.$resultat.' ");
    • je suppose que je dois rajouter un bouton "valider" (par exemple) et au clique ajouter du javascript pour l'affiche des question ? Ou pensez vous qu'il existe une solution plus simple

  17. #17
    Membre confirmé Avatar de saymoneu
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 505
    Points
    505
    Par défaut
    Ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT question.question FROM question INNER JOIN client ON id_client = id_question WHERE id_client='.$resultat.'
    n'est pas bonne du tout attention !
    La bonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT question.question FROM question INNER JOIN client ON question.id_client = client.id_client WHERE id_client='.$resultat.'
    Et puis oui, rajoute un bouton de validation.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Après avoir (presque) finie mon petit système je reviens sur le dernier post :

    Peux t'on faire quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    echo '<form method="post" name="frm">';
    echo '<select size=1 name="client" onchange="document.getElementById(\'frm\').submit();">'."\n"; 
    echo '<option value="-1">Choisir un client<option>'."\n";  
    $liste_client = $bdd->query('SELECT DISTINCT nom_entreprise FROM espacewcln ');    
    while ($resultat = $liste_client->fetch()) { 
     echo '<option value="'.$resultat['id_client'].'">'.$resultat['nom_entreprise']; 
     echo '</option>'."\n"; 
    } 
    echo '</select>'."\n";
    echo '</form>';
     
    $truc = $_POST["client"];
     
    $test= $bdd->query("SELECT nom_entreprise ,id_question_reponse, question,reponse,statut,site,date_creation FROM espacewcln WHERE id_client = 'truc' ORDER BY STR_TO_DATE(date_creation, '%Y-%m-%d') DESC LIMIT 0, 10");
    Pour m'éviter de charger une nouvelle page ?

Discussions similaires

  1. Difference entre [Simple quote] & [Double quote]
    Par Invité dans le forum SQL
    Réponses: 3
    Dernier message: 24/07/2013, 12h24
  2. Probleme avec encodage de simple quote
    Par linkowich dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2005, 13h16

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