Ankündigung

Einklappen
Keine Ankündigung bisher.

[Ticketsystem] "Mögliche Funktionen"

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Ticketsystem] "Mögliche Funktionen"

    Ein Beispiel für ein kleines Ticketsystem für eine etwaige Supportanfrage;

    Zumindest die Funktionen, entsprechende Funktionsaufrufe und HTMLdetails hab ich nicht beigefügt. Jedoch können die Funktionen evtl. eine gute Hilfestellung sein.
    -> Kann auch gelöscht werden, da dies ja kein "richtiges Tutorial" ist.

    Tabelle
    Code:
    CREATE TABLE IF NOT EXISTS `tickets` (
      `id` int(11) unsigned NOT NULL auto_increment,
      `customerid` varchar(4) NOT NULL,
      `prefixid` int(11) NOT NULL,
      `ticketid` int(4) NOT NULL,
      `subject` varchar(250) NOT NULL,
      `priority` int(1) NOT NULL,
      `msg` text NOT NULL,
      `opened` int(11) NOT NULL,
      `closed` int(11) NOT NULL,
      `deleted` int(11) NOT NULL,
      `support_msg` text NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    Customerfunktionen
    PHP-Code:
    <?php
    class customer
    {
      function 
    checkTicket($details)
      {
        
    $priority=array(123);
        
        if(
    trim($details['subject'])!=''
        
    && trim($details['msg'])!=''
        
    && in_array($details['priority'], $priority))
        {
          return 
    true;
        }
        else
        {
          
    $error=array();
          foreach(
    $details as $key => $value
          {
            if(
    trim($value)=='' && in_array($key, array('msg''subject')))
            {
              
    $error[]=$key;
            }
          }
          return 
    $error;
        }
      }
      
      function 
    insertTicket($details)
      {
        
    $sql=new mysql;
        
    $sql->connect();
        
        
    $prefixid=rand(10009999);
        
    $prefixid_check=mysql_query("SELECT prefixid FROM tickets WHERE prefixid='".$prefixid."' LIMIT 1");
        
    $prefixid_check=mysql_fetch_row($prefixid_check);

        while(
    $prefixid_check[0]!=false)
        {
          
    $prefixid=rand(10009999);
          
    $prefixid_check=mysql_query("SELECT prefixid FROM tickets WHERE prefixid='".$prefixid."' LIMIT 1");
          
    $prefixid_check=mysql_fetch_row($prefixid_check);
        }
        
        foreach(
    $details as $key => $value)
        {
          
    $details[$key]=htmlspecialchars($value);
        }
        
    $details['msg']=nl2br($details['msg']);
        
    $details['subject']=nl2br($details['subject']);
        
        
    mysql_query("INSERT INTO tickets
        (customerid, prefixid, ticketid, subject, priority, msg, opened)
        VALUES ('"
    .$details['customerid']."', '".$prefixid."', '".rand(10009999)."', '".mysql_real_escape_string($details['subject'])."', '".$details['priority']."', '".mysql_real_escape_string($details['msg'])."', '".mktime()."')");
        
        return 
    $prefixid;
        
        
    $sql->close(); 
      }
      
      function 
    getTicketList($customerid)
      {
        
    $sql=new mysql;
        
    $sql->connect();
        
        
    $data=array();
        
    $diff_prefixids=array();
        
    $i=0;
        
        
    $result=mysql_query("SELECT * FROM tickets WHERE customerid='".$customerid."' ORDER BY id");
        while(
    $row=mysql_fetch_assoc($result)) 
        {
          if(!
    in_array($row['prefixid'], $diff_prefixids))
          {
            
    $diff_prefixids[]=$row['prefixid'];
            
    $data[$i]['prefixid']=$row['prefixid'];
            
    $data[$i]['ticketid']=$row['ticketid'];
            
    $data[$i]['subject']=$row['subject'];
            
    $data[$i]['priority']=$row['priority'];
            
    $data[$i]['opened']=$row['opened'];
            
    $data[$i]['closed']=$row['closed'];
            
    $i++;
          }
        }
        return 
    $data;
      }
      
      function 
    getTicketsDetails($prefixid)
      {
        
    $sql=new mysql;
        
    $sql->connect();
        
        
    $i=0;
        
    $result=mysql_query("SELECT * FROM tickets WHERE prefixid='".mysql_real_escape_string($prefixid)."' ORDER BY id");
        if(
    mysql_num_rows($result)!=0)
        {
          while(
    $row=mysql_fetch_assoc($result)) 
          {
            if(
    $i==0)
            {
              
    $data[0]['customerid']=$row['customerid'];
              
    $data[0]['prefixid']=$row['prefixid'];
              
    $data[0]['ticketid']=$row['ticketid'];
              
    $data[0]['subject']=$row['subject'];
              
    $data[0]['priority']=$row['priority'];
            }
            if(
    $row['msg']!='')
            {
              
    $data[$i]['msg']=$row['msg'];
              
    $data[$i]['opened']=$row['opened'];
            }
            else
            {
              
    $data[$i]['support_msg']=$row['support_msg'];
              
    $data[$i]['closed']=$row['closed'];
            }
            
    $i++;
          }
          return 
    $data;
        }
        else
        {
          return 
    false;
        }
      }
      
      function 
    answerTicket($customerid$prefixid$msg)
      {
        
    $sql=new mysql;
        
    $sql->connect();
        
        
    $result=mysql_query("SELECT COUNT(customerid) FROM tickets 
        WHERE prefixid='"
    .mysql_real_escape_string($prefixid)."' && customerid='".$customerid."' LIMIT 1");
        
    $num=mysql_fetch_row($result);
        
        if(
    $num[0]==0)
        {
          return 
    false;
        }
        
        
    $msg=htmlspecialchars($msg);
        
    $msg=nl2br($msg);
        
        
    mysql_query("INSERT INTO tickets
        (customerid, prefixid, ticketid, msg, opened)
        VALUES ('"
    .$customerid."', '".$prefixid."', '".rand(10009999)."', '".mysql_real_escape_string($msg)."', '".mktime()."')");
        
        return 
    true;
        
        
    $sql->close();
      }
      
      function 
    getCustomersInfo($id)
      {
        
    $sql=new mysql;
        
    $sql->connect();
        
        
    $result=mysql_query("SELECT * FROM customers WHERE id='".$id."' LIMIT 1");
        return 
    mysql_fetch_assoc($result);
        
        
    $sql->close();
      }
      
      function 
    closedOrOpened($prefixid)
      {
        
    $sql=new mysql;
        
    $sql->connect();
        
        
    $result=mysql_query("SELECT closed, opened FROM tickets WHERE prefixid='".$prefixid."' ORDER BY id DESC");
        
    $row=mysql_fetch_assoc($result);
        
        return (
    $row['opened']!=0) ? true false// Wenn Support eine Antwort schreibt wird der timestamp in Spalte closed eingetragen und Ticket ist geschlossen; opened bleibt leer.
        
        
    $sql->close();
      }
    }
    ?>
    Adminfunktionen
    PHP-Code:
    <?php
    class admin

      function 
    getAllTickets()
      {
        
    $sql=new mysql;
        
    $sql->connect();
        
        
    $data=array();
        
    $diff_prefixids=array();
        
    $i=0;
        
        
    $result=mysql_query("SELECT * FROM tickets ORDER BY id");
        while(
    $row=mysql_fetch_assoc($result)) 
        {
          if(!
    in_array($row['prefixid'], $diff_prefixids))
          {
            
    $diff_prefixids[]=$row['prefixid'];
            
            
    $data[$i]['customerid']=$row['customerid'];
            
    $data[$i]['prefixid']=$row['prefixid'];
            
    $data[$i]['ticketid']=$row['ticketid'];
            
    $data[$i]['subject']=$row['subject'];
            
    $data[$i]['priority']=$row['priority'];
            
    $data[$i]['opened']=$row['opened'];
            
    $data[$i]['closed']=$row['closed'];
            
    $i++;
          }
        }
        return 
    $data;
      }
      
      function 
    getTicketsDetails($prefixid)
      {
        
    $sql=new mysql;
        
    $sql->connect();
        
        
    $i=0;
        
    $result=mysql_query("SELECT * FROM tickets WHERE prefixid='".mysql_real_escape_string($prefixid)."' ORDER BY id");
        if(
    mysql_num_rows($result)!=0)
        {
          while(
    $row=mysql_fetch_assoc($result)) 
          {
            if(
    $i==0)
            {
              
    $data[0]['customerid']=$row['customerid'];
              
    $data[0]['prefixid']=$row['prefixid'];
              
    $data[0]['ticketid']=$row['ticketid'];
              
    $data[0]['subject']=$row['subject'];
              
    $data[0]['priority']=$row['priority'];
            }
            if(
    $row['msg']!='')
            {
              
    $data[$i]['msg']=$row['msg'];
              
    $data[$i]['opened']=$row['opened'];
            }
            else
            {
              
    $data[$i]['support_msg']=$row['support_msg'];
              
    $data[$i]['closed']=$row['closed'];
            }
            
    $i++;
          }
          return 
    $data;
        }
        else
        {
          return 
    false;
        }
      }

      function 
    getCustomersInfo($id)
      {
        
    $sql=new mysql;
        
    $sql->connect();
        
        
    $data=mysql_query("SELECT * FROM customers WHERE id='".$id."' LIMIT 1");
        
    $data=mysql_fetch_assoc($data);
        
        foreach(
    $data as $key => $value)
        {
          
    $data[$key]=htmlentities($data[$key]);                      
        }
        
        return 
    $data;
        
        
    $sql->close();
      }
      
      function 
    answerTicket($customerid$prefixid$msg)
      {
        
    $sql=new mysql;
        
    $sql->connect();
            
        
    $msg=htmlspecialchars($msg);
        
    $msg=nl2br($msg);
        
        
    mysql_query("INSERT INTO tickets
        (customerid, prefixid, ticketid, support_msg, closed)
        VALUES ('"
    .$customerid."', '".$prefixid."', '".rand(10009999)."', '".mysql_real_escape_string($msg)."', '".mktime()."')");
        
        return 
    true;
        
        
    $sql->close();
      }
      
      function 
    closedOrOpened($prefixid)
      {
        
    $sql=new mysql;
        
    $sql->connect();
        
        
    $result=mysql_query("SELECT closed, opened FROM tickets WHERE prefixid='".$prefixid."' ORDER BY id DESC");
        
    $row=mysql_fetch_assoc($result);
        
       return (
    $row['opened']!=0) ? true false// Wenn Support eine Antwort schreibt wird der timestamp in Spalte closed eingetragen und Ticket ist geschlossen; opened bleibt leer.
        
        
    $sql->close();
      }
      
      function 
    getAllCustomers()
      {
        
    $sql=new mysql;
        
    $sql->connect();
        
        
    $result=mysql_query("SELECT id, offer, salutation, name FROM customers ORDER by id");
        
        
    $data=array();
        
    $i=0;
        while(
    $row=mysql_fetch_assoc($result)) 
        {
          
    $data[$i]['id']=$row['id'];
          
    $data[$i]['salutation']=$row['salutation'];
          
    $data[$i]['name']=htmlentities($row['name']);
            
          
    $i++;
        }
        
        return 
    $data;
        
        
    $sql->close();
      }
    }
    ?>

  • #2
    Hallo!

    Dann packe es das nächste mal doch bitte auch in den Codeschnipsel Thread. Weil ein Tutorial soll ein Leitfaden sein und das ist auch hier nicht gegeben! Wenn du es in Tutorials rein stellst wo sich Leute das als Hilfestellung nehmen sollen oder können,solltest du auch erklären was da passiert und eine vernünftige Code Dokumentation schreiben!

    mfg der Litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    [URL]http://www.lit-web.de[/URL]

    Kommentar


    • #3
      Moin.

      Siehe:
      -> Kann auch gelöscht werden, da dies ja kein "richtiges Tutorial" ist.
      Also bitte verschieben

      Kommentar


      • #5
        Hi,

        Zu deinem Posting:
        Ein Haufen Quellcode ohne Kommentare und Beschreibung ist ziemlich öde und interessiert niemanden. Mehr Einleitungstext und Kommetare im Quellcode wären gut.

        Zur Implementation:
        Deine Klasse ist eigentlich eine Customerklasse mit Ticketfunktionen. So eine Customerklasse sieht aber bei jedem anders aus. Da wäre eine eigenständige Ticketklasse besser, welche man als Member seiner eigenen Customerklasse implementieren kann.

        Ein "select * from" ist nicht gut, grade bei Beispielen nicht, da sich andere daran ein Beispiel nehmen. Oo

        Warum ein int Feld bei closed und opened, wenn du die Zeit darin speicherst?

        Die Methode closesOrOpened stößt mir unangenehm auf. Klingt erstmal nach der Funktionalität von getAllTickets, denn ein Ticket ist entweder offen oder geschlossen, weshalb du damit alle Tickets ausliest. Wofür ist der Parameter?
        Ich sehe grade, es gibt noch den Status "deleted". Warum löscht du sie nicht?

        Deine Klasse wirft mehr Fragen auf, als sie beantwortet, wenn man sich den Code nur mal schnell ansieht, ohne alles ins Detail zu untersuchen. Deshalb ist Doku und Beschreibung nötig.

        Gruß Thomas

        Kommentar


        • #6
          also, papl, ich klopf' dir mal kräftig auf die Schulter, wenn du das alles selbst entwickelt hast - und dann so selbstlos hier einstellst.

          Ich selbst habe noch kein Ticketsystem, deswegen ist das für mich erstmal eine gute Quelle zum Stöbern.

          Kommentar


          • #7
            Ein Haufen Quellcode ohne Kommentare und Beschreibung ist ziemlich öde und interessiert niemanden.
            Siehe Post unter deinem.

            Deine Klasse ist eigentlich eine Customerklasse mit Ticketfunktionen.
            Das ist korrekt. Letztlich stellt aber mein geposteter Code eine Verbindung zwischen einem "Kundem" (Customer) und dem "Support" da.
            Also ist dies ganz verkehrt, zumal in meiner Webapplication, wo dieses Ticketsystem auch Verwendung findet, noch mehr, andere Funktionen ihren Platz in der Klasse "Customer" haben.

            Ein "select * from" ist nicht gut(...)
            Was heißt es "ist nich gut"; es ist etwas langsamer, da die Spaltenreihenfolge bei jedem Durchlauf aufs neue errechnet wird.
            "Nicht gut" wäre da korrekt, wo die Möglichkeit besteht, das ein verfälschtes bzw. fehlerhaftes Ergebniss letztlich rauskommt. Keiner wird sterben, nur weil er * benutzt.

            Warum ein int Feld bei closed und opened
            Das du die Funktion nicht nachvollziehen kannst, kann ich wiederrum nachvollziehen. Ich habe sie etwas umgeschrieben.

            Ich sehe grade, es gibt noch den Status "deleted". Warum löscht du sie nicht?
            Tatsächlich findet diese Spalte in meinem gepostetem Code keine Verwendung. Muss man so pingelich sein?

            (...) Deshalb ist Doku und Beschreibung nötig.
            Dazu verweise ich nochmal auf den darrauffolgenden Post. :P
            Aber werde es evtl. nachholen.

            (...)eine gute Quelle zum Stöbern.
            ... war mein Ziel

            Kommentar


            • #8
              ($row['opened']!=0) ? return true : return false; // Wenn Support eine Antwort schreibt wird der timestamp in Spalte closed eingetragen und Ticket ist geschlossen; opened bleibt leer.
              Parse error: syntax error, unexpected T_RETURN in d:\xampp\ticket\admin.php on line 115

              Wozu lege ich mir eigentlich ein Objekt der (unbekannten) Klasse mysql an, wenn danach mysql_query|_real_escape usw. verwendet werden?

              Kommentar


              • #9
                Hi,

                1. Also weil da ein User sich den Code genauer ansehen will denkst du, eine Doku ist nicht nötig? Okay...
                2. Das zeugt von schlechtem Design, da du Funktionalität in einer Klasse verpackst, wo sie nicht hingehört.
                3. Warum ein "select * from" nicht gut ist kannst du dir selber erarbeiten.
                4. Ich habe nicht gesehen, dass deine Spalte "deleted" nicht genutzt wird, sondern nur nachgefragt, warum du ein Ticket nicht löscht, sondern es auf "deleted" setzt. Ich habe den Code ja nur überflogen, dabei sind mir eben diese Ungereimtheiten aufgefallen.
                5. Es ist keine gute Quelle, weil die Doku fehlt.

                Wenn man keine berechtigte Kritik verträgt, wie man an deiner Antwort herauslesen kann, sollte man sowas nicht in ein Board posten.

                Gruß Thomas

                Kommentar


                • #10
                  servus papl,

                  find ich gut das du da so engagiert bist - ....bin selber grade dabei eins auf meine beduerfnisse zu programmiern...hab grundsaetzlich die "struktur" - weiss aber momentan bei der ticketerstellung bzw der ticket weiterbearbeitung nicht weiter....steht da da wie der ochs vor dem berg - wie man bei uns sagt

                  wenn ich darf - taet ich dir gerne n paar fragen stellen - gerne auch per pn..

                  gruss manuel

                  Kommentar


                  • #11
                    Gern, immer doch.

                    Messenger, welche Art auch immer, wär mir lieber..
                    icq: 327731320
                    msn: suicide@dm-cs.de

                    Kommentar


                    • #12
                      Fazit: kein ordentliches Softwaredesign & schlechte Dokumentation!
                      Viele Grüße,
                      Dr.E.

                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      1. Think about software design [B]before[/B] you start to write code!
                      2. Discuss and review it together with [B]experts[/B]!
                      3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                      4. Write [I][B]clean and reusable[/B][/I] software only!
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                      Kommentar


                      • #13
                        Zitat von dr.e.-new Beitrag anzeigen
                        Fazit: kein ordentliches Softwaredesign & schlechte Dokumentation!
                        Hatten wir alles schon posts vor dir besprochen, aber hauptsache nochmal ausgraben ne?

                        Zumal; keiner zwingt ihn meine Hilfe anzunehmen.

                        Abgesehen davon ist der Post auch schon 1Monat alt. Mittlerweile sieht das bei mir auch schon etwas anders aus.

                        Kommentar


                        • #14
                          Hallo papl,

                          ich bitte um einen etwas gemäßigten Ton. Wenn du schon einen Code-Schnipsel öffentlich anbietet, sollte dieser gewissen Qualitätsstandards genügen. Dazu gehört, dass man sich vorher drüber Gedanken macht, der Code allgemeingültig anwendbar ist und eine Dokumentation des Codes und ein HOWTO zur Verwendung bereitstellt.

                          Ich bitte das in Zukunft zu beachten.
                          Viele Grüße,
                          Dr.E.

                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          1. Think about software design [B]before[/B] you start to write code!
                          2. Discuss and review it together with [B]experts[/B]!
                          3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                          4. Write [I][B]clean and reusable[/B][/I] software only!
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                          Kommentar


                          • #15
                            servus papl,

                            ich meld mich heut abend bei dir - icq ...werd ab ca 19:00/19:30 on sein

                            Gruß Manuel

                            Kommentar

                            Lädt...
                            X