Messenger mit PHP, CSS und HTML erstellen

Mona_Lisa

Grünschnabel
Hallo ihr Lieben,
So nachdem ich jetzt die vergangenen drei Tage vor meinem Rechner saß und etliche Internetseiten durchforstet habe suche ich hier eine helfende Seele die mir unter die Arme greifen kann.
Ich Muss am Mittwoch den 11.2. einen Messenger als Uniprojekt Abgeben und bin kurz vorm verzweifeln. Ich hatte gehofft, ich komme ohne Hilfe zurecht, bin aber inzwischen vom Gegenteil überzeugt worden.

Ich habe bereits einen Login erstellt. Man kann sich registrieren und die Nutzer werden in einer Datenbank angelegt. Nun bin ich an dem Punkt, man ist eingeloggt und sollte andere Nutzer mit einem Drop down Menü auswählen können und mit diesen Nutzern Nachrichten schreiben können. Leider funktioniert das nich so wie ich es gerne hätte und ich bin inzwischen schon seit 12 Stunden mit kleinen Syntaxfehlern beschäftigt.

Kennt jemand Tutorials oder Seiten die mir weiter helfen könnten? Oder einen Code den ich verwenden könnte? Ich bin wirklich sehr dankbar für jede Hilfe!
 
Hallo Mona_Lisa

Vermutlich gibt es da schon bereits fertigen Code, allerdings ist "ein Messenger" halt relativ weit gefasst. Welche Techniken willst du überhaupt verwenden? Machst du einen Websocket zum Server auf und kommunizierst darüber bidirektional, sendest du Ajaxrequests um den Server nach neuen Nachrichten zu fragen und um eine Nachricht an einen Nutzer zu schicken? Du erwähnst im Titel clientseitig nur CSS und HTML, ich denke bisschen (viel) Javascript wirst du da auch noch benötigen.

So wie ich das sehe hast du aktuell noch einen Tag Zeit, das ist relativ sportlich, mit den 3 Tagen, die du bereits investiert hast kommst du auf total (maximal) mögliche Arbeitszeit von 4 Tagen. Da du 12 Stunden an "kleinen Syntaxfehlern" hängst vermute ich, dass dein Programmierbackground noch nicht sehr ausgeprägt ist. Daher finde ich 4 Tage als Zeitbudget relativ knapp bemessen.

Wenn du dich mal festgelegt hast, wie du das ganze in Angriff nehmen willst findet sich sicher das eine oder andere Tutorial dazu, von fertigem Code zu kopieren ist abzuraten, Codesuchmaschinen werden den wieder finden und dann kommst du in Erklärungsnot. Dich von fertigem Code inspirieren zu lassen oder einzelne Teile - sofern lizenztechnisch im grünen Bereich - davon zu übernehmen wenn du verstehst was sie machen ist jedoch möglich.

Auf welcher Stufe erwartest du Hilfe? Kannst du selber einen Ajaxrequest an den Server senden und diesen in php verarbeiten und brauchst eher Ansätze wie du das architektonisch umsetzen solltest oder viel mehr bis in die Grundlagen wie man überhaupt einen Webserver macht?

Viele Grüsse
Cromon
 
Vielen Dank für die schnelle Antwort! Ja da liegst du ganz richtig, dass die 4 Tage etwas sehr knapp bemessen sind. Leider habe ich mich in meiner Zeiteinteilung etwas verschäzt und zu viel Zeit in ein Filmprojekt gesteckt.

Alles in allem hatte ich vor dem Projekt keinerlei Erfahrung was programmieren angeht. Daher ist mein Vorwissen auch wirklich sehr gering und das meiste hab ich mir in den letzten Tagen versucht zu erarbeitet. Von Copy-Paste würde ich auch eher absehen, wenn dann würde ich fertige Codes nur als Vorlage sehen und versuchen Teile daraus ausszuarbeiten.

Ich benötige sowohl Anzätze für die architektonische Umsetzung als auch die Grundlagen dafür.
Ich arbeite mit Filezilla über einen Server unserer Universität. Die php- und html-Dateien für den Login und die Registrierung funktionieren bereits.
Nur bin ich mit dem senden der Nachrichten etwas überfordet. Das ganze sollte sehr simpel aufgebaut sein.
 
Ich dachte ich schicke dir einfach mal hier Teile meines Codes damit du einen Einblick bekommen annst was ich überhaupt an Hilfe benötige. Leider ist mein Vorwissen wirklich so gering, dass ich nichtmal beschreiben kann was genau mir noch fehlt, geschweigen denn was ich noch benötige und mit welchen Mitteln ich das aufbauen sollte.

Hier ein Teil der Aufgabenstellung:
Senden von Nachrichten
Angemeldetete Nutzer sollen ihre erhaltenen Nachrichten lesen können. In diesem Schritt soll die Software so erweitert werden, dass auch Nachrichten versendet werden können.
- Die Empfänger können aus einer Drop-Down Liste gewählt werden. Erstellen Sie hierzu eine Datenbankabfrage, die den Inhalt Drop-Down-Liste aus der User-Datenbank liest und PHP-Code, der die Liste generiert.
- Die Nachricht kann in einem Textfeld eingegeben werden und mit einem Absende-Button abgesendet werden.
- Die gesendete Nachricht wird mit Absender und Empfänger in die Nachrichten-Datenbank geschrieben.

Mit diesen beiden Dateien habe ich derzeit noch meine Probleme. Ich habe Teile der Codes aus Vorlesungsfolien und von Kommilitonen übernommen. Leider verstehe ich die Codes noch nicht komplett um sehen zu können was falsch ist oder welche Funktionen für was genau zuständig sind.

<?php include('sessioncheck.php'); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">


<html>
<head>
<title>Chat</title>
<link rel="stylesheet" type="text/css" href="chat.css" >
</head>

<body>
<div id="header">
<h1>Hier kannst du mit deinen Freunden chatten</h1>
</div>
<div id="content">
<div id="form">
<form action="chat-do-2.php" method="post">
<select name="nutzerid">
<?php
$sender = $_SESSION ['user'];
include("mysql.php"); # datenbankverbindung aus externer datei mysql.php
foreach ($dbh->query("SELECT login FROM nutzer") as $row){ # datenbankbefehl -> select, alle logins von tabelle nutzer per foreach schleife
echo '<option value='.$row['login'].'>'.$row['login'].'</option>'; # jeder login ist einem option-tag
}
?>
</select>
<br/>
<textarea name="nachricht" placeholder="Nachricht hier eingeben" autofocus required></textarea>
<br/>
<br/>
<button type="submit">Abschicken</button>
</form>
<a href='logout.php'>Hier gehts zum Logout!</a>
</div>
<div id="nachrichten">
<table border="2" cellspacing="2">
<h2 style="margin:10px 0">Gesendete Nachrichten</h1>
<tr>
<td><b>Empfaenger</b></td>
<td><b>Nachricht</b></td>
</tr>
<?php

foreach ($dbh->query("SELECT * FROM nachricht WHERE sender='$sender' ORDER BY nachrichtenid DESC") as $row){
echo "<tr>";
echo "<td>".$row["empfaenger"]."</td>";
echo "<td>".$row["text"]."</td>";
echo "</tr>";
}
?>
</table>
<table border="2" cellspacing="2">
<h2 style="margin:20px 0">Empfangene Nachrichten</h1>
<tr>
<td><b>Sender</b></td>
<td><b>Nachricht</b></td>
</tr>
<?php

foreach ($dbh->query("SELECT * FROM nachricht WHERE empfaenger='$sender' ORDER BY nachrichtenid DESC") as $row){
echo "<tr>";
echo "<td>".$row["sender"]."</td>";
echo "<td>".$row["text"]."</td>";
echo "</tr>";
}
?>
</table>
</div>
</div>

</body>



Und die Datei chat-do-2.php:

<?php include('sessioncheck.php');
include('mysql.php');

$sender = $_SESSION ['user'];
$empfaenger = $_POST['nutzerid'];
$date = date("Y-m-d H:i:s");

if(!empty($_POST["nachricht"]) == true) {
$nachricht = $_POST["nachricht"];


$sql = "INSERT INTO nachrichten (text, sender, empfaenger) VALUES ('$nachricht','$sender','$empfaenger')";
$q = $dbh->prepare($sql);
$q->execute();
header('Location: message.php');
} else {
echo "Du musst eine Nachricht eingeben, sonst passiert Nichts!<br />";
echo "<a href='message.php'>nochmal versuchen</a>";
}

?>

Vielen, Vielen Dank schonmal im Vorraus.
Viele Grüße
Monalisa
 
Hallo Mona Lisa

Ich schätze mal die Zeit um hier gross ins Detail zu gehen ist wohl zu knapp. Was mir als erstes auffällt:
<h2 style="margin:20px 0">Empfangene Nachrichten</h1>
<h2 style="margin:10px 0">Gesendete Nachrichten</h1>

Geöffnet mit h2, geendet mit h1. Sollte beides entweder h1 oder h2 sein.

Andernfalls: Was geht denn nicht? Welche Fehler erhälst du? Auf den ersten Blick siehts von der Idee eines relativ simplen Systems nicht schlecht aus, ausser dass du in der Dropdownliste alle User ausgibst, du solltest da die Query so abändern, dass der eingeloggte User nicht in der Liste erscheint, ausser man sollte sich selbst auch Nachrichten senden können.

Da mit sowohl die Datenbankstruktur als auch die mysql.php fehlen kann ich das nicht wirklich testen.

Viele Grüsse
Cromon
 
Hallo Cromon,

Danke schonmal.
Also wenn ich ich eingeloggt bin und die Message.php aufgerufen wird, sehe ich lediglich die erste Überschrift <h1> und ein kleines Dropdown-Menü bei dem sich aber leider nichts auswählen lässt. Was genau muss ich in der Query abändern um nur die anderen User sehen zu könnnen? Sich selbst Nachrichten zu schreiben wäre wahrscheinlich eher weniger sinnvoll, außer man hat keine Freunde zum chatten ^^

Meine mysql.php:
<?php
$db = new PDO ('mysql:host=localhost;dbname=u-ml012;charset=utf8','ml012','ooTuciuv9e');
$ergebnis = $db->query('select * from nutzer');
while($row = $ergebnis->fetch(PDO::FETCH_ASSOC)) {
echo $row['name'].' / '.$row['email'].'<br/>';
}
?>



SS1.jpg SS2.jpg

Viele Grüße :)
 
Hallo Mona_Lisa

Deine mysql.php hat so bisschen ein Problem. Sie führt die entsprechende Query aus, die du da angibst (select * from nutzer) und gibt dann alle Ergebnisse via echo aus. Wozu?

Ich würde mal vorschlagen du reduzierst deine mysql.php auf das wesentliche, nämlich:
$db = new PDO ('mysql:host=localhost;dbname=u-ml012;charset=utf8','ml012','ooTuciuv9e');

Dann geht es weiter bei:
foreach ($dbh->query("SELECT login FROM nutzer")

Woher kommt $dbh? in der mysql.php hast du $db, nicht $dbh.

Ausserdem ist das foreach nicht der richtige Weg, mach es so wie vorher in der mysql.php:
PHP:
while($row = $ergebnis->fetch(PDO::FETCH_ASSOC)) {
echo $row['name'].' / '.$row['email'].'<br/>';
}

Also beispielsweise:
PHP:
$sender = $_SESSION ['user'];
include("mysql.php"); # datenbankverbindung aus externer datei mysql.php
$result = $db->query("SELECT login FROM nutzer WHERE login NOT LIKE " . $sender);
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
    echo '<option value='.$row['login'].'>'.$row['login'].'</option>';
}

Damit solltest du mal einen ersten Ansatz haben für die Userliste.

Grüsse
Cromon
 
Zurück