php Ausgabe in einem Block

Begonnen von , 12 Mai 2002, 22:07:16

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Hallo
ich habe versucht einen Block zu erstellen, bekomme aber diese Fehlermeldungen:

Warning: Invalid argument supplied for foreach() in C:apachehtdocsmainfile.php on line 20

Warning: Failed opening 'language/lang-.php' for inclusion (include_path='.; apacheincludes;apachehtdocs;apachehtdocsphpmyadmin') in C:apachehtdocsmainfile.php on line 51

Fatal error: Cannot redeclare is_admin() in C:apachehtdocsmainfile.php on line 55

Hier mein Block Script:
<?php

if (eregi("block-Angebot_der_Woche.php",$PHP_SELF)) {
Header("Location: index.php");
die();
}
include("or_adw.php");

?>

Und hier mein Script das ausgeführt werden soll:

<?php
if (!isset($mainfile)) { include("mainfile.php"); }
include("or_common.php");
//set up SQL connection
$link = mysql_connect ($server, $user, $password);
if (! $link)
{
die ("Couldn't connect to mySQL server");
}
if (!mysql_select_db ($db, $link) )
{
die ("Coldn't open $db: ".mysql_error() );
}
print "<!-- HERE BEGINNETH THE HEADER -->\r\n";
?>
<p>
<table border=0 cellspacing=0>
<tr><td width=145 valign=top>
<!-- left navigation bar -->
<!-- begin feature code-->
<center>
<!-- <B><font size=2>Das besondere Angebot:</font></b> -->
<?php
//EXAMPLE CODE:
//handles the listing of featured properties
$result = mysql_query("SELECT * FROM nuke_homes WHERE adw = 'Y';",$link);
while ($a_row =mysql_fetch_array ($result) )
{
$a_row[price] = number_format($a_row[price],0,".",".");
$content = "<a href=\"./or_propview.php?view=$a_row[id]\"><b>$a_row[title]</b></a><BR>";
//select images connected to a given listing
$query = "SELECT * FROM nuke_tbl_files WHERE prop_num = $a_row[id] LIMIT 1";
$output = mysql_query("$query",$link);
$count = 0;
while ($image_row =mysql_fetch_array ($output) )
{
$content = "<a href=\"or_propview.php?view=$a_row[id]\"><img src='or_image.php?Id=$image_row[id_files]' border=1 width=100 alt=\"Angebot ansehen\"></a><br>";
$count++;
}
if ($count == 0)
{
$content = "<a href=\"./or_propview.php?view=$a_row[id]\"><img src=\"./images/nophoto.gif\" border=1 width=100 alt=\"Leider kein Bild\"></a><br>";
}
$content = "Baujahr: $a_row[yearbuilt]<br>Wohnfläche: $a_row[lotsize] qm</SUP><BR>";
$content = "<b>€ $a_row[price]</b><BR>";
print "<P>";
}
//END OF EXAMPLE
mysql_close($link);
?>

Hat jemand einen Tipp wie ich daraus einen funktionierenden Block machen kann?

Gruß

Andi

Hui... :D

auf den ersten Blick, ohne zu testen, schwer zu beurteilen.

Lasse mal die ersten zeilen, wo die db geöffnet werden soll komplett weg. Auch die Mainfile braucht nicht eingebunden werden, die ist wenn der Block aufgerufen wird bereits geladen. Variablen die aus der Mainfile benötigt werden kannst Du mit "Global $variable;" einbinden.
Oder liegen die Tabellen in einer anderen DB?

Weglassen:

if (!isset($mainfile)) { include("mainfile.php"); }
include("or_common.php");
//set up SQL connection
$link = mysql_connect ($server, $user, $password);
if (! $link)
{
die ("Couldn't connect to mySQL server");
}
if (!mysql_select_db ($db, $link) )
{
die ("Coldn't open $db: ".mysql_error() );
}
schön´s Grüssle, Andi

Stimmt dieser Pfad C:apachehtdocsmainfile.php

muss das nicht heissen:

C:/apache/htdocs/mainfile.php?

Prüfs mal nach

Hallo
Danke für eure Antworten, dadurch inspiriert hab ich das Script geändert in:

<?php
if (eregi("block-Angebot_der_Woche1.php",$PHP_SELF)) {
Header("Location: index.php");
die();
}
//include("or_common.php");
print "<!-- HERE BEGINNETH THE HEADER -->\r\n";
?>
<p>
<table border=0 cellspacing=0>
<tr><td width=145 valign=top>
<!-- left navigation bar -->
<!-- begin feature code-->
<center>
   <!-- <B><font size=2>Das besondere Angebot:</font></b> -->
<?php
$result = mysql_query("SELECT * FROM nuke_homes WHERE adw = 'Y';",$link);
while ($a_row =mysql_fetch_array ($result) )
{
$a_row[price] = number_format($a_row[price],0,".",".");
$content = "<a href=\"./or_propview.php?view=$a_row[id]\"><b>$a_row[title]</b></a><BR>";
//select images connected to a given listing
$query = "SELECT * FROM nuke_tbl_files WHERE prop_num = $a_row[id] LIMIT 1";
$output = mysql_query("$query",$link);
$count = 0;
while ($image_row =mysql_fetch_array ($output) )
{
$content = "<a href=\"or_propview.php?view=$a_row[id]\"><img src='or_image.php?Id=$image_row[id_files]' border=1 width=100 alt=\"Angebot ansehen\"></a><br>";
$count++;
}
if ($count == 0)
{
$content = "<a href=\"./or_propview.php?view=$a_row[id]\"><img src=\"./images/nophoto.gif\" border=1 width=100 alt=\"Leider kein Bild\"></a><br>";
}   
$content = "Baujahr: $a_row[yearbuilt]<br>Wohnfläche: $a_row[lotsize] qm</SUP><BR>";
$content = "<b>€ $a_row[price]</b><BR>";
print "<P>";
}
?>

Nun sind die Fehlermeldungen zwar weg aber zwei neue aufgetaucht:

Warning: Supplied argument is not a valid MySQL-Link resource in C:\apache\htdocs\blocks\block-Angebot_der_Woche1.php on line 17

Warning: Supplied argument is not a valid MySQL result resource in C:\apache\htdocs\blocks\block-Angebot_der_Woche1.php on line 18

17 & 18 sind diese:
$result = mysql_query("SELECT * FROM nuke_homes WHERE adw = 'Y';",$link);
while ($a_row =mysql_fetch_array ($result) )

Ausserdem stehen die Fehlermeldungen über dem Block, nicht darin.. :cry

Kann noch jemand weiterhelfen?

Micro

Falscher Aufruf der DB:

Du hast geschrieben:
$result = mysql_query("SELECT * FROM nuke_homes WHERE adw = 'Y';",$link);

Müsste aber so aussehen:
$result = mysql_query("SELECT * FROM nuke_homes WHERE adw = 'Y'")

Das wäre bis hier her MySQL Konform programmiert. Aber auch nur ein wenig.

Du fragst ALLE Tabellen aus. Brauchst also demzufolge auch Unmengen an Speicherplatz.
Nun kenne ich Deine DB nicht, aber an sich sollt man nicht mit "*" arbeiten sondern nur die Tabellen auslesen die benötigt werden.

Anderer Fehler:
Du programmierst "frei", also nicht PHPNuke konform.

Den wenn Du das machen würdest müsste es so aussehen die Zeile:

$result = sql_query("SELECT * FROM nuke_homes WHERE adw = 'Y'", $dbi)

Da es ein Block ist, benötigst Du das "include sql_layer.php"; nicht.
Denn diese setzt die DB Abfragen um.

Ich hoffe das reicht für den Anfang ,o)

Mirko

Hallo
Danke für die Tipps, ich habs jetzt geändert, klappt auch soweit, nur mit der Ausgabe noch nicht ganz... obwohl 2 Einträge in der DB das Kennzeichen "Y" im Feld adw  haben wird nur eins angezeigt (das letzte).
Vielleicht hast Du dazu auch noch eine Idee...

<?php
if (eregi("block-Angebot_der_Woche1.php",$PHP_SELF)) {
Header("Location: index.php");
die();
}
print "<!-- HERE BEGINNETH THE HEADER -->\r\n";
global $dbi;
print "<p>";
print "<table border=0 cellspacing=0>";
print "<tr><td width=145 valign=top>";
print "<center>";
$result = sql_query("SELECT id, title, yearbuilt, lotsize, price FROM nuke_homes WHERE adw = 'Y'", $dbi);
while ($a_row =mysql_fetch_array ($result,$dbi) )
{
$a_row[price] = number_format($a_row[price],0,".",".");
$content = "<a href=\"./or_propview.php?view=$a_row[id]\"><b>$a_row[title]</b></a><BR>";
//select images connected to a given listing
$query = "SELECT * FROM nuke_tbl_files WHERE prop_num = $a_row[id] LIMIT 1";
$output = mysql_query("$query",$dbi);
$count = 0;
while ($image_row =mysql_fetch_array ($output,$dbi) )
{
$content.= "<a href=\"or_propview.php?view=$a_row[id]\"><img src='or_image.php?Id=$image_row[id_files]' border=1 width=100 alt=\"Angebot ansehen\"></a><br>";
$count++;
}
if ($count == 0)
{
$content.= "<a href=\"./or_propview.php?view=$a_row[id]\"><img src=\"./images/nophoto.gif\" border=1 width=100 alt=\"Leider kein Bild\"></a><br>";
}   
$content.= "Baujahr: $a_row[yearbuilt]<br>Wohnfläche: $a_row[lotsize] qm</SUP><BR>";
$content.= "<b>€ $a_row[price]</b><BR>";
print "<P>";
}
print "</td></tr></table>";
?>

Andi

Zitat//select images connected to a given listing
$query = "SELECT * FROM nuke_tbl_files WHERE prop_num = $a_row[id] LIMIT 1";
 

Hi unbekannt,

Du beschränkst mit dem limit die Ausgabe auf den zweiten Datensatz. Die Syntax hierzu lautet normalerweise z.B. " LIMIT 0,1 "
bedeutet: zeige einen Datensatz, beginnend ab dem Ersten (0).....

Um alle Datensätze anzuzeigen musst Du das Limit ganz weglassen
 ;)

btw: wäre nett, wenn Du Dich registrieren würdest :)
schön´s Grüssle, Andi

JensWagenknecht

Du machst es zu kompleziert.

Rufe mal bitte die 2 tabellen durch einen Aufruf ab und formiere daraus die tabelle.
Du erwartest aus der Datenabnk genau
eine Übereinstimmung $a_row und setzt als LIMIT 1 ( es darf ja nur eine ID üBereinstimmung geben).
Ich denke hier soll Preis und Bild zusammengebracht werden, oder ist dies falsch?
Die Datenabnkabfragen mit 2 wile Schleifen erscheinen mir unlogisch. Du brauchst in der 2. keine wile Schleife. Es gibt ja nur einen Wert.

Micro

Das Problem so wie bei Andy beschrieben ..

Und noch einige Fehler.
Du bist nach wie vor dabei MySQL Abfragen zu programmieren.

Im Grunde solltest Du aber, wenn das Modul für Nuke 5.5 und grösser funktionieren soll, das "my" bei allen sql Abfragen rauslassen.

also sql_fetch_row, sql_query etc.

Schau Dir einfach mal die sql_layer.php im Ordner includes an. Dort sind alle Abfragen angezeigt, also übersetzt.

Das hat den Vorteil, das ausnahmslos alle Abfragen über diese eine Datei gehen. Sprich es ist eine gewisse Sicherheitsvorkehrung eingebaut, die man nutzen kann. Ansonsten umgehst Du mit deinen Abfragen diese Funktion komplett.

Wie gesagt, es ist nicht zwingens notwendig, aber im Sinne von PHPNuke doch schon angebracht.

Mirko
[Bearbeitet am: 14/5/2002 von Micro]

Donald

Hallo
dieses Codeschnippsel stammt aus OperRealty einem Adon für phpnuke.
Zugegeben der Programmierer hat sich nicht sehr viel Mühe gegeben, womit er aber immer noch mehr kann als ich.
Ich habe mir den Block aus dem Script herausgezogen und nach anderen Blöcken angepasst. Leider langts zu mehr nicht.
Ich nehme mal an das das Limit 1 mit aufgenommen wurde, um nur ein Bild (das erste) zu dem Angebot anzuzeigen, abgelegt in der DB sind bis zu 3.
Könnt ihr mir bitte weiterhelfen und mir ein Beispiel geben wie ich die Abfragen zusammenfasse, und dann ausgebe...

Gruß[Bearbeitet am: 15/5/2002 von Donald]

JensWagenknecht

$result=sql_query("SELECT * FROM ".$prefix."_homes, ".$prefix."_homes_tbl_files WHERE ".$prefix."_homes.id = ".$prefix."_homes_tbl_files.prop_num  AND ".$prefix."_homes.adw = 'Y' LIMIT 1", $dbi)


Oder wen bestimte Spalten nur kommen sollen

$result=sql_query("SELECT a.id, a.title, a.yearbuilt, a.lotsize, a.price b.* FROM ".$prefix."_homes as a, ".$prefix."_homes_tbl_files as b WHERE a.id = b.prop_num  AND a.adw = 'Y' LIMIT 1", $dbi)


Kann ich aber nicht beschwören. Dies muß ich auch immer erst direkt in MySQL (phpMyADMIN) ausprobieren.
Wichtig hier ist die Where Anweisung. Über diese werden die Felder welche in Beziehung stehen verbunden. Dies scheint mir hier der Fall zu sein. In Tabelle nuke_homes  stehen die Daten zu der Sache mit eindeutigem Feld ID (autowert nehme ich an) und zu dem ID Feld (mit genau dieser Nummer) steht in nuke_tbl_files  X-viele Bilder drin. Und genau dieses ID Feld von der Mastertabelle und das Feld prop_num von der anderen Tabelle stehen in Beziehung (Rational).

Wie gesagt ich kenne nicht genau beide Tabellen, ich unterstelle nur dies.

Mit dem was ich zuerst geschrieben stimmt nicht ganz. Die 2. Schleife muß sein, da ja mehrere Möglichkeiten aus der ersten kommen.

Die LIMIT 1 bei der 2. schleife hat aber nichts damit zu tun das in der sersten Schleife nur ein Datensatz kommt, obwohl dort mehrere mit Y gekennzeichnet sind. Der Harken muß woanders liegen. Nur man braucht erst die 2 tabellen und wenigstens Beispieldatensätze um die s auszuprobieren. Abhängig sind ja auch die Feldtypen und und und.

Du kannst es ja mal rüberwachsen lassen, wen die anderen keine Zeit dafür haben.

Jens[Bearbeitet am: 15/5/2002 von JensWagenknecht]