Gegen Bilderklau - Das Original (https://www.gegen-bilderklau.net/index.php)
- Design, Website, Copyright (https://www.gegen-bilderklau.net/board.php?boardid=80)
--- Homepagehilfe (https://www.gegen-bilderklau.net/board.php?boardid=27)
---- Homepagehilfe - Archiv (https://www.gegen-bilderklau.net/board.php?boardid=139)
----- [PHP & MySQL] PN System - nachricht kommt nicht an (https://www.gegen-bilderklau.net/thread.php?threadid=176302)


Geschrieben von Kuhmuhphu am 14.10.2010 um 20:58:

  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">&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>



Geschrieben von Kuhmuhphu am 15.10.2010 um 09:25:

 

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.



Geschrieben von Oli am 15.10.2010 um 10:34:

 

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



Geschrieben von Kuhmuhphu am 15.10.2010 um 10:43:

 

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>




Geschrieben von Oli am 15.10.2010 um 10:56:

 

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



Geschrieben von Kuhmuhphu am 15.10.2010 um 11:29:

 

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



Geschrieben von Oli am 15.10.2010 um 11:47:

 

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.



Geschrieben von Kuhmuhphu am 15.10.2010 um 12:00:

 

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?



Geschrieben von Oli am 15.10.2010 um 12:31:

 

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.



Geschrieben von Kuhmuhphu am 15.10.2010 um 13:01:

 

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"]."



Geschrieben von Oli am 15.10.2010 um 13:16:

 

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


Forensoftware: Burning Board, entwickelt von WoltLab GmbH