Seite 1 von 1
Im phpBB Daten aus anderer PHP/MySQL Anwendung bearbeiten
Verfasst: 09.08.2005 10:55
von Martin Truckenbrodt
Hallo,
ich will phpBB mit
PHPMN verknüpfen. Sprich über eine Seite im phpBB sollen die Mitglieder des phpBB Newsletter bestellen und abbestellen können.
Nun habe ich als PHP Newbie wie folgt angefangen:
Code: Alles auswählen
/***** Inhaltsbereich ******/
echo "<h3>". $page_title ."</h3>\n";
$sql = "SELECT newsletter_id, newsletter_title, newsletter_description FROM $newsletter_table WHERE 1";
$result= mysql_query($sql);
$sql2 = "SELECT * FROM $member_table WHERE members_name='$username' LIMIT 0,30";
$result2 = mysql_query($sql2) or die;
print "<table align='center' class='forumline'>\n";
print "<th>name</th><th>desrciption</th><th>status</th>\n";
for ($i=0; $i<mysql_num_rows($result); $i++)
{
while ($newsletter= mysql_fetch_row($result))
{
print "<tr>\n";
for ($j=1;$j=2;$j++)
{ print "<td class='row1'>". $newsletter[$j] ."</td>"; };
while ($subsribe = mysql_fetch_row($result2))
{
// if (($subscribe['members_newsid']=$newsletter[$i]) AND ($subscribe['members_name']=$username))
// { print "<td class='row1'>subscribed</td>\n"; }
// else {print "<td class='row1'>not subscribed</td>\n";}
print "Test";
};
print "</tr>\n";
};
};
print "</table>\n";
Die Anzeige der Newsletter funktioniert. Nun habe ich die zweite while Schleife für $result2 aktiviert und mein Browser ist tot.
Danke und Gruß Martin
Verfasst: 09.08.2005 11:55
von kellanved
Hallo auch
Also,mal sehen:
1. "Where 1" SQL-Ausrücke kann man idR weglassen.
2. sql2 soll wahrscheinlich nur ein Ergebnis zurückliefern(eben die Zeile für ein Mitglied) -> Limit kann da weg. Außerdem ist es besser members_name='$username' in Klammen zu setzen.
3. Der Unterschied zwischen '=' und '==' (und '===') ist Dir bekannt? Die Zuweisungen im Condition-Teil der ifs sehen komisch aus; "($j=1;$j=2;$j++) " ist eine Endlosschleife.
4. Die for-Schleife mit $i ist doppelt gemoppelt; der while Ausruck macht das schon. (siehe 5)
5. $i wird in der for-Schleife über die Anzahl der Zeilen hochgezählt; später aber für die Spalten verwendet
...

Verfasst: 09.08.2005 11:58
von Martin Truckenbrodt
Hallo,
3. war es. Man soll halt nicht zwei Sachen gleichzeitg ändern!
Baustelle:
http://paludarium.pipidae.de/cgi/phpBB2/phpmn.php
Gruß Martin
Verfasst: 09.08.2005 13:05
von Martin Truckenbrodt
Hallo,
aktueller Stand:
Code: Alles auswählen
/***** Inhaltsbereich ******/
echo "<h3>". $page_title ."</h3>\n";
$sql = "SELECT newsletter_id, newsletter_title, newsletter_description FROM $newsletter_table WHERE 1";
$result= mysql_query($sql);
$sql2 = "SELECT * FROM $member_table WHERE members_name='$username'";
$result2 = mysql_query($sql2);
print "<table align='center' class='forumline'>\n";
print "<th>name</th><th>desrciption</th><th>status</th>\n";
for ($i=0; $i<mysql_num_rows($result); $i++)
{
while ($newsletter= mysql_fetch_row($result))
{
print "<tr>\n";
for ($j=1;$j<mysql_num_rows($result);$j++)
{ print "<td class='row1'>". $newsletter[$j] ."</td>"; };
$subscribe = mysql_fetch_row($result2);
if (($subscribe['members_newsid']=$newsletter[$i]) AND ($subscribe['members_name']=$username))
{ print "<td class='row1'>". $subscribe['members_mailpref'] ."</td>\n"; }
else {print "<td class='row1'>no entry</td>\n";}
print "</tr>\n";
}
}
print "</table>\n";
Die letzte Splate wird nich angezeigt.
Gruß Martin
Verfasst: 09.08.2005 14:34
von kellanved
Wundert mich nicht (5.) . Numrows liefert Dir die Zahl der Zeilen, nicht die der Spalten.
Auch fangen Arrays bei Index 0 an; ausserdem ist da eine Schleife zuviel. Entweder for oder while; nicht beide.
Verfasst: 09.08.2005 14:57
von Martin Truckenbrodt
Hallo,
bei mir habert's vom Verständnis her wohl noch gewaltig bei den mysql BEfehlen und dem was diese ausspucken und wie man damit umgeht. Ich lese mich erst mal noch etwas ein.
$i sollte die skript interne Nummer des Datensatzes sein.
Gruß Martin
Verfasst: 09.08.2005 17:37
von Martin Truckenbrodt
Hallo,
folgendes soll das Skript machen:
1. Auslesen der notwendigen Daten aller Newsletter aus der $newsletter_table
2. Auslesen aller vom phpBB User abonnierten Newsletter aus der $member_table
3. Anzeigen aller Newsletter inklusive dazugehörigem anhand der EMailadresse ermittelten Abonnementstatus des phpBB Users: html, plain oder kein Abo
4. Über Radio Buttons soll der phpBB User Änderungen an den Einstellungen vernehmen können
In der $member_table sind folgende Angaben wichtig: (fortlaufende ID), Username (quasi die Anrade), Emailadresse und die ID des Newsletters.
Ich stecke gerade bei 3. fest. Moemntan verwende ich den Benutzernamen als Identifier. Das tausche ich zum Schluß gegen die EMailadresse aus. Das Problem ist, dass ich nicht weiß, wie ich es schaffe, dass die letzte Spalte zum jeweiligem Newsletter gefüllt wird.
Bin noch nicht zum Nachlesen gekommen. Wird wohl die Abendlektüre werden.
Gruß Martin
Verfasst: 10.08.2005 18:11
von Martin Truckenbrodt
Hallo,
machmal ist es echt das einfach über ein Problem hinweg zu schlafen.
Ich habe jetzt die Sache mit mysql_fetch_row udn mysql_fetcharray hoffgentlich geschnuggelt.
Punkt 3. ist erledigt!
Code: Alles auswählen
/***** Inhaltsbereich ******/
echo "<h3>". $page_title ."</h3>\n";
//Sammeln aller existierender Newsletter
$sql = "SELECT newsletter_id, newsletter_title, newsletter_description FROM $newsletter_table WHERE 1";
$result= mysql_query($sql);
//Sammeln aller Newsletter, in die sich der USer eingetragen hat
$sql2 = "SELECT * FROM $member_table WHERE members_email='$useremail'";
$result2 = mysql_query($sql2);
print "<table align='center' class='forumline'>\n";
print "<th>name</th><th>desrciption</th><th>status</th>\n";
// Vorfüllen des Übergabe Arrays
while ($subscribe = mysql_fetch_row($result2))
{ $newsid = $subscribe[3];
$status[$newsid]=$subscribe[4]; };
// Statusanzeige
while ($newsletter= mysql_fetch_row($result))
{
$newsid=$newsletter[0];
// Auffüllen des Übergabe Arrays, falls kein Abo vorhanden, für vernünftige Statusanzeige
if ($status[$newsid] == "")
{ $status[$newsid]= 'not subscribed'; }
print "<tr>\n";
for ($j=1;$j<mysql_num_rows($result);$j++)
{ print "<td class='row1'>". $newsletter[$j] ."</td>"; }
$newsid=$newsletter[0];
print "<td>". $status[$newsid] ."</td>\n</tr>\n";
};
print "</table>\n";
Jetzt fehlen nur noch die Radiobuttons und die Datenbankeingabe für die Änderung der Einstellungen.
Heute wahrscheinlich nicht mehr!
Um sich die Sache unter
http://paludarium.pipidae.de/cgi/phpBB2/phpmn.php richtig anschauen zu können, muß man natürlich auch im Paludarium Forum registriert sein und auch mit der selben EMailadresse den paludarium.pipidae.de Newsletter abonniert haben.
Gruß Martin