[PHP & MySQL] PN System - nachricht kommt nicht an

Kuhmuhphu
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">&nbsp;

                                                </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>
Kuhmuhphu
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.
Oli
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
Kuhmuhphu
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>

Oli
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
Kuhmuhphu
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
Oli
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.
Kuhmuhphu
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?
Oli
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.
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;



Oder irgendwie besondern?

Und dann statt
php:
1:
".$row->id."


php:
1:
".$row->.$_SESSION["userid"]."
Oli
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->id."

php:
1:
".$row->.$_SESSION["userid"]."
Wieso $row-> ?? Steht deine Session in der MySQL-Zeile? Augenzwinkern