Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Und zwar habe ich eine Tabelle bestehend aus 2 Feldern, diese möchte ich anzeigen lassen.

$query="SELECT * FROM tbl_allianz";

Leider kann ich als Leihe nur auf eine Vorlage beruhend auf einer Abfrage unter einer bestimmten Bedingung zurückgreifen.

<?php

$link=mysql_pconnect("localhost","","");

mysql_select_db(tbl_allianz,$link);

$query="SELECT * FROM tbl_allianz";

$result=mysql_query($query,$link);

$anz=mysql_affected_rows($link);

$row=mysql_fetch_array($result);

echo "Nummer:$row[id_allianz]<br>";

echo "Name:$row[dt_aname]<br><br>";

mysql_close($link);

?>

Klar dass das nicht funktioniert, weil ich mir ja alle Einträge anzeigen lassen will und keine Bedingungen stelle. Die Fehlermeldung lautet:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in J:\xampp\htdocs\gof\index.php on line 8

Was also auf folgende Befehlszeige zurückführen lässt:

$row=mysql_fetch_array($result);

Kann mir bitte jemand diesbezüglich auf die Sprünge helfen?


<?php
$link=mysql_pconnect("localhost","","");
mysql_select_db(tbl_allianz,$link); // hier liegt der Fehler!
// mysql_select_db($datenbankname, $link);
$query="SELECT * FROM tbl_allianz";
$result=mysql_query($query,$link);
$anz=mysql_affected_rows($link);
$row=mysql_fetch_array($result);
echo "Nummer:$row[id_allianz]<br>";
echo "Name:$row[dt_aname]<br><br>";
mysql_close($link);
?>
[/PHP]

Was zu deinem Fehler führt:

Du gibt bei der Funktion mysql_select_db keinen Datenbanknamen an. Da, wo bei dir tbl_allianz (deine Tabelle) steht, muss der Name der Datenbank hin, in der deine Tabelle enthalten ist.

Die Funktion mysql_query() versucht dann deine Abfrage auszuführen. Dabei tritt ein Fehler auf, weil du keine Datenbank gewählt hast. Daher wird $result mit "false" belegt.

Mit "false" kann die Funktion mysql_fetch_array nichts anfangen und gibt dir darum diese Fehlermeldung aus.

Beseitigung:

Gib in der Funktion mysql_select_db den Namen der Datenbank an.

[edit]

ach ja, sollte eigentlich verschoben werden.

[/edit]


<?php

// hier nur mysql_connect anstatt pconnect
$link=mysql_connect("localhost","","");
mysql_select_db('meinDBName');
/* hier fehlten die '' und den link identifier brauchst du nur,
wenn du mehr als eine DB ansprechen möchtest!
Ausserdem brauchst du den DB namen, nicht den TBL namen */

$query="SELECT * FROM tbl_allianz";
// hier ebenfalls den link nur angeben, wenn du in deinem script mehr als eine DB verwendest
$result=mysql_query($query);
$anz=mysql_affected_rows($result);
$row=mysql_fetch_array($result);
echo "Nummer:$row[id_allianz]<br>";
echo "Name:$row[dt_aname]<br><br>";
mysql_close($link);
?>
[/PHP]

  • Autor

<?php

$link=mysql_connect("localhost","","");

mysql_select_db('gof');

$query="SELECT * FROM tbl_allianz";

$result=mysql_query($query);

$row=mysql_fetch_array($result);

echo "Nummer:$row[id_allianz]<br>";

echo "Name:$row[dt_aname]<br><br>";

mysql_close($link);

?>

Dankeschön. Jetzt gibt er den ersten Eintrag in der Liste aus, also muss ich nur noch ne Schleife einbauen, so dass er alle Rows auflistet. Richtig? Was wäre denn hierfür die beste Lösung? Schleifen kann ich nur für Turbo Pascal. :eek: Im Moment sind es 30 Reihen, sollen aber mehr werden.


...
$result = mysql_query($query);

while (($row = mysql_fetch_array($result)) {
echo "Nummer: ".$row["id_allianz"]."<br>";
echo "Name: ".$row["dt_aname"]."<br>";
}
mysql_close($link);[/PHP]

In der while-Schleife lasse ich mir jeweils die nächste Zeile in die Variable $row schreiben. Wenn keine Zeile mehr übrig ist, liefert mysql_fetch_array() FALSE zurück und die Bedingung ist somit nicht mehr wahr. Es ist übrigens kein Fehler, daß ich zwei Klammern genommen habe.

  • Autor

Parse error: parse error, unexpected '{' in J:\xampp\htdocs\gof\index.php on line 23

Eine Klammer war zu viel.

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {

echo "Nummer: ".$row["id_allianz"]."<br>";

echo "Name: ".$row["dt_aname"]."<br>";

}

mysql_close($link);

Dankeschön.

  • Autor

Eine Frage hätte ich noch.

<?php

$link=mysql_connect("localhost","","");

mysql_select_db('gof');

$query="SELECT * FROM tbl_spieler";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {

echo "<tr><td>".$row["id_spieler"]."</td>";

echo "<td>".$row["dt_sname"]."</td>";

echo "<td>".$row["fi_allianz"]."</td>";

echo "<td>".$row["fi_rasse"]."</td></tr>";

}

mysql_close($link);

?>

Sieht dann im Endeffekt so aus.

Nummer des Spielers 3

Name des Spielers Poek

Allianz 2

Rasse 1

fi_allianz bezieht sich auf den Primärschlüssel id_allianz der tbl_allianz.

fi_rasse bezieht sich auf den Primärschlüssel id_rasse der tbl_rasse.

So wie ich es im Moment habe wird aber nur die entsprechende Nummer angezeigt. Ich möchte mir aber den jeweiligen Namen, also dt_aname und dt_rname anzeigen lassen.

Quasi so:

Nummer des Spielers 3

Name des Spielers Poek

Allianz [hive]

Rasse Thrale

  • Autor

$query="SELECT * FROM tbl_spieler LEFT JOIN tbl_allianz ON tbl_spieler.fi_allianz = tbl_allianz.id_allianz";

kann ich da die zweite beziehung auch noch mit ins query einfügen?

LEFT JOIN tbl_rasse ON tbl_spieler.fi_rasse = tbl_rasse.id_rasse


SELECT * FROM tbl_spieler 

LEFT JOIN tbl_allianz ON tbl_spieler.fi_allianz = tbl_allianz.id_allianz 

LEFT JOIN tbl_rasse tbl_spieler.fi_rasse = tbl_rasse.id_rasse

siehe dazu:

http://dev.mysql.com/doc/mysql/de/JOIN.html

  • Autor

$query="SELECT * FROM tbl_spieler

LEFT JOIN tbl_allianz ON tbl_spieler.fi_allianz = tbl_allianz.id_allianz LEFT JOIN tbl_rasse tbl_spieler.fi_rasse = tbl_rasse.id_rasse";

Da kommt dann aber ein Fehler.

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in J:\xampp\htdocs\gof\index.php on line 49

<?php

$link=mysql_connect("localhost","","");

mysql_select_db('gof');

$query="SELECT * FROM tbl_spieler

LEFT JOIN tbl_allianz ON tbl_spieler.fi_allianz = tbl_allianz.id_allianz LEFT JOIN tbl_rasse tbl_spieler.fi_rasse = tbl_rasse.id_rasse";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {

echo "<tr><td>".$row["id_spieler"]."</td>";

echo "<td>".$row["dt_sname"]."</td>";

echo "<td>".$row["dt_aname"]."</td>";

echo "<td>".$row["dt_rname"]."</td></tr>";

}

mysql_close($link);

?>

"SELECT * FROM tbl_spieler

LEFT JOIN tbl_allianz ON tbl_spieler.fi_allianz = tbl_allianz.id_allianz LEFT JOIN tbl_rasse ON tbl_spieler.fi_rasse = tbl_rasse.id_rasse"

Was vergessen. :WD

  • Autor

Vorerst die letzte Frage :beagolisc

<?php

$link=mysql_connect("localhost","","");

mysql_select_db('gof');

$query="SELECT * FROM tbl_allianz";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {

echo "<tr><td>".$row["id_allianz"]."</td>";

echo "<td>".$row["dt_aname"]."</td>";

echo "<td>X</td></tr>";

}

mysql_close($link);

?>

tbl_allianz

id_anummer

dt_aname

tbl_spieler

id_snummer

dt_sname

fi_allianz

fi_rasse

Anstatt des roten X möchte ich mir die Anzahl der Member der jeweiligen Allianz anzeigen lassen. Quasi wie viele Member in jeder Allianz sind. Irgendwas mit count aber die Syntax bzw. die Beziehungsberücksichtigung kann ich net.

SELECT tbl_allianz.id_anummer, 

tbl_allianz.id_aname, 

COUNT(tbl_spieler.fi_allianz) AS a_anzahl 

FROM tbl_spieler LEFT JOIN tbl_allianz 

ON tbl_spieler.fi_allianz = tbl_allianz.id_anummer 

GROUP BY tbl_allianz.id_aname

Hoffe, daß ich nichts doppelt reingehauen oder vergessen habe. :-/

  • Autor

und wie gebe ich dann a_anzahl in der echo anweisung wieder?

tbl_allianz

id_allianz

dt_aname

tbl_spieler

id_spieler

dt_sname

fi_allianz

fi_rasse

<?php

$link=mysql_connect("localhost","","");

mysql_select_db('gof');

$query="SELECT tbl_allianz.id_allianz, tbl_allianz.dt_aname, COUNT(tbl_spieler.fi_allianz) AS a_anzahl FROM tbl_spieler LEFT JOIN tbl_allianz ON tbl_spieler.fi_allianz = tbl_allianz.id_allianz";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {

echo "<tr><td>".$row["id_allianz"]."</td>";

echo "<td>".$row["dt_aname"]."</td>";

echo "<td>".$row["a_anzahl"]."/td></tr>";

}

mysql_close($link);

?>

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in J:\apachefriends\xampp\htdocs\Gof\Index.php on line 33

und wie gebe ich dann a_anzahl in der echo anweisung wieder?

echo "<td>".$row["a_anzahl"]."</td>";

ja genau so :)

geht leider nicht. guck mal bitte in den thread über deiner antwort :-)

muss aber so gehen ;)

hast du schon ma den select in einem SQL-Editor oder im PHPMyAdmin ausgeführt um zu sehen wie das resultset aussieht?!

  • Autor

jupp geht. auf das mit phpmyadmin hätte ich auch kommen können.

jetzt werden aber keine allianzen mehr angezeigt, die noch keiner member haben (ich habe noch keine member eingetragen, die zu den jeweiligen allianzen gehören). also ist a_anzahl=0. kann ich mir das trotzdem anzeigen lassen?

<?php

$link=mysql_connect("localhost","","");

mysql_select_db('gof');

$query="SELECT tbl_allianz.id_allianz, tbl_allianz.dt_aname, COUNT( tbl_spieler.fi_allianz ) AS a_anzahl FROM tbl_spieler

LEFT JOIN tbl_allianz ON tbl_spieler.fi_allianz = tbl_allianz.id_allianz

GROUP BY tbl_allianz.dt_aname";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {

echo "<tr><td>".$row["id_allianz"]."</td>";

echo "<td>".$row["dt_aname"]."</td>";

echo "<td>".$row["a_anzahl"]."</td></tr>";

}

mysql_close($link);

?>

du könntest auch den sql aufteilen.

erst den der alles anzeigt, und dann nochma nen seperaten mit dem count()

  • Autor

<?php

$link=mysql_connect("localhost","","");

mysql_select_db('gof');

$query="SELECT * FROM tbl_spieler

LEFT JOIN tbl_allianz ON tbl_spieler.fi_allianz = tbl_allianz.id_allianz LEFT JOIN tbl_rasse ON tbl_spieler.fi_rasse = tbl_rasse.id_rasse ORDER BY dt_aname";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {

echo "<tr><td>".$row["id_spieler"]."</td>";

echo "<td>".$row["dt_sname"]."</td>";

echo "<td>".$row["dt_aname"]."</td>";

echo "<td>".$row["dt_rname"]."</td></tr>";

}

mysql_close($link);

?>

Hier wird die Ausgabe nach dem Name der Allianz dt_aname sortiert. Kann ich eine zweite Sortieranweisung, die danach ausgeführt wird, einfügen?

SELECT * FROM tbl_spieler

LEFT JOIN tbl_allianz ON tbl_spieler.fi_allianz = tbl_allianz.id_allianz LEFT JOIN tbl_rasse ON tbl_spieler.fi_rasse = tbl_rasse.id_rasse ORDER BY dt_aname ORDER BY dt_sname;

???

  • 4 Wochen später...
  • Autor

tbl_allianz

id_allianz

dt_aname

tbl_spieler

id_spieler

dt_sname

fi_allianz

fi_rasse

tbl_planet

id_planet

dt_pname

fi_spieler

tbl_rasse

id_rasse

dt_rname

_______________

Folgende Abfrage zeigt mir alle Planeten mit den dazugehörigen Spielernamen!

<?php

$link=mysql_connect("localhost","","");

mysql_select_db('gof');

$query="SELECT * FROM tbl_planet LEFT JOIN tbl_spieler ON tbl_planet.fi_spieler = tbl_spieler.id_spieler ORDER BY dt_sname, dt_pname";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {

echo "<tr><td>".$row["id_planet"]."</td>";

echo "<td>".$row["dt_pname"]."</td>";

echo "<td>".$row["dt_sname"]."</td></tr>";

}

mysql_close($link);

?>

Wie baut man hier nun mit ein, dass die Allianz des Spielers hier ebenfalls angezeigt wird und in der Reihenfolge Allianz, Spielername, Planetenname geordnet wird?

Ich habe versucht, einen Fremdschlüssel in die Tabelle tbl_planet einzubauen, welcher sich dann auf fi_allianz der tbl_spieler bezieht, aber das geht technisch nicht.

Danke für eure Hilfe.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.