• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mailfunktion für eingeloggte user

BDG

Mitglied
Hallo Leute ... Ich habe eine mailfunktion gebaut ... und nur scheitert es an einer stelle ...
nämlich wenn der user sich einloggt soll er gleich seine mails sehen ... das habe ich mit diesem code bewerkstelligt :
PHP:
<?php 

$verbindung = mysql_connect("localhost", "root" , "") 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("test") or die ("Datenbank konnte nicht ausgewählt werden"); 
$username = $_POST["username"]; 
$password = $_POST["password"]; 
$abfrage = "SELECT username, password FROM test WHERE username LIKE '$username' "; 
$ergebnis = mysql_query($abfrage) or die("Statement fehlerhaft: ".$sql);
$row = mysql_fetch_object ($ergebnis);
 
if($row->password == $password) 
    {  
echo " Login erfolgreich. <br> <a href=\"Geheim.php\">Gesch&uuml;tzer Bereich</a> eingeloggt als  $username";
$verbindung = mysql_connect("localhost", "root" , "") 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("user") or die ("Datenbank konnte nicht ausgewählt werden"); 
$q = mysql_query('SELECT absender, nachricht FROM `$username`');
while($row = mysql_fetch_array($q)) {
echo $row['abseder'].' schrieb: '. $row['nachricht'].'<br>';
}  
    } 
else 
    { 
    echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>"; 
 echo "<br />Ihre eingegebenen Daten :   <br />Benutzername : $username<br />Passwort : $password ";
    } 
 
?>

Wen ein User sich registriert wird für ihn eine Tabellle erstellt mit seinem namen ... und dann wird hier wenn login erfolgreich war sollte eigentlich die mail da stehen die ich gesendet habe von einem anderen user aus ... hier kommt der error :

Login erfolgreich.
Geschützer Bereich eingeloggt als Basti
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Buch\Login.php on line 25

Und Zeile 25 ist Die : while($row = mysql_fetch_array($q)) {
ICh hoffe ihr könnt mir helfen :=)
 
Werbung:
Du erstellst für jeden Benutzer vorher eine eigene Tabelle?
Du solltest deine Datenbank lieber neu gestalten. Das ist keine gute Idee das so zu machen.
Du kannst Nachrichten doch auch so abspeichern:
Code:
Tabelle user (minimal Format):
id int(10) PK
name varchar(50)
password Text

Tabelle nachrichten
id int(20) PK
titel varchar(50)
message Text
fromUserId int(10) FK
toUserId int(10) FK

Wenn du nichts mit meiner Auflistung anfangen kannst lese dich bitte noch ein wenig in die Grundlagen von Datenbanken ein :) (Besonders die Stichwörter Primary Key und Foreign Key)

Und was deinen Fehler betrifft, so scheint es keine Tabelle mit dem Usernamen zu geben.
Denk dran, da könnte dann so etwas stehen wie:
SELECT absender, nachricht FROM `Gilles`
 
Zudem werden mit
PHP:
$username = $_POST["username"]; 
$password = $_POST["password"];
ungeprüft Usereingaben übernommen. Das solltest du dringend ändern!
 
Werbung:
häääghiou ?? das (^^) hab ich jeztz irgendwie nicht verstanden ... also kannst du mir ein ganzes beispiel geben ?
Und was deinen Fehler betrifft, so scheint es keine Tabelle mit dem Usernamen zu geben.
Und doch die Tabelle gibt es auf jden Fall
 
Werbung:
Also hab nun so gemacht :
PHP:
<?php
session_start();
$_SESSION["username"] = $_POST["username"]; 
?>
<?php 

$verbindung = mysql_connect("localhost", "root" , "") 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("test") or die ("Datenbank konnte nicht ausgewählt werden"); 
$username = $_POST["username"]; 
$password = $_POST["password"]; 
$abfrage = "SELECT username, password FROM test WHERE username LIKE '$username' "; 
$ergebnis = mysql_query($abfrage) or die("Statement fehlerhaft: ".$sql);
$row = mysql_fetch_object ($ergebnis);
 
if($row->password == $password) 
    {  
echo " Login erfolgreich. <br> <a href=\"Geheim.php\">Gesch&uuml;tzer Bereich</a> eingeloggt als  $username";
echo " Session ID : ".$_SESSION["s_id"] ;
    } 
else 
    { 
    echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>"; 
 echo "<br />Ihre eingegebenen Daten :   <br />Benutzername : $username<br />Passwort : $password ";
    } 
 
?>
So und die Geheim.php
PHP:
<?php 
$verbindung = mysql_connect("localhost", "root" , "") 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("user") or die ("Datenbank konnte nicht ausgewählt werden"); 
$q = mysql_query('SELECT absender, nachricht FROM `$_SESSION["username"]`');
while($row = mysql_fetch_array($q)) {
echo $row['absender'].' schrieb: '. $row['nachricht'].'<br>';
} 

?>

Wenn ich auf die Login.php geh und mich einlogge steht da aber keine Session id ... komischer weise ... Naja und auf der Geheim.php kommt dieser error :

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Buch\Geheim.php on line 7

Und Line 7 is die :
while($row = mysql_fetch_array($q)) {

:( Ich hoffe ihr könnt mit helfen
 
Lass dir an dieser Stelle mal bitte deine Query ausgeben als echo oder in eine datei schreiben.
mysql_select_db("user") or die ("Datenbank konnte nicht ausgewählt werden");
$q = mysql_query('SELECT absender, nachricht FROM `$username`');


(Der Teil den ich unterstrichen habe)

Dann lass diese query mal in phpmyadmin oder so ausführen, was du für ein Ergebnis erhälst :)
 
Immer noch gleicher error ... aber woher nimmt er bei deinem code denn $username ? hmmm aber error steht immer noch is hier :
while($row = mysql_fetch_array($q)) {
 
Werbung:
probier mal session_start(); ganz am Anfang der Scripte.
Und ich meinte du sollst dir davon (hatte eben das falsche Script kopiert)
Lass dir das mal ausgeben:
$q = mysql_query('SELECT absender, nachricht FROM `$_SESSION["username"]`');
Und teste diese Query dann aus
 
immer noch diese zeile :
while($row = mysql_fetch_array($q)) {
mit dem error : Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Buch\Geheim.php on line 9
 
Liest du eigentlich was ich schreibe genau durch?
Du sollst die query ausgeben alssen als String, kopieren, in phpmyadmin gehen und dann gehst du auf die user datenbank, drückst auf sql (oben) und fügst die query ein und lässt sie durchlaufen
 
Werbung:
aslo wenn ich SELECT (absender,nachricht) FROM `basti` eingebe kommt der error : #1241 - Operand should contain 1 column(s)
 
PHP:
<?php
session_start();

$verbindung = mysql_connect("localhost", "root" , "") 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("test") or die ("Datenbank konnte nicht ausgewählt werden"); 

$username = $_POST["username"]; 
$password = $_POST["password"]; 

$abfrage = "SELECT username, password FROM test WHERE username = '".mysql_real_escape_string($username)."' LIMIT 1"; 

$ergebnis = mysql_query($abfrage) or die("Statement fehlerhaft: ".$sql);
$row = mysql_fetch_object ($ergebnis);
 
if($row->password == $password) 
    {  
$_SESSION['username'] = $_POST['username']; 
# Hier könntest du gleich zur geheimen Seite weiterleiten: header('Location: http://example.org/geheime_seite.html'); exit;
echo " Login erfolgreich. <br> <a href=\"Geheim.php\">Gesch&uuml;tzer Bereich</a> eingeloggt als  $username";
echo " Session ID : ".session_id();
    } 
else 
    { 
    echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>"; 
 echo "<br />Ihre eingegebenen Daten :   <br />Benutzername : $username<br />Passwort : $password ";
    } 
 
?>
PHP:
<?php
session_start();
if(isset($_SESSION['username']) && !empty($_SESSION['username'])) {

$verbindung = mysql_connect("localhost", "root" , "") 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("user") or die ("Datenbank konnte nicht ausgewählt werden"); 
$q = mysql_query('SELECT absender, nachricht FROM `'.mysql_real_escape_string($_SESSION['username']).'` LIMIT 1') or die(mysql_error());

while($row = mysql_fetch_array($q)) {
echo $row['absender'].' schrieb: '. $row['nachricht'].'<br>';
} # while Schleife

} else echo 'Du bist nicht eingeloggt.';
?>
Sag mal, was hier rauskommt. (Fehler vorbehalten.)
 
Zuletzt bearbeitet:
Werbung:
na holla ... hier die errors beim einlogen :

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\Buch\Login.php:1) in C:\xampp\htdocs\Buch\Login.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\Buch\Login.php:1) in C:\xampp\htdocs\Buch\Login.php on line 2
Login erfolgreich.
Geschützer Bereich eingeloggt als Basti Session ID : session_id

und hier die errors wenn ich auf geheim.php gehe :

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\Buch\Geheim.php:1) in C:\xampp\htdocs\Buch\Geheim.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\Buch\Geheim.php:1) in C:\xampp\htdocs\Buch\Geheim.php on line 2
Du bist nicht eingeloggt.
 
Die Fehler on Line 2 kommen, weil vor dem <?php session_start(); noch irgendeine Ausgabe ist. Lösch mal die Leerzeichen davor.

Und diese Line:

PHP:
echo " Session ID : ".session_id;
#in
echo " Session ID : ".session_id();
umwandeln.

Edit: Vor einem session_start() oder einer header() darf auf keinen Fall irgendeine Ausgabe stattfinden. Du hast sehr wahrscheinlich oben mein PHP Teil kopiert, wo vor dem <?php noch aus Versehen Leerzeichen (auch eine Ausgabe) mitgegangen sind.
Danach werden die Fehler on Line 2 verschwinden.
 
Zuletzt bearbeitet:
Werbung:
Juhuuu THX aJunkie nun funktionierts ... da war noch ein leerzeichen vor <?php ... hätte nicht gedacht das das so schlimm ist ... nun funktioniert alles prima :=)
 
Schön. Einiges musst du noch beachten.
Was passiert, wenn der Username falsch ist? Du prüfst nur das Passwort.
Was passiert, wenn jemand schon sehr (zu) oft versucht hat, einzuloggen aber fehlschlug?
Für jeden einzelnen eine Tabelle? Nicht sinnvoll. So habe ich mal auch angefangen und bereue es.

Gibt noch einige Dinge, die du prüfen solltest.

In geheim.php wird geprüft, ob jemand eingeloggt ist ($_SESSION['username']).
Du könntest einfach diese Abfrage in eine extra Datei machen und in jede zu schützende Datei includen.

check.php:
PHP:
session_start();
if(!isset($_SESSION['username']) or empty($_SESSION['username'])) {
session_destroy();
session_unset();
session_regenerate_id();
header('Location: http://example.org/zur_login_seite_weiterleiten.html');
exit;
} # wenn aber $_SESSION['username'] exisiert, wird der Seiteninhalt sichtbar. Diese Datei einfach in die zu schützende Datei per inlude() einbinden
geheim.php
PHP:
include('check.php');
echo 'geheimer Inhalt';
 
Zurück
Oben