Hallo,
folgendes Problem: Ich starte 2 mysql_query-Abfragen, die 1. ($result) wird mir korrekt angezeigt, die 2. ($result2) wird mir nicht angezeigt, also es kommt auch kein ressource ID# dabei heraus. Alle Tabellenfelder sind korrekt, die habe ich x-fach nachgelesen.
Sehe ich vor lauter Bäume den Wald nicht mehr?
Du möchtest statt PHP einen Join verwenden.
Lektüretipps:
Einführung in Joins
Fortgeschrittene Jointechniken
Schließlich baust Du einen simplen INNER JOIN aufwendig mit PHP und teuren Abfragen in einer Schleife nach. Das ist *keine* gute Idee - und fehlerträchtig, wie Du siehst :-)
Weiterhin ist es auch nicht gerade ressourcenschonend, sich die Inhalte aller Spalten einer Tabelle zurückgeben zu lassen, wenn man an einer einzigen interessiert ist.
$sql = "SELECT * FROM
naviuser
WHEREp\_id
= '$projektid' &&u\_id
= '$_SESSION[userid]'";
$result = mysql_query ($sql);
while ($row=mysql_fetch_array($result))
{
$navi2 = $row['navi_id'];
$sgl2 = "SELECT * FROMnavigation
WHEREnaviid
= '$navi2'";
$result2 = mysql_query ($sql2);
$row2=mysql_fetch_array($result2);
$navtext = $row2['text'];
}
Weiterhin verzichtest Du auf jegliche Kontextgemäße Behandlung und verläßt Dich somit entweder auf die unsäglichen Magic Quotes oder bist komplett für SQL-Injektion offen und gelegentlich kann es auch einfach nur zu einem Fehler kommen ...
SELECT
<spalten aus naviuser, die Du benötigst>
FROM
naviuser
INNER JOIN
navigation
ON
naviuser.navi_id = navigation.naviid -- Du bist inkonsequent.
WHERE
naviuser.p_id = <projektid>
AND
naviuser.u_id = <Session-Wert>
Die Werte aus Deinen PHP-Variablen solltest Du mit mysql_real_escape_string behandeln, da Du noch die veralteten mysql_*-Funktionen nutzt. Zum Zusammenbauen Deines Statements führt die Verwendung von sprintf() zu lesbarerem Code.
Näheres findest Du selbstverständlich massenhaft im Archiv, zum Beispiel in diesem Archivbeitrag von dedlfix mit vielen netten Links, die ich Dir sehr ans Herz lege.
Freundliche Grüße
Vinzenz