Fragen zu Chat

Ich habe einige Fragen ich habe mir eine art shoutbox programmiert
und habe nun einige fragen:
1.) Ich habe alle nick names + pw's in der php datei gespeichert welche testet ob name + pw stimmen, wie kann ich das ganze mit einer mysql datenbank verknüpfen dass nick + pw gelesen wird (aus der datenbank)und dass jeder user dann eine bestimmte seite geleitet wird?

2.) Wie funktionieren überhaupt sessions also wie mache ich dass ein user angemeldet bleibt?

3.) Ich speichere alle eingaben immoment in ein textfile wie schaffe ich es dass sie in die MYSQl Datenbank kommen und dass das letzte immer wieder gelöscht wird

4.) wie erstelle ich eine liste wer online ist (wenn das mit den sessions klapppt?!)

ich erwarte keine vollstänigen lösungen sonder eher hilfen..
im voraus danke
mfg virus

edit: ich kann das ganze mal hochladen dass ihr es euch durchschaut aber nur wenn jemand daran intresse hat...
 
Original von Virus
Ich habe einige Fragen ich habe mir eine art shoutbox programmiert
und habe nun einige fragen:
1.) Ich habe alle nick names + pw's in der php datei gespeichert welche testet ob name + pw stimmen, wie kann ich das ganze mit einer mysql datenbank verknüpfen dass nick + pw gelesen wird (aus der datenbank)und dass jeder user dann eine bestimmte seite geleitet wird?

Da solltest du alles finden: http://tut.php-quake.net/

2.) Wie funktionieren überhaupt sessions also wie mache ich dass ein user angemeldet bleibt?

Sessions findest du auf der oben angegebenen Seite. Du solltest die Session allerdings in cookies speichern.

4.) wie erstelle ich eine liste wer online ist (wenn das mit den sessions klapppt?!)

Das geht nicht mit HTML und PHP alleine.
 
Original von valenterry
Original von Virus
4.) wie erstelle ich eine liste wer online ist (wenn das mit den sessions klapppt?!)

Das geht nicht mit HTML und PHP alleine.

Naja indirekt gehts schon: Ich machs zB so, dass ich einfach immer wenn wer mit seiner Session irgendeine Seite aufruft wird der aktuelle Timestamp in die Datenbank zusammen mit dem Namen des Users geschrieben. Und auf der Hauptseite werden einfach alle als Online angezeigt, deren Timestamp größer als die aktuelle zeit - 5 Minuten ist, folglich alle die innerhalb der letzten 5 Mins on waren.

So funktioniert das auch im phpBB, deswegen steht da auch immer "User, die in den letzten 5 Minuten aktiv waren" :D

Manuel
 
4.) wie erstelle ich eine liste wer online ist (wenn das mit den sessions klapppt?!)
Das geht nicht mit HTML und PHP alleine.

warum soll das mit PHP nicht gehen

mann kann ganz einfach in einer Datenbank die letzte Aktivität des Users speichern und alle User die zB in den letzten 5 Minuten Aktiv waren per DB Abfrage ausgeben

EDIT:
Manuel war schneller ^^
 
Ja, man kann gucken, ob der User in den _letzten 5 Minuten_ aktiv _war_, aber _nicht_, ob er _im moment_ gerade aktiv _ist_ und sich gerade etwas durchliest. ;)
Dafür ist HTTP nunmal nicht geschaffen.

PS: Ja, ich mag _Unterstriche_
 
Pass auf ;)

PHP:
<?php
    //mysql verbindung aufbauen
    
    //name = name des users
    $name = "Jumpa";
    //pass = passwort des users
    $pass = "Test";
    $users = mysql_query("SELECT * FROM users WHERE name = '$name'") or         die(mysql_error());
    while($fetch = mysql_fetch_assoc($select)) {
        if($fetch["pass"] != $pass) {
            echo "<p>Das angegebene Passwort stimmt nicht</p>";
         } else {
            session_start();
            //auf eine Seite weiterleiten
            header("location: index.php");
         }
     }
?>
 
Original von jumpa
Pass auf ;)

PHP:
<?php
    //mysql verbindung aufbauen
    
    //name = name des users
    $name = "Jumpa";
    //pass = passwort des users
    $pass = "Test";
    $users = mysql_query("SELECT * FROM users WHERE name = '$name'") or         die(mysql_error());
    while($fetch = mysql_fetch_assoc($select)) {
        if($fetch["pass"] != $pass) {
            echo "<p>Das angegebene Passwort stimmt nicht</p>";
         } else {
            session_start();
            //auf eine Seite weiterleiten
            header("location: index.php");
         }
     }
?>

Also das ist ja mal gar nicht schön! So sollte man das auf keinen Fall machen.
 
Original von BasicAvid
Also das ist ja mal gar nicht schön! So sollte man das auf keinen Fall machen.

Dann hätteste wenigstens gleich dazuschreiben können was verbesserungsfähig ist:
1. da is SQL Injection möglich
2. das PW is unverschlüsselt in der DB

macht man
PHP:
<?php
    //mysql verbindung aufbauen
    
    //name = name des users
    $name = mysql_escape_string("Jumpa");
    //pass = passwort des users
    $pass =  md5("Test");
    $users = mysql_query("SELECT * FROM users WHERE name = '$name'") or         die(mysql_error());
    while($fetch = mysql_fetch_assoc($select)) {
        if($fetch["pass"] != $pass) {
            echo "<p>Das angegebene Passwort stimmt nicht</p>";
         } else {
            session_start();
            //auf eine Seite weiterleiten
            header("location: index.php");
         }
     }
?>

draus isses doch annehmbar
 
Dazu hatte ich keine Zeit. Ist aber immer noch nicht die feine Englische Art.

1) Der User sollte keine direkten mysql_error Meldungen bekommen

und

2) Eine Schleife zu benutzen um zu sehen ob das Passwort stimmt ist nicht gerade schön.
 
Original von BasicAvid
Dazu hatte ich keine Zeit. Ist aber immer noch nicht die feine Englische Art.

1) Der User sollte keine direkten mysql_error Meldungen bekommen

und

2) Eine Schleife zu benutzen um zu sehen ob das Passwort stimmt ist nicht gerade schön.

Zu 1.: Stimmt, aber die groben Sicherheitsprobleme sind damit schonmal gelößt :D
Hab ja auch geschrieben dass es ganz annehmbar is..

Zu 2: Kommt drauf an ob Doppelbelegung des Loginnamens möglich is, wenns jetzt mehrere Jumpas gibt, die aber eine verschiedene ID haben, ist die Schleife auf jedenfall notwendig.

Manuel
 
Danke mit so viel hilfe hab ich net gerechnet ihr habt mir SEHR viel weitergeholfen
aber jetzt hab ich schon wieder ein prob

Code:
<html>
<head>
<link rel="stylesheet" type="text/css" href="chat.css">
</head>
<body>
<h3>NAME/h3>
<?php
/* Datei mit chat Daten auslesen */
mysql_connect("localhost", "*******", "*********");
mysql_select_db("********");
$res = mysql_query("select * from daten
	order by zeit desc");

if(mysql_num_rows($res)>0)
	echo "<table>";
	echo "<tr><td><b>Zeit</b></td>";
	echo "<td><b>Name</b></td>";
	echo "<td><b>Beitrag</b></td></tr>";

	while($dsatz = mysql_fetch_assoc($res))
{
	$z = $dsatz["zeit"];
	$zs = substr($z,6,2) . "."
 	 . substr($z,4,2) . "."
	 . substr($z,2,2) . " "
	 . substr($z,8,2) . ":"
	 . substr($z,10,2) . ":"
	 . substr($z,12,2);
	echo "<tr>";
	echo "<td>$zs</td>";
	echo "<td>" . $dsatz["nick"] . "</td>";
	echo "<td>" . $dsatz["beitrag"] . "</td>";
	echo "</tr>";
}
	echo "</table>";

?>
</body>
</html>

was mache ich falsch???

mfg virus
PS: nochma danke
 
Wie wärs mal wenn du den Fehler besser beschreiben würdest? Fehlermeldungen etc. wären sicher sehr hilfreich! :rolleyes:
 
oh sry also dieses script ist dafür da in einem frame die bisher geposteten meldung auszugeben jedoch tauchen dabei immer fehler mit den angegebenen mysql befehlen auf...

Code:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/export/www/vhosts/funnetwork/hosting/moritzknaut/CLUSTER2/chat_aus.php on line 14

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /usr/export/www/vhosts/funnetwork/hosting/moritzknaut/CLUSTER2/chat_aus.php on line 20
gruß virus
 
Füg in Zeile 11, hinter der mysql_query() einfach ein or die(mysql_error()) ein.

Ist zwar nicht sauber, aber du siehst den Fehler, kannst ihn beheben, und dann or die(mysql_error()) wieder rausnehmen.
 
danke hat gefunzt...
aber jetzt hab ich schon des nächste problem
und zwar hab ich bei mir bei diesem script

Code:
<html>
<head>
<link rel="stylesheet" type="text/css" href="chat.css">
<script type="text/javascript">
/* Beitrag senden falls Name und Beitrag vorhanden */
function send()
{ 
	if(document.f.nick.value != "" &&
	document.f.beitrag.value != "")
	document.f.submit();
}
/* Chat-Anzeige aktualisieren */
function reload()
{
parent.ausgabe.location = "chat_aus.php";
</script>
</head>
<body>
<?php 
/* Anhängen des neuen Textes, falls vorhanden */
if(isset($beitrag))
{
mysql_connect("*******", "********", "*******");
mysql_select_db("MoritzKnaut");
mysql_query("insert daten (nick, beitrag)
	values ('$nick', '$beitrag')");
/* Chat-Anzeige aktualisieren */
	echo "script type='text/javascript'>";
	echo "reload();</script>";
}
?>
<form name="f" action="chat_ein.php" method="post">
<table>
	<tr>
	<td> Ihr Name:</td>
	<td><input name="nick">
	<?php if(isset($nick))
		echo "value='$nick'"; ?>
	<size="20"></td>
	<td align="center">
	<a href="javascript:reload() ;">Chat laden</a>
	</td>
	<td align="right">
	<a href="javascript:send() ;">Senden</a>
	</td>
	</tr>
	<tr>
	<ts valign="top">Ihr Beitrag:</td>
	<td colspan="3">
	<textarea cols="50" rows="2"
		name="beitrag"></textarea>
	</td>
	</tr>
</table>
</form>
</body>
</html>

und das problem ist wenn ich die java scriptfunfktion send oder reload verwenden will passiert einfach nichts es bleibt alles so wie es war..??
wie kann dass sein ich habe alles überprüft aber finde den fehler mal wieder nicht...
hoffe dass ihr mir helfen könnt..

gruß virus

selber gelöst!!^^ hab nur ne klammer vergessen...
aber jetzt gibts schon wieder ein problem er aktualisiert zwar aber er sendet nicht ;(
er zeigt mir nur über dem eingabe feld für den name
Das
Code:
script type='text/javascript'>reload();"
an?!
was könnte dass jetzt sein?ß
Ich weiß ich bin schwierig aber ich tue was ich kann um meine fehler zu vermeiden jedoch bin ich halt bei php noch nicht so weit...
gruß virus
 
Fehler gefunden:

Code:
/* Chat-Anzeige aktualisieren */
	echo "script type='text/javascript'>";
	echo "reload();</script>";

Da fehlt ne Klammer ( < ) vor script im ersten Echo befehl :D

Manuel
 
thx...
aber ich glaub ich dreh durch kaum is der eine fehler behoben kommt schon der nächste und zwar wird einfach nichts in die datenbank eingetragen!!

gruß virus
(wie kann ich euch nur danken ;)
 
Zu 2: Kommt drauf an ob Doppelbelegung des Loginnamens möglich is, wenns jetzt mehrere Jumpas gibt, die aber eine verschiedene ID haben, ist die Schleife auf jedenfall notwendig.

Was aber dann schlechtes Datenbankdesign wäre ;), denn was machst Du wenn jetzt zufällig beide Jumpas das gleiche Passwort haben?? Ist zwar unwahrscheinlich aber trotzdem möglich.

mysql_query("insert daten (nick, beitrag)

INSERT INTO wäre korrekt.
 
Ich würde dir empfehlen, nach jeder mysql_query ein "or die(mysql_error())" anzuhängen.

meistens hängt dort im Syntax irgendwo der Fehler.
 
also nochmal danke bei mir funtioniert jetzt endlich alles prächtig nur hab ich jetzt nochmal 2 fragen also
1.)Wenn ich versuche mich einzuloggen kommt diese meldung
Code:
 Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in ... on line 9
benutzen tu ich das script loginscript von manuel jedoch taucht bei dem von Jumpa die gleiche meldung auf?!
was kann ich tun?

2.)
Am ende dieses scripts wird doch eine session gestartet nun habe ich gelesen dass in sessions über so ID´s laufen und dass ist auch alles klar blos komme ich in dem punkte nicht weiter wie ich bei dem nächsten script aus dieser ID einen namen und die session lesen kann??
wie funktioniert dass?
gruß virus
und nochmal danke..

edit: hab den rest selber gelöst... jetzt futzt alles prächtig..
 
Zurück
Oben