Im phpBB Daten aus anderer PHP/MySQL Anwendung bearbeiten

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Im phpBB Daten aus anderer PHP/MySQL Anwendung bearbeiten

Beitrag 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
Zuletzt geändert von Martin Truckenbrodt am 10.08.2005 18:14, insgesamt 1-mal geändert.
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Benutzeravatar
kellanved
Mitglied
Beiträge: 570
Registriert: 05.02.2005 15:15
Wohnort: Berlin

Beitrag von kellanved »

Hallo auch :D


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
...

:wink:
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag 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
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag 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
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Benutzeravatar
kellanved
Mitglied
Beiträge: 570
Registriert: 05.02.2005 15:15
Wohnort: Berlin

Beitrag 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.
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag 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
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag 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
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag 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
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Antworten

Zurück zu „Coding & Technik“