php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.05.2008, 12:05  
Benutzer
 
Registriert seit: 19.04.2008
Beiträge: 34
papl befindet sich auf einem aufstrebenden Ast
Standard [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();
  }
}
?>

Geändert von papl (04.05.2008 um 19:28 Uhr).
papl ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.05.2008, 12:29  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

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.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 04.05.2008, 12:34  
Benutzer
 
Registriert seit: 19.04.2008
Beiträge: 34
papl befindet sich auf einem aufstrebenden Ast
Standard

Moin.

Siehe:
Zitat:
-> Kann auch gelöscht werden, da dies ja kein "richtiges Tutorial" ist.
Also bitte verschieben
papl ist offline   Mit Zitat antworten
Alt 04.05.2008, 12:59  
Erfahrener Benutzer
 
Registriert seit: 08.08.2007
Beiträge: 549
PHP-Kenntnisse:
Fortgeschritten
drieling befindet sich auf einem aufstrebenden Ast
drieling eine Nachricht über ICQ schicken
Standard

Verschoben
drieling ist offline   Mit Zitat antworten
Alt 04.05.2008, 16:31  
Erfahrener Benutzer
 
Registriert seit: 29.02.2008
Beiträge: 102
Thomas befindet sich auf einem aufstrebenden Ast
Standard

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
Thomas ist offline   Mit Zitat antworten
Alt 04.05.2008, 17:38  
Benutzer
 
Registriert seit: 07.11.2007
Beiträge: 45
phpler befindet sich auf einem aufstrebenden Ast
Standard

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.
phpler ist offline   Mit Zitat antworten
Alt 04.05.2008, 18:04  
Benutzer
 
Registriert seit: 19.04.2008
Beiträge: 34
papl befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Ein Haufen Quellcode ohne Kommentare und Beschreibung ist ziemlich öde und interessiert niemanden.
Siehe Post unter deinem.

Zitat:
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.

Zitat:
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.

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

Zitat:
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?

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

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

Geändert von papl (04.05.2008 um 18:12 Uhr).
papl ist offline   Mit Zitat antworten
Alt 04.05.2008, 19:10  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
($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.
Zitat:
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?
David ist offline   Mit Zitat antworten
Alt 04.05.2008, 21:01  
Erfahrener Benutzer
 
Registriert seit: 29.02.2008
Beiträge: 102
Thomas befindet sich auf einem aufstrebenden Ast
Standard

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

Geändert von Thomas (04.05.2008 um 21:05 Uhr).
Thomas ist offline   Mit Zitat antworten
Alt 02.06.2008, 19:53  
Benutzer
 
Registriert seit: 31.05.2008
Beiträge: 39
manuel5 befindet sich auf einem aufstrebenden Ast
Standard

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
manuel5 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php ticketsystem tutorial, ticket system tutorial php, php ticketsystem, ticket system php tutorial, auto_increment 1000 - 9999 begrenzen, ticket system mysql php code, ticketsystem php, sql ticketsystem, kleines ticketsystem, php $prefixid, http://www.php.de/php-fortgeschrittene/1089-ticketsystem-moegliche-funktionen.html, php tutorial ticketsystem, was heisst ticketklasse web

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:16 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum