• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Inbox mit MySQL und PHP?

Poehli

New member
Hey guys...
Ich hab meine Webpage mit profilen erstellt... Ich wollte jetzt aber noch einen Inbox hinzufügen. Ich hab es soweit, dass er mir anzeigt wieviele mails ich hab und das er mir Von, Betreff, Datum zeigt... jetzt brauch ich (nur) noch den Inhalt. Ich will es so machen, dass wenn ich auf den Betreff klicke der Inhalt darunter erscheint. Aber mir fehlt der Ansatz... Muss ich das mit PHP und MySQL machen oder mit JavaScript...
Gebt mir bitte Hilfen dafür. Wäre auch dankbar für ein Tutorial...
Ich konnte leider nichts googeln, da ich nicht weiß, wie man soetwas nennen sollte haha... Wenn ich Inbox google, kommt da immer nur Outlook und so...
Naja danke schon mal!!

Poehli
 
ajax...

beim Klick auf den Betreff schickst du ne Abfrage an den Server, der liefert dir den Text zurück, diesen fügst du dann mit JS ein
 
Du kannst vllt javascript und php mixen so was machen.


PHP:
//zuerst db inhalt mit php auslesen 
// in betreff button onclick="einblenden();" 
<script>
function einblenden()
{	
	
	document.getElementById('inhalt').innerHTML = "<?php echo $inhalt ?>";
} 
</script>

<div id="inhalt"></div>
 
Zuletzt bearbeitet:
Das ist aber gefährlich - wenn in $inhalt ein Zeilenumbruch oder ein "</script>" vorkommt erzeugst du damit fehlerhaften JS-Code.
 
Das ist aber gefährlich - wenn in $inhalt ein Zeilenumbruch oder ein "</script>" vorkommt erzeugst du damit fehlerhaften JS-Code.

wo du davon erwähnt hast möchte ich auch gerne was wissen.

PHP:
document.getElementById('inhalt').innerHTML = "<script>irgendein js code</script>"

gibt es Möglichkeit sowas zu machen? Ich hab mal versuch </script> zerlegen und in ein variable speichern. bekomme ich kein fehler aber script wird nie ausgeführt.
 
Das ist ganz normal - ein <script>-Block wird bei innerHTML nie ausgeführt.
Und man muss </script> nicht "zerlegen" es reicht das / zu maskieren ("\/").
 
ich programmiere ein umfrage formular. Bei einer frage muss benutzer enscheiden ob er kontaktiert werden möchte. Als antwort hat er ja oder nein möglichkeiten mit radiobuttons . wenn er ja wählt muss ein javascript kalendar eingeblendet werden. Das versuche ich mit InnerHtml methode zu machen aber funktioniert nicht. wie kann man sonst so was hinbekommen?
 
Du kannst doch gleich das HTML erzeugen und mittles CSS das Element was den Inhalt/Kalender beinhaltet verstecken (display:none oder visibility:hidden). Mittels JS musst du dann nur noch das Element anzeigen.

Ich würde mir aber überlegen ob es nicht sinnvoller wäre, den Inhalt per AJAX nachzuladen. Hängt ein wenig davon ab, wieviel versteckter Inhalt auf so einer Seite ist und wie viel davon der Benutzer sehen möchte.
Bei viel Inhalt (Bytes) würde ich eher zu AJAX tendieren, weil ich als Benutzer dann nicht so lange warten muss bis die Seite geladen ist (auf der ich dann vielleicht nur eine Email expandiere).
 
Hi erstmal wieder ^^

Danke für die Hilfen...
hab jetzt aber immer noch einen kleinen Gedankenfehler, den ich nicht herausbekomme...:icon6:
Der code is unten... sollte eingang.php und ajax-example.php sein.
Ich will jetzt, dass der browser die IDs einzelnt übergibt, doch irgendwie macht er es nicht wie ich es will... Er zeigt es nur oben an. Dann wenn ich "hier" zweimal klicke, wird erst die ID 2 wiedergegeben, aber auch nur oben?!?
Hoffe ihr könnt mir weiterhelfen!!:d

PHP:
<?php
session_start();

if (isset($_SESSION['Username'])||isset($_SESSION['Admin']))
{
	if (isset($_SESSION['Username']))
	{
		$cookie = $_SESSION['Username'];
	} else
	{
		$cookie = $_SESSION['Admin'];
	}
	
} else
{
	die ("
<div  style=' position:absolute; left:530px; top:100px;'><a href='/Login/register.htm' class='knopf zwei' target='hauptframe'>Registrieren</a></div>
		");
}	?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Posteingang</title><script language="javascript" type="text/javascript">
<!-- 
//Browser Support Code
function ajaxFunction(){
	var ajaxRequest;  // The variable that makes Ajax possible!
	
	try{
		// Opera 8.0+, Firefox, Safari
		ajaxRequest = new XMLHttpRequest();
	} catch (e){
		// Internet Explorer Browsers
		try{
			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				// Something went wrong
				alert("Your browser broke!");
				return false;
			}
		}
	}
	// Create a function that will receive data sent from the server
	ajaxRequest.onreadystatechange = function(){
		if(ajaxRequest.readyState == 4){
			var ajaxDisplay = document.getElementById('ajaxDiv');
			ajaxDisplay.innerHTML = ajaxRequest.responseText;
		}
	}
	var id = document.getElementById('id').value;
	var queryString = "?id=" + id;
	ajaxRequest.open("GET", "ajax-example.php" + queryString, true);
	ajaxRequest.send(null); 
}

//-->
</script>

</head>

<body>

	<table>
    <tr>
    	<td>
        Von
        </td>
        
        <td>
        Betreff
        </td>
        
        <td>
        Datum
        </td>
    </tr>
<?php

mysql_connect("localhost","***","***") or die ("Internen Server Fehler... Wir bitten das zu entschuldigen");
mysql_select_db("langstedt_zzl_login") or die("Es konnte nicht auf die Datenbank zugegriffen werden...");
mysql_connect("localhost","***","***");
mysql_select_db("langstedt_zzl_login");

$eingang = mysql_query("			
SELECT * 
FROM `pm`
WHERE `to` = '$cookie'
");

$rows = mysql_num_rows($eingang);

while ($inhalt = mysql_fetch_assoc($eingang))
{
	$text = $inhalt['text'];
	$id = $inhalt['id'];
	echo "
	 
	 <tr>
		<td><div id='ajaxDiv' onclick='ajaxFunction()'><input type='hidden' id='id' value=".$id."/><div id='ajaxDiv' >here</div>
			 ".$inhalt['from']."</div><br><div id='inhalt'></div>
		</td>
		<td>
			 ".$inhalt['subject']."<br>
		</td>
		<td>
			 ".$inhalt['date']."
			
		</td>
	</tr>";
};
?>




	</table>
</body>
</html>

PHP:
<?php
$dbhost = "localhost";
$dbuser = "***";
$dbpass = "***";
$dbname = "***";
	//Connect to MySQL Server
mysql_connect($dbhost, $dbuser, $dbpass);
	//Select Database
mysql_select_db($dbname) or die(mysql_error());
	// Retrieve data from Query String
$id = $_GET['id'];
	// Escape User Input to help prevent SQL Injection
$id = mysql_real_escape_string($id);
	//build query
$query = "SELECT * FROM `pm` WHERE `id` = '$id'";
	//Execute query
$qry_result = mysql_query($query) or die(mysql_error());

	//Build Result String
$display_string  = "<table>";
$display_string .= "<tr>";
$display_string .= "<th>inhalt</th>";
$display_string .= "<th>id</th>";
$display_string .= "<th>from</th>";
$display_string .= "<th>to</th>";
$display_string .= "</tr>";

	// Insert a new row in the table for each person returned
while($row = mysql_fetch_array($qry_result)){
	$display_string .= "<tr>";
	$display_string .= "<td>$row[text]</td>";
	$display_string .= "<td>$row[id]</td>";
	$display_string .= "<td>$row[from]</td>";
	$display_string .= "<td>$row[to]</td>";
	$display_string .= "</tr>";
	
}
echo "Query: " . $query . "<br />";
$display_string .= "</table>";
echo $display_string;
?>
 
Der Wert des Attributs Id muss einzigartig sein. Es geht viel einfacher wenn du den Wert als Parameter übergibst.

PHP:
echo "<div id='ajaxDiv' onclick='ajaxFunction(".$id.")'>"

Code:
function ajaxFunction(id){
    var ajaxRequest;  // The variable that makes Ajax possible!
    
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
// auch hier wieder das Problem mit der ID
            var ajaxDisplay = document.getElementById('ajaxDiv');
            ajaxDisplay.innerHTML = ajaxRequest.responseText;
        }
    }
// muss raus
//    var id = document.getElementById('id').value;
    var queryString = "?id=" + id;
    ajaxRequest.open("GET", "ajax-example.php" + queryString, true);
    ajaxRequest.send(null); 
}
 
Hallo Poehli,

finde ich gut, dass du ein wenig mit AJAX herumprobieren willst - das lohnt sich, AJAX ist wirklich eine tolle Sache.
Nur um deinen Blick vielleicht etwas zu schärfen: es gibt eine Vielzahl an Lösungen zu diesem Szenario. AJAX hat meines Erachtens hier allerdings einen entscheidenden Nachteil, den ich dir gerne erklären möchte.
Den Einsatz von AJAX zur Anzeige des Nachrichteninhalts bedingt immer auch, dass deine User Javascript aktiviert haben - ist das nicht der Fall, wird der Benutzer niemals seine Nachrichten lesen können. Es gibt aber für deine Anforderungen eine Vielzahl von Lösungen die sehr gut auch ohne Javascript funktionieren - zum Beispiel nur mit CSS.
Du würdest damit den Inhalt immer laden und auf der Seite anzeigen, allerdings mit CSS verstecken/anzeigen - womit er auch immer vorhanden sein würde, egal ob der Benutzer Javascript aktiv hat, einen älteren Browser benutzt, etc.

Siehe dazu http://www.cssplay.co.uk/menu/more#more.

Grüsse
Dominique
 
Danke für den Tip Jeko!!

Aber dazu muss ich erst mal was sagen ^^:
Die Seite die du mir gegeben hast, funktioniert nicht, wie sie soll (haha), da wenn ich auf more klicke, wird er angezeigt, aber auch sofort wieder versteckt ^^. Naja und dann noch:
Ich hab auf meiner index.php, eine Anfrage gemacht ob der Browser JavaScript aktiviert hat...

Trotzdem würd ich gern wissen wie man dass mit CSS machen würde und welche anderen Methoden (vorzugsweise PHP) es gibt...

Ansatz in CSS:
Inhalt mit php auslesen, dann mit einem div verstecken und wie anzeigen?? Ich kann ja nicht "irgendwas:active" nehmen, da er dann nur angezeigt wird, wenn ich die Maus gedrückt halte...

Auch nochmal danke an ZeitGeist!! Ich werd deines gleich mal ausprobieren!!

EDIT: Danke ZeitGeist, dein Script funktioniert, nur wird jetzt die Nachricht immer noch im oberer "hier" angezeit!! Wie könnte ich das nun noch ändern??
 
Zuletzt bearbeitet:
Hallo Poehli,

kann das fehlerhafte Verhalten grad nicht nachvollziehen - Stu Nicholls schreibt zwar, dass es im Operabrowser zu Problemen kommen kann, was aber bei mir nicht stimmt (Opera benutzt und es funktioniert wunderbar).
Den Ansatz hast du richtig verstanden - und :active sollte so lange aktiv sein, bis du etwas anderes anklickst.
Es gibt aber noch eine Vielzahl anderer Möglichkeiten Inhalt zu verstecken und bei Bedarf sichtbar zu machen (z.B. Registerkarten/Tabs http://www.cssplay.co.uk/menu/one_pagev2.html) - kannst ja mal ein bisschen auf cssplay.co.uk verweilen.

Grüsse
Dominique
 
Ich finde hier AJAX angebracht. Zum Einem kann ich erwarten, dass ein User wenn er meinen Dienst nutzen will, Javascript aktiviert. Zum Anderem kann ich über AJAX Inhalte nachladen. Damit bekomme ich die Übersichtsseite kleiner und damit schneller zum Nutzer.

Ich hab dir in das Script eine Kommentarzeile geschrieben. Du hast wieder das Problem dass du keine eindeutigen IDs verteilst. getElementById findet also mehrere Elemente die passen würden. Diese Funktion liefert jedoch nur ein Element zurück und nimmt daher irgendeins. Du mußt deine Ids eindeutig machen, zum Beispiel durch das Anhängen der Nachrichtenid.
 
Danke nochmal an euch!!!
ZeitGeist: Jetzt versteh ich was du meinst haha!!!
Daran hatte ich gar nicht gedacht!!! Danke!!!

Jeko: ich verwende kein Opera... Ich benutze Safari auf meinem Macbook und Firefox...
Aber danke für den Link... Werd ich auch gleichal ausprobieren!!
 
Zuletzt bearbeitet:
Zurück
Oben