Array aus Query generieren

radarin

Angesehenes Mitglied
Hallo Liste

Ich möchte ein Array erstellen

CODE $liste = array("computer", "speicher", "laufwerk");


Der Inhalt soll allerdings aus der Datenbank kommen


CODE
$sql = "SELECT begriff FROM tabelle";
$result = mysql_query ($sql);



Wie muss ich das lösen? Meine Versuche haben bis jetzt immer in Fehlermeldungen geendet...

Gruss René
 
Hallo René,

QUOTE
$result = mysql_query( "SELECT begriff FROM tabelle" );
while( $row = mysql_fetch_array( $result ) ) {
$liste[] = $row['begriff'];
}



So sollte es funktionieren. Viel Glück
tongue.gif
.

Gruess,
Joel
 
Danke Joel, aber es klappt trotzdem nicht.

Folgendes funktioniert:

CODE
function GlossarFilter($Nachricht)
{
$Glossars = array("SPI", "Port", "RAM");
foreach($Glossars as $Glossar)
{
$Nachricht = str_replace($Glossar, "<a href=\"test.php?link=$Glossar\">".$Glossar."</a>", $Nachricht);
}
return $Nachricht;
}

$Nachricht = "Die Begriffe SPI, RAM oder Port sagen nicht allen Usern etwas.";
$Nachricht = GlossarFilter($Nachricht);
echo $Nachricht;



Die Begriffe in der Nachricht welche im Array definiert sind ($Glossars = array("SPI", "Port", "RAM")
wink.gif
werden als Link dargestellt.
Nun möchte ich aber die Begriffe (SPI, Port, RAM) aus der Datenbank mittels Query holen, sodass im Array immer alle erfassten Begriffe des Glossars vorhanden sind und so in den Beschreibungen immer alle Begriffe verlinkt sind.

Ich hoffe ich habe mich verständlich ausgedrückt. Habs auch schon mit Google versucht, habe aber keine Lösung gefunden, die die DB ins Array kommt. bekomme immer Fehlermeldungen, leider..
 
Hi radarin,

Also eigentlich müsste es schon funktionieren, wenn du die Daten so aus der DB holst, wie es Joel beschrieben hat. Der für dein Script angepasste Code würde dann in etwa so aussehen:

CODE
$sql = "SELECT ´begriff´ FROM ´tabelle´";
$rs = mysql_query($sql, $conn);

while($daten = mysql_fetch_array($rs)) {

$Glossars[] = $daten['begriff'];

}


Jetzt kannst du ja mal das Array $Glossars mit der Funktion print_r() anschauen. Diese Funktion gibt eine Struktur des Arrayaufbaus und seines Inhaltes aus. Evtl. siehst du dann, was falsch ist.

Greats,

Stefan B.
 
Danke Stefan, aber das hilft auch nicht. So funktioniert es mit fix def. Wörtern:

$Glossars = array("SPI", "Port", "RAM");

Die Drei wörter sollen nun aber aus der DB kommen. Das Array von Dir sieht so aus:

Array ( [0] => Paketfilter [1] => Port [2] => SPI )
 
Hi radarin,

Doch natürlich hilft das etwas. Jetzt weisst du nämlich, dass in dem Array $Glossars die folgenden Werte aus deiner Datenbank enthalten sind:

1. Position: Paketfilter
2. Position: Port
3. Position: SPI

Jetzt kannst du einfach diese Zeile

QUOTE $Glossars = array("SPI", "Port", "RAM");


aus deinem Script entfernen und vor deiner Funktion mein kleines Script einbauen, dass die Daten aus deiner DB holt und ins Array packt.
Probiers mal aus.

Falls du aber doch was anderes meinst, dann bitte ich nochmals um eine genauere Beschreibung deines Problems
cool.gif


Gruss,

Stefan B.
 
Danke, bekomme leider gar nix oder nur Fehlermeldungen...

Was ich will ist ein Glossar. Begriff und text (Erklärung) in der DB, das wird als Liste ausgegeben. Kommt im Text ein Begriff vor der bereits in der Db erfasst ist, soll dieser damit verlinkt sein. Dafür habe ich einen Badword-Filter angepasst. Statt gegen Sterne oder 'zensur' zu ersetzen, ersetze ich gegen einen Link. Das klappt soweit perfekt. Es wäre aber umständlich, wenn ich jeden Begriff den ich in die DB eintrage im File ebenfalls ins Array schreiben müsste, das soll eben automatisch funktionieren.

Ich hab schon versucht den String im Array so zu erstellen:

CODE
$ii = 1;
$wordlist = "";
while($rst = mysql_fetch_array($result,MYSQL_BOTH))
{
if($wordlist==""){$wordlist="\"".$rst[begriff];}else{$wordlist = $wordlist."\",\"".$rst[begriff];}


$ii ++;
}//endwhile
$wordlist=$wordlist."\"";


echo "WordList: ".$wordlist."<br>";

//$Glossars = array("SPI", "Port", "RAM"); Diese Zeile funktioniert im original
$Glossars = array($wordlist);



Das funktioniert aber auch nicht.
 
Ist es wirklich nicht möglich die Daten anstatt fix im Quelltext aus der DB zu integrieren..?
 
QUOTE (radarin @ Fr 20.1.2006, 6:28) Ist es wirklich nicht möglich die Daten anstatt fix im Quelltext aus der DB zu integrieren..?

Hi radarin,

Doch es ist möglich. Es sollte wirklich so funktionieren, wie oben beschrieben. Es wäre von Vorteil, wenn du mal die Fehlermeldungen posten könntest, die du erhältst. Wir wissen jetzt ja, dass die Daten aus der DB geholt werden und ins Array $Glossars gepackt werden. Vielleicht tritt irgendwo später ein Fehler auf. Darum könnten Fehlermeldungen nützlich sein ...

Greats,

Stefan B.
 
Datenbankabfrage und Array erstellen:

CODE
$sql = "SELECT begriff FROM daten";
$rs = mysql_query ($sql);

while($daten = mysql_fetch_array($rs))
{
$glossars[] = $daten['begriff'];
}

print_r($glossars);



Array: ( [0] => Paketfilter [1] => Port [2] => SPI )

Die Funktion im 'Original':


CODE
function LinkFilterGlossar($NachrichtGlossar)
{
$LinksGlossar = array("SPI", "Port", "RAM"); //Liste einlesen
foreach($LinksGlossar as $LinkGlossar)
{
$NachrichtGlossar = str_replace($LinkGlossar, "<a href=\"test.php?link=$LinkGlossar\">".$LinkGlossar."</a>", $NachrichtGlossar);
}
return $NachrichtGlossar;
}

$NachrichtGlossar = "Ein Chip mit RAM hat weder Port noch SPI";
$NachrichtGlossar = LinkFilterGlossar($NachrichtGlossar);
echo$NachrichtGlossar;



Gibt den Text korrekt aus:

Ein Chip mit RAM hat weder Port noch SPI

Nun passe ich die Zeile //Liste einlesen an:


CODE
$LinksGlossar = $glossars;



Warning: Invalid argument supplied for foreach()

foreach($LinksGlossar as $LinkGlossar)

Ist die modifizierte Zeile korrekt? Warum plötzlich der Fehler, wenn es doch gehen sollte? Hoffe Du kannst mit der Meldung was anfangen
 
Hallo radarin,

Anscheinend finktioniert ja jeder Teil für sich.

Poste doch mal deine Funtkion im ganzen, so wie sie nicht funktioniert oder noch besser Funtkionsaufruf und -funktion zusammenhängend.

Gruss

Tümmel
 
Scheint ja wirklich eine Knacknuss zu sein. Also nochmals der Code der den vorhin erwähnten Fehler bringt am Stück (Array aus DB):

CODE
<?php
include("config.inc");

$database = mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($dbname, $database);

$sql = "SELECT begriff".
" FROM daten";
$rs = mysql_query ($sql);

while($daten = mysql_fetch_array($rs)) {
$glossars[] = $daten['begriff'];
}
print_r($glossars);

function LinkFilterGlossar($NachrichtGlossar)
{
$LinksGlossar = $glossars;
foreach($LinksGlossar as $LinkGlossar)
{
$NachrichtGlossar = str_replace($LinkGlossar, "<a href=\"test.php?link=$LinkGlossar\">".$LinkGlossar."</a>", $NachrichtGlossar);
}
return $NachrichtGlossar;
}

$NachrichtGlossar = "Ein Chip mit RAM hat weder Port noch SPI";
$NachrichtGlossar = LinkFilterGlossar($NachrichtGlossar);
echo$NachrichtGlossar;

mysql_close($database);
?>



Und so wie er grundsätzlich funktioniert mit manuellem Array:


CODE
<?php
include("config.inc");

$database = mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($dbname, $database);

$sql = "SELECT begriff".
" FROM daten";
$rs = mysql_query ($sql);

while($daten = mysql_fetch_array($rs)) {
$glossars[] = $daten['begriff'];
}
print_r($glossars);

function LinkFilterGlossar($NachrichtGlossar)
{
$LinksGlossar = array("SPI", "Port", "RAM");
foreach($LinksGlossar as $LinkGlossar)
{
$NachrichtGlossar = str_replace($LinkGlossar, "<a href=\"test.php?link=$LinkGlossar\">".$LinkGlossar."</a>", $NachrichtGlossar);
}
return $NachrichtGlossar;
}

$NachrichtGlossar = "Ein Chip mit RAM hat weder Port noch SPI";
$NachrichtGlossar = LinkFilterGlossar($NachrichtGlossar);
echo$NachrichtGlossar;

mysql_close($database);
?>



Ich habe auch schon versucht den Textstring fürs Array so zu generieren:


CODE
$ii = 1;
$wordlist = "";
while($rst = mysql_fetch_array($result,MYSQL_BOTH))
{
if($wordlist==""){$wordlist="\"".$rst[begriff];}else{$wordlist = $wordlist."\",\"".$rst[begriff];}


$ii ++;
}//endwhile
$wordlist=$wordlist."\"";


echo "WordList: ".$wordlist;



WordList: "Paketfilter","Port","SPI"


CODE
$LinksGlossar = array($wordlist);



Gibt zwar keinen Fehler, aber es werden auch keine Links ersetzt...

Identische Schreibweise der Begriffe, aber warum geht das mit der Variablen nicht..?
 
Hallo Randarin,

Eigentlich funtkioniert dein script ja.
Nur ist $glossars in der Funktion lokal unbekannt. (Geltungsbereich für Variablen)

fügt mal als erstes in funktion

global $glossars

ein.

Gruss

Tümmel
 
Super Tuemmel! Besten Dank!

Das war genau das was noch gefehlt hat. Jetzt scheint es zu funktionieren. Wenn es fertig ist steht es in meinem Downloadbereich zur Verfügung.

Auch den Anderen Danke, grundsätzlich hattet ihr ja auch recht
biggrin.gif
 
Zurück
Oben