PN System - nachricht kommt nicht an |
Kuhmuhphu

Probiers mal mit Gemütlichkeit
 
Dabei seit: 20.12.2009
Beiträge: 3.168
Herkunft: Hinter den 7 Bergen..
 |
|
PN System - nachricht kommt nicht an |
 |
So.. nach gefühlten 1000 Fehlermeldungen hab ichs nun doch einigermaßen zum laufen gebracht^^
Allerdings kommen die Nachrichten nicht an..
Sie werden aber in die Tabelle eingetragen..
Irgendwie komme ich gerade nicht weiter.. mein Kopf raucht sozusagen.
Ich hoffe ihr könnt mir weiter helfen..
Ist sicherlich mal wieder ganz simpel.
php: |
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:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
|
<?php include("checkuser.php");
?>
<?php
session_start();
if(isset($_SESSION["nickname"])) { // Wenn eingeloggt..
include("db.php");
include("functions.inc.php");
if(isset($_REQUEST["submit"])) { // Wenn abgeschickt
if($_REQUEST["status"] == "lesen") { // Als gelesen
foreach ($_REQUEST["nachricht"] as $pn) {
if(exist("nachrichtensystem WHERE id = '".$pn."' AND empfaenger = '".$_SESSION["nickname"]."'")) {
$update = mysql_query("UPDATE nachrichtensystem Set status = 'alt' WHERE id = '".$pn."'");
}
}
}
elseif($_REQUEST["status"] == "delete") { // Als gelöscht
foreach ($_REQUEST["nachricht"] as $pn) {
if(exist("nachrichtensystem WHERE id = '".$pn."' AND empfaenger = '".$_SESSION["nickname"]."'")) {
$loesch = mysql_query("DELETE FROM nachrichtensystem WHERE id = '".$pn."'");
}
}
}
}
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="stylesheets.css">
</head>
<body style="background-color:transparent">
<h2 class="h2">POSTEINGANG</h2>
<br>
<br>
<center>
<script language="JavaScript">// Funktion um alles auszuwählen
<!--
var Mark = true;
function Alle ()
{
for(i = 0; i < document.getElementsByName("nachricht[]").length; i++)
{
document.getElementsByName("nachricht[]")[i].checked = Mark;
}
if(Mark) {
Mark = false;
} else {
Mark = true;
}
}
//-->
</script>
<form action=posteingang.php method=post>
<table width=90% border=0>
<tr>
<td width=10% class="dunkel">
</td>
<td width=40% class="dunkel">
<b>Betreff</b>
</td>
<td width=20% class="dunkel">
<b>Absender</b>
</td>
<td width=20% class="dunkel">
<b>Datum</b>
</td>
<td width=20% class="dunkel">
<b>Antworten</b>
</td>
</tr>
<?php
$abfrage = "SELECT * FROM nachrichtensystem WHERE empfaenger = '".$_SESSION["nickname"]."' ORDER BY status,id DESC"; // Zeigt PNs an wo Empfänger gleich User. Ordnet nach Status und dann nach ID
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{ // Anzeige ->
?>
<tr>
<td width=10%>
<input type="checkbox" name="nachricht[]" value="<?= $row->id ?>">
</td>
<td width=40%>
<?php
if($row->status == "neu") {
echo "NEU: ";
}
?>
<b><a href=pn.php?id=<?= $row->id ?>><?= $row->betreff ?></a></b>
</td>
<td width=20%>
<?php
$abfrage2 = "SELECT nickname FROM mitglieder WHERE id = '".$row->absender."' LIMIT 0,1"; // Usernamen des Absenders
$ergebnis2 = mysql_query($abfrage2);
while($row2 = mysql_fetch_object($ergebnis2))
{
echo "<a href=mitglieder.php?id=".$row->absender.">".$row2->name."</a>";
}
?>
</td>
<td width=20%>
<?= date("d.m.Y",$row->timestamp) ?> um <?= date("H:i",$row->timestamp) ?>
</td>
<td width=20%>
<a href=newpn.php?antwort=<?= $row->id ?>>Antworten</a>
</td>
</tr>
<?php
}
?>
</table>
<br />
<a href=javascript:Alle();>Alle Markieren</a>
<select size=1 name="status">
<option value="lesen">Als gelesen</option>
<option value="delete">Löschen</option>
</select>
<input type="submit" value="Ändern" name="submit">
</form>
</center>
<br /><br />
<a href=newpn.php>Neue PN</a>
<?php
}
?>
</body>
</html>
|
|
|
|
14.10.2010 20:58 |
|
|
Kuhmuhphu

Probiers mal mit Gemütlichkeit
 
Dabei seit: 20.12.2009
Beiträge: 3.168
Herkunft: Hinter den 7 Bergen..
Themenstarter
 |
|
Genau nicht im Posteingang des Users dem die Nachricht geschrieben wird..
Ich hab gerade nochmal nachgeschaut.. der Empfänger wird mit seiner id gespeichert.
Kann es sein das ich den aber mit seinem Nickname speichern müsste?
Es kommt keine Fehlermeldung die Nachricht wird ja korrekt verschickt und in die nachrichtensystem Tabelle bei phpmyadmin eingetragen. Kommt halt nur nicht beim Empfänger an.
|
|
15.10.2010 09:25 |
|
|
Oli
Server-Administrator
    
Dabei seit: 13.06.2010
Beiträge: 1.540
 |
|
Zitat: |
Ich hab gerade nochmal nachgeschaut.. der Empfänger wird mit seiner id gespeichert.
Kann es sein das ich den aber mit seinem Nickname speichern müsste? |
Falls du damit meinst, dass in der Spalte "empfaenger" die ID des Users steht, dann musst du entweder in dieser Spalte den Nickname speichern, oder deine Abfrage so ändern, dass auf die ID geprüft wird.
php: |
1:
|
abfrage = "SELECT * FROM nachrichtensystem WHERE empfaenger = '".$_SESSION["nickname"]."' ORDER BY status,id DESC"; |
|
Wenn also in "empfaenger" 4 steht, für den User "Max", dann ergibt diese Abfrage natürlich keine Ergebnisse, denn 4 ist nicht "Max".
Im Zweifelsfall bitte mal den Code posten, der die PNs einfügt - dann können wir damit vergleichen.
LG
|
|
15.10.2010 10:34 |
|
|
Kuhmuhphu

Probiers mal mit Gemütlichkeit
 
Dabei seit: 20.12.2009
Beiträge: 3.168
Herkunft: Hinter den 7 Bergen..
Themenstarter
 |
|
Da wird sie eingetragen
php: |
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:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
|
<?php
session_start();
if(isset($_SESSION["nickname"])) { // Wenn eingeloggt..
include("db.php");
include("functions.inc.php");
if(anzahl("nachrichtensystem WHERE absender = '".$_SESSION["nickname"]."' AND timestamp > '".(time()-120)."'") <= 3) { // In den letzten 2 Minuten nicht mehr als 3PNs schreiben. Ist ein Spamschutz ;)
if(isset($_REQUEST["submit"])) { // Wenn abgeschickt
if(!empty($_REQUEST["empfaenger"]) && !empty($_REQUEST["betreff"]) && !empty($_REQUEST["text"])) { // Wenn alles audgefüllt
$abfrage = "SELECT * FROM mitglieder WHERE id = '".strip_tags($_REQUEST["empfaenger"])."' OR nickname = '".strip_tags($_REQUEST["empfaenger"])."' LIMIT 0,1";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
$eintragen = mysql_query("INSERT INTO nachrichtensystem (absender, betreff, timestamp, status, text, empfaenger) VALUES ('".$_SESSION["nickname"]."', '".strip_tags($_REQUEST["betreff"])."', '".time()."', 'neu', '".post($_REQUEST["text"])."', '".$row->id."')");
}
}
}
if(isset($_REQUEST["antwort"]) && exist("nachrichtensystem WHERE id = '".strip_tags($_REQUEST["antwort"])."' AND empfaenger = '".$_SESSION["nickname"]."'")) { // Wenn man antworten will..
$abfrage = "SELECT absender, betreff FROM nachrichtensystem WHERE id = '".strip_tags($_REQUEST["antwort"])."' LIMIT 0,1";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
$betreff = "RE: ".$row->betreff;
$empfaenger = $row->absender;
}
} else {
$betreff = "";
$empfaenger = "";
}
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="stylesheets.css">
</head>
<body style="background-color:transparent">
<h2 class="h2">POSTEINGANG</h2>
<br>
<br>
<center>
<form action=newpn.php method=post>
<table width=90%>
<tr>
<td width=50% class="hell">
<b>Betreff:</b>
</td>
<td width=50%>
<input type="text" name="betreff" value="<?= $betreff ?>">
</td>
</tr>
<tr>
<td width=50% class="hell">
<b>Empfänger:</b>
</td>
<td width=50%>
<input type="text" name="empfaenger" value="<?= $empfaenger ?>">
</td>
</tr>
<tr>
<td width=50% class="hell">
<b>Text:</b>
</td>
<td width=50%>
<textarea name="text" cols=25 rows=4></textarea>
</td>
</tr>
<tr>
<td width=100% colspan=2 align=right>
<input type="submit" value="Abschicken" name="submit">
</td>
</tr>
</table>
</form>
<br /><a href=posteingang.php>Posteingang</a>
</center>
<?php
}
else { // Wenn zu viele PNs
?>
Du darfst nur 3 PNs in 2 Minuten abschicken!
<?php
}
}
?>
</body>
</html>
|
|
|
|
15.10.2010 10:43 |
|
|
Oli
Server-Administrator
    
Dabei seit: 13.06.2010
Beiträge: 1.540
 |
|
Aaaaaalso.. genau, wie du vermutet hast, liegt das Problem darin, dass du die ID einträgst, aber den Nickname abfrägst.
Du hast jetzt also 2 Möglichkeiten.
1. Möglichkeit: Beim Eintragen statt der ID, den Nickname speichern.
Dazu müsstest du einfach nur am Ende der Zeile
php: |
1:
|
$eintragen = mysql_query("INSERT INTO nachrichtensystem (absender, betreff, timestamp, status, text, empfaenger) VALUES ('".$_SESSION["nickname"]."', '".strip_tags($_REQUEST["betreff"])."', '".time()."', 'neu', '".post($_REQUEST["text"])."', '".$row->id."')"); |
|
das $row->id zu $row->nickname ändern. Achtung: In der Tabelle muss dann für das Feld natürlich z.B. "VARCHAR" als Typ ausgewählt sein. Wenn das Feld ein INT ist, kannst du keinen Nickname darin speichern und müsstest das Feld ändern.
2. Möglichkeit: Beim Abruf zuerst die ID des Users ermitteln.
Den Code dafür hast du bereits verwendet - in der Datei zum Eintragen - um eben dort die ID zu ermitteln.
Ich habe lediglich $_SESSION["nickname"] angepasst, das strip_tags entfernt (das brauchst du nicht, da der Wert ohnehin sicher ist, er kommt ja unverändert von dir) und die 2. Abfrage nach der ID entfernt, denn $_SESSION["nickname"] wird ohnehin niemals eine ID beinhalten:
php: |
1:
2:
3:
|
$abfrage = "SELECT * FROM mitglieder WHERE nickname = '".$_SESSION["nickname"]."' LIMIT 0,1";
$ergebnis = mysql_query($abfrage);
// ... |
|
Damit könntest du die ID ermitteln und anschließend die Abfrage mithilfe der ID machen, statt des Nicknames.
LG
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Oli: 15.10.2010 10:57.
|
|
15.10.2010 10:56 |
|
|
Kuhmuhphu

Probiers mal mit Gemütlichkeit
 
Dabei seit: 20.12.2009
Beiträge: 3.168
Herkunft: Hinter den 7 Bergen..
Themenstarter
 |
|
Ok..ich habs jetzt mit der 2 Möglichkeit gemacht..
Jetzt hab ich im Posteingang eine nachricht vom 1.1.1970 die ich nicht löschen kann^^ (meine Tabelle ist aber leer.. also es exestiert eigentlich kein inhalt in der tabelle nachrichtensystem)
Und wenn ich jetzt eine neue schreiben will dann kommt
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /users/rvbuchenhain/www/Buchenhain/login/newpn.php on line 17
|
|
15.10.2010 11:29 |
|
|
Oli
Server-Administrator
    
Dabei seit: 13.06.2010
Beiträge: 1.540
 |
|
Zitat: |
Original von Kuhmuhphu
Jetzt hab ich im Posteingang eine nachricht vom 1.1.1970 die ich nicht löschen kann^^ (meine Tabelle ist aber leer.. also es exestiert eigentlich kein inhalt in der tabelle nachrichtensystem)
[...]
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /users/rvbuchenhain/www/Buchenhain/login/newpn.php on line 17 |
Zu der "nicht-existierenden" PN: Mach einfach mal ein
php: |
1:
2:
3:
|
if(mysql_num_rows($ergebnis) > 0) {
//hier das while($row = ...
} |
|
um die Ausgabe herum, sodass deine Ausgabe (das ist die while-Schleife) nur dann erfolgt, wenn auch mehr als 0 Datensätze gelesen wurden.
Hast du irgendwas an der newpn.php geändert? Falls ja poste bitte die Änderungen oder mach sie rückgängig, es hat ja vorher funktioniert.
|
|
15.10.2010 11:47 |
|
|
Kuhmuhphu

Probiers mal mit Gemütlichkeit
 
Dabei seit: 20.12.2009
Beiträge: 3.168
Herkunft: Hinter den 7 Bergen..
Themenstarter
 |
|
Also verändert hab ich nichts dran.. hab mich eben gerade nochmal aus und eingeloggt da gings wieder..
Wenn ich jetzt anstelle der 2 die 1 Möglichkeit nehmen würde.. dann müsste ich ja noch mehr am code verändern richtig?
|
|
15.10.2010 12:00 |
|
|
Oli
Server-Administrator
    
Dabei seit: 13.06.2010
Beiträge: 1.540
 |
|
Zitat: |
Original von Kuhmuhphu
Wenn ich jetzt anstelle der 2 die 1 Möglichkeit nehmen würde.. dann müsste ich ja noch mehr am code verändern richtig? |
Nur, wenn du irgendwelche Stellen hast, die eine ID erwarten.
Du könntest jedoch auch gleich beim Login die ID in die Session schreiben, das wäre am einfachsten.. also einfach beim Einloggen auch die ID mit abfragen und zusätzlich zum Nickname die ID in z.B. $_SESSION["userid"] speichern.
|
|
15.10.2010 12:31 |
|
|
Kuhmuhphu

Probiers mal mit Gemütlichkeit
 
Dabei seit: 20.12.2009
Beiträge: 3.168
Herkunft: Hinter den 7 Bergen..
Themenstarter
 |
|
Wusst ich gar nicht das man das kann..
Muss ich dann einfach im login_action schreiben
php: |
1:
2:
|
$_SESSION["nickname"] = $nickname;
$_SESSION["userid"] = $id; |
|
Oder irgendwie besondern?
Und dann statt
php: |
1:
|
".$row->.$_SESSION["userid"]." |
|
|
|
15.10.2010 13:01 |
|
|
Oli
Server-Administrator
    
Dabei seit: 13.06.2010
Beiträge: 1.540
 |
|
Zitat: |
Original von Kuhmuhphu
Wusst ich gar nicht das man das kann..
Muss ich dann einfach im login_action schreiben
php: |
1:
2:
|
$_SESSION["nickname"] = $nickname;
$_SESSION["userid"] = $id; |
|
|
Wenn die ID zu dem Zeitpunkt in $id steht, ja. Du kannst in der Session soviele Daten speichern wie du willst, es ist jedoch nicht empfehlenswert, unnützes Zeug zu speichern, weil das alles auf deinem Server abgelegt wird (bis du die Daten wieder aus der Session löscht oder ein Limit abgelaufen ist, bei dem alte Sessions gelöscht werden..).
Zitat: |
Original von Kuhmuhphu
Und dann statt
php: |
1:
|
".$row->.$_SESSION["userid"]." |
|
|
Wieso $row-> ?? Steht deine Session in der MySQL-Zeile?
|
|
15.10.2010 13:16 |
|
|
|
Impressum
|