• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

JOIN klappt nicht

Kojaky

Neues Mitglied
Hallo zusammen,
ich sitze mitlerweile 5 Stunden an einem Script was mehrere Daten aus insgesammt 4
Tabellen ausgeben soll. Ich habe mich bereits durch zich Tutorials und Foren gewühlt aber einfach nichts gefunden.

Hier der Code:

PHP:
<?php
include ('****'); 

        mysql_connect($****,$****,$****) or die ("Keine Verbindung!");
        mysql_select_db($****) or die ("Keine Verbindung zur Datenbank!");

$ask = "SELECT `account_id` FROM `login` WHERE `web_userid`='".$_REQUEST['nickname']."'";
$is = mysql_query($ask);
$row = mysql_fetch_assoc($is);

$accid = $row['account_id'];        
            
$query="    
SELECT
    char.account_id,
    char.guild_id,
    char.party_id,
    char.name,
    char.class,
    char.base_level,
    char.job_level,
    char.zeny,
    guild.guild_id,
    guild.name,
    party.party_id,
    party.name
FROM
    char
INNER JOIN
    guild
ON
    char.guild_id = guild.guild_id
INNER JOIN    
    party
ON
char.party_id = party.party_id
WHERE
    account_id = '$accid'";

$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)) {
echo $row['char.name'];
echo $row['char.class'];
echo $row['char.base_level'];
echo $row['char.job_level'];
echo $row['char.zeny'];
echo $row['party.name'];
echo $row['guild.name'];
}
Die Sternchen sind nur zur Deko da.
Es is das erste mal das ich mit Join arbeiten muss. Kann mir jemand konkrete Lösungsansätze geben? Ich komme einfach nicht weiter.
Danke Vorab
 
CHAR ist ein reserviertes Wort in MySQL. Setze es in Backticks: `char`. Das sieht ansonsten eigentlich halbwegs okay aus. Was klappt denn nicht und wie lautet die Fehlermeldung (mysql_error())?
 
Danke für den Tipp ganz vergessen

also das Script sieht jetzt so aus:
PHP:
<?php
error_reporting(E_ALL);
include ('****');

        mysql_connect($****, $****, $****);
        mysql_select_db($****);
        

$ask = "SELECT `account_id` FROM `login` WHERE `web_userid`='".$_REQUEST['nickname']."'";
$is = mysql_query($ask);
$row = mysql_fetch_assoc($is);

$accid = $row['account_id'];        
            
$query="    
SELECT
    char.account_id AS chid,
    char.guild_id AS cgid,
    char.party_id AS cpid,
    char.name AS cname,
    char.class AS klasse,
    char.base_level AS lvl,
    char.job_level AS jlvl,
    char.zeny AS zeny,
    guild.guild_id AS ggid,
    guild.name AS gname,
    party.party_id AS ppid,
    party.name AS pname
FROM
    `char`
INNER JOIN
    guild 
ON
    char.guild_id = guild.guild_id
INNER JOIN    
    party 
ON
char.party_id = party.party_id
WHERE
    account_id = '$accid'";

$result = mysql_query($query);
echo "<font style='text-align:left;font-family:Calibri,Cambria,sans-serif,Arial;font-size:14px;color:rgb(0,0,0);'>";
echo '<table style="margin-left:30px;" border="2px #ffffff" cellpadding="0" cellspacing="0">';
echo '<tr>';
echo '<td width="100px">Name</td><td width="50px">Level</td><td width="50px">Joblevel</td><td width="50px">Klasse</td><td width="80px">Zeny</td><td width="100px">Party</td><td width="100px">Gilde</td>';
echo '</tr>';

while($row = mysql_fetch_assoc($result)) {
?>
<tr>
<td><?echo $row['cname'];?></td>
<td><?echo $row['lvl'];?></td>
<td><?echo $row['jlvl'];?></td>
<td><?echo $row['klasse'];?></td>
<td><?echo $row['zeny'];?></td>
<td><?echo $row['pname'];?></td>
<td><?echo $row['gname'];?></td>
</tr>
<?}?>
</table>
</font>


EDIT so sieht das script jetzt aus und es funktioniert.
Thx für die hilfe
 
Zuletzt bearbeitet:
Hmm ja das mit der sicherheit der Abfragen etc ist noch ein Problem, aber wenn man im Internet nach Tutorials sucht wie man sowas sicher machen kann findet man nur schrott. Mir wäre es sowieso generell lieber wenn ich ne art Mentor hätte der sich die ganzen Scripts von mir mal anguckt. Aber leider kenn ich keinen der sich auf so eine Arbeit mit mir einlassen würde.

Mir ist aber bewusst das meine Seite recht unsicher ist. Ich kanns nur leider nicht ändern =(
 
Wenn du mit den mysql_*-Funktionen arbeitest, müssen im Grunde lediglich alle Eingaben, die vom Benutzer kommen (u. a. aus $_POST, $_GET oder $_REQUEST), vor dem Einsetzen in die SQL-Query durch die Funktion mysql_real_escape_string() geschickt werden.

In deinem Fall also:

PHP:
$ask = "SELECT `account_id` FROM `login` WHERE `web_userid`='".mysql_real_escape_string($_REQUEST['nickname'])."'";

Mehr Infos etwa hier.

Edit: Für die Ausgabe von Benutzereingaben im HTML-Code gilt im Grunde dasselbe, um XSS-Attacken zu verhindern. Die sind zwar längst nicht so riskant, aber dort sollte mit den Funktionen htmlspecialchars() (falls die Seite UTF8 nutzt) oder htmlentities() gearbeitet werden, um Zeichen wie "<" vor dem Eintragen in den HTML-Code in ungefährliche Entities (&lt;) zu verwandeln.
 
Zurück
Oben