MySQL Mailsystem

FeuerKinD

Grünschnabel
Hallo!

Ich bin gerade debei, meine Homepage neu zu machen. Nun habe ich Mich an PHP & MySQL herangetraut.

Ich werde erst ein Mal mein Grundgerüst erläutern:

Ich habe User, die sich einloggen könne, diese werden in einer Tabelle gespeichert: Benutzerdaten

diese besitzt die Attribute:

Id => auto_increment da immer neue User hinzugefügt werden
Nickname
Kennwort
Nachname
Vorname

Wenn diese User sich eingeloggt haben, dann kommen sie auf einen neue Seite und können nun mein Mailsystem nutzen

Die Mails werden per Formular eingetragen und in einer Tabelle gespeichert: Mail

An
Von
Datum => ist int und wird per Formular mit time() gefüttert
Betreff
Text
mailid => wieder auto_increment zur eindeutigen Mailidentifizierung
gelesen => tinyint (BOOLEAN hab ich nicht gefunden) ist standart auf 0, wenn gelesen auf 1

Mit dem eintragen von neuen Nachrichten habe ich kein Problem, es klappt alles wunderbar.

Nun das eigentliche Problem. Jeder user besitzt einen Posteingang.
Ich möchte nun, dass alle Mails in einer Tabelle aufgelistet werden.

Bis jetzt, bin ich so weit!



PHP:
class mysql_db {
	var $link = false;
	var $resid = false;
	var $doerror = false;
	var $host = "localhost";
	var $user = "root";
	var $passwd = "";
	var $tables = "feuerkind";

	function set_doerror($boolvalue)
	{
		$this->doerror = $boolvalue;
	}

	
function connect()
// Verbindet zur Datenbank
{
  $temp = @mysql_connect
    ($this->host, $this->user, $this->passwd);
  if (!$temp) 
  {
    $this->echoerror();
    return false;
  }
  $this->link = $temp;
  $temp = @mysql_select_db($this->tables, $temp);
  if (!$temp)
  {
    $this->echoerror();
    return false;
  }
  return $this->link;
}


	
function query($sql)
// Sendet eine Anfrage an die Datenbank 
{
  if (!$this->link)
  {
    if ($this->doerror) 
    {
      echo ("<b>Nicht verbunden.</b><br>");
      return false;
    }
  }
  if ($this->resid) @mysql_free_result($this->resid);
  $result = mysql_query($sql, $this->link);
  if (!$result)  $this->echoerror();
  $this->resid = $result;
  return $result;
}

function echoerror()
// erzeugt eine Fehlerausschrift
// wenn $doerror=TRUE
{
  if (!$this->doerror) return;
  if (!mysql_errno()) return;
  echo ("<font color=\"red\"><b>" . mysql_errno());
  echo (": ". mysql_error() ." </b></font><br>");
}

function data()
// liefert einen Datensatz
{
  if (!$this->link)
  {
    if ($this->doerror)
      echo ("<b>Nicht verbunden!</b><br>");
    return false;
  }
  if (!$this->resid)
  {
    if ($this->doerror)
      echo ("<b>Keine Abfrage!</b><br>");
    return false;
  }
  $result = mysql_fetch_array($this->resid, MYSQL_BOTH);
  $this->echoerror();
  return $result;
}


function echoquery($sql)
//Fragt die Datenbank ab und stellt die Abfrage dar
{
  $this->query($sql);
  echo("<center><table width=\"50\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>");
  $index = 0;
  echo("<th class=\"postheader\" width=\"20\">Nr.</th>");
  while ($field = mysql_fetch_field($this->resid))
    echo("<th class=\"postheader\" width=\"40\">$field->name</th>");
  echo ("</tr>\n");
  $rec=0;
  while ($row = $this->data())
  {
    $rec++;
    echo("<tr><th width=\"40\" class=\"post\">$rec</th>");
    for ($i=0; $i<mysql_num_fields($this->resid); $i++)
      echo("<th class=\"post\">".htmlentities($row[$i])."&nbsp;</th>");
    echo("</tr>\n");
  }
  echo ("</table>");
}



function mysql_db()
// Construktor
{
  $this->connect();
}

}


$db = new mysql_db;

?>


Dies ist die Klasse, die die Abfrage in eine Tabelle gibt (Sorry, wegen den CSS)
nun folgt noch die Abfrage zur Funktion. (Copyright by Sven Letzel, editiert von Mir)

PHP:
$db->echoquery("SELECT Datum, Von, Betreff, mailid FROM mail WHERE `an`=\"test\" ORDER BY datum DESC");

Hier wird nach alle Mails für den USER "test" gefragt.
Nun werden alle Mails (ohne Text nur der Betreff) aufgelistet, mein Problem, ich möchte nun, dass man den Betreff anklicken kann und sich eine neue Seite öffnet. Ich weiß bloß nicht, wie ich die variablen übergeben soll.

PHP:
$db->echoquery("SELECT Von, Datum, Betreff FROM mail WHERE `an`=\"Test\" AND `mailid`=\"$mailid\"");

Ich möchte nun ebend die Klasse umschreiben, damit ich irgendwie durch heraufklicken die $MAILID an eine andere Siete übermitteln kann

die Funktion "echoquery()" listet Mir jedoch nur alle Daten auf, wie kann ich da nun dynamische Links einbringen Ich sitze hier schon ziemlich lange dran, arbeite mir PHP seit 4 Wochen, musste da etwas für die Schule machen, aber da ging alles nur im Stile autodidaktisch beibringen und ja schnell fertig werden! Ich komme nun aber einfach nicht weiter, bitte helft Mir, was muss ich bei meiner echoquery() Funktion ändern?



PHP:
function echoquery($sql)
//Fragt die Datenbank ab und stellt die Abfrage dar
{
  $this->query($sql);
  echo("<center><table width=\"50\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>");
  $index = 0;
  echo("<th class=\"postheader\" width=\"20\">Nr.</th>");
  while ($field = mysql_fetch_field($this->resid))
    echo("<th class=\"postheader\" width=\"40\">$field->name</th>");
  echo ("</tr>\n");
  $rec=0;
  while ($row = $this->data())
  {
    $rec++;
    echo("<tr><th width=\"40\" class=\"post\">$rec</th>");
    for ($i=0; $i<mysql_num_fields($this->resid); $i++)
      echo("<th class=\"post\">".htmlentities($row[$i])."&nbsp;</th>");
    echo("</tr>\n");
  }
  echo ("</table>");
}

Mit freundlichen Grüßen
Sebastian

P.S.: Der Beitrag ist ein wenig unübersichtlich, also wenn ihr mehr fragen habt, fragt Bitte (welch ein Satz)!
 
Zuletzt bearbeitet:
Ich verstehe irgendwie nicht warum du in einer Klasse eine Funktion einbaust, die etwas ausgibt, und zwar immer nur genau das Feld name und $row[$i] (was auch immer das ist).

Das entspricht doch nicht dem sinn der Wiederverwendbarkeit von Klassen.
Ich persönlich würde die Ausgabe ausserhalb der Klasse machen.

Ich will trotzdem kurz erklären wie du es machen könntest:

Du machst in deiner Funktion echoquery einen Link der ungefähr so aussieht:
PHP:
echo "<a href=\"deineseite.php?mailid=$field->mailid\">$field->betreff</a>";

Dazu brauchst du natürlich auch die Mailid bei der abfrage.

und bei der Ausgabe von der Nachricht schreibst du es dann so:
PHP:
$db->echoquery("SELECT Von, Datum, Betreff FROM mail WHERE `an`=\"Test\" AND `mailid`=\"".$_GET['mailid']."\"");

mfg

Devil

PS: Ist das Absicht dass du immer <th> verwendest?
 
Danke für die schnelle Antwort.
Also ich bekomme das immer noch nicht hin. Mit der Klasse, ich habe das aus einem Buch, die arbeitet auch damit und meinen, das erleichtert einen viel Schreibarbeit.

ich habe das nun an meine Page angepasst, bekomme das aber immer noch nicht hin.

PHP:
function echoquery($sql)
//Fragt die Datenbank ab und stellt die Abfrage dar
{
  $this->query($sql);
  echo("<center><table width=\"50\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>");
  $index = 0;
  //echo("<th class=\"postheader\" width=\"20\">Nr.</th>");
  while ($field = mysql_fetch_field($this->resid))
    echo("<th class=\"postheader\" width=\"40\">$field->name</th>");
     echo ("</tr>\n");
  $rec=0;
  while ($row = $this->data())
  {
    $rec++;
    //echo("<tr><th width=\"40\" class=\"post\">$rec</th>");
    for ($i=0; $i<mysql_num_fields($this->resid); $i++)
      echo("<th class=\"post\"><a href=\"intern.php?mi=mailsystem/readmail&mailid=$field->mailid\">".htmlentities($row[$i])."</a>&nbsp;</th>");

    echo("</tr>\n");
  }
  echo ("</table>");
}

Bitte sag Mir doch, wo ich das genau hinschreiben muss.
Wenn ich Mir das im Browser abgucke, gibt er nur den Link raus, jedoch ohne die variable mailid weiterzugeben (siehe Bild)

Sebastian
 

Anhänge

  • mailid.jpg
    mailid.jpg
    11,5 KB · Aufrufe: 83
Aaaahhh jetzt seh ich es erst...

Das hier hat mich etwas durcheinander gebracht...
PHP:
for ($i=0; $i<mysql_num_fields($this->resid); $i++) 
      echo("<th class=\"post\">".htmlentities($row[$i])."&nbsp;</th>");

Diese for schleife listet sozusagen alle Spalten auf, d.h. du würdes auf jeden Wert (also auf 'Datum', 'Von', 'Betreff' und 'Mailid' ) einen Link setzen, wenn du es mit der Methode (=Funktion in einer klasse) echoquery machst.
Wenn du das so willst, müsstest du es dann so machen:

PHP:
echo("<th class=\"post\"><a href=\"intern.php?mi=mailsystem/readmail&mailid=".$row[3]."\">".htmlentities($row[$i])."&nbsp;</th>");

Wobei $row[3] nach deiner Abfrage zufolge
PHP:
$db->echoquery("SELECT Datum, Von, Betreff, mailid FROM mail WHERE `an`=\"test\" ORDER BY datum DESC");
die Mailid sein müssten.

Ich hoffe, ich konnte dir damit weiterhelfen

mfg

Devil
 
Zurück