[Erledigt] [PHP] Vergleich Session mit mysql_fetch_array

Xot

-
ID: 413078
L
26 November 2006
451
36
Hallo Leute,
ich habe ein Problem mit dem Vergleich zwischen (! $row['ID'] == $_SESSION["user_id"]) .
Wenn die Session-ID nicht gleich der $row-Id ist sollte Code nach der Abfrage ausgeführt werden.

MIt der Echoausgabe:

echo $row['ID'];
echo $_SESSION["user_id"];
bekomm ich folgendes:

122232

Das stimmt auch soweit nur sollte bei 12 und 32 der Code innerhalb der Schleife ausgeführt werden.

Weiss jemand Rat?

Code:
$Level = $_POST['Level'];


$sql = "SELECT ".  
    "ID, Level ".  
    "FROM ".  
    "States ".  
    "WHERE ".    
    "(Level = '".$Level."')";  
$result = mysql_query ($sql);

$Found = '<h1>Gefunden:</h1>';
$Found .= '<br><center><table style="border-style:solid; border-width:1px; border-color:black;"><tr><td width = "150 px">User</td><td width = "100 px"></td></tr>';
$Found .= '<tr><td> </td><td> </td></tr>';

//Bis hier geht alles

while ($row = mysql_fetch_array($result)) {
echo $row['ID'];
echo $_SESSION["user_id"];
  if (! $row['ID'] == $_SESSION["user_id"]) {
    $sql = "SELECT ".  
        "User ".  
        "FROM ".  
        "User ".  
        "WHERE ".    
        "(ID = '".$row['ID']."')";  
    $result2 = mysql_query ($sql);
    $data2 = mysql_fetch_array ($result2);
    $Found .= '<tr><td>'.$data2["User"].'</td>';
    $Found .= '<td><a href="error.php?attack='.$row["ID"].'">Angreifen</a></td></tr>'; 
    }
  }



Edit:

Fehler war: if ($row['ID'] != $_SESSION["user_id"]) { ... }
 
Zuletzt bearbeitet:
Du solltest bei deinem Code etwas gegen SQL Injections einbauen. ;)
Was für dich auch noch vom Vorteil ist, ist die Verwendung von Joins.

Wenn du mal so 10.000 User hast, und dann für jede Userid den Nicknamen extra ausließt wirst du sonst Spaß bekommen :biggrin:

*edit*
Außerdem kannst du direkt im MySQL Query prüfen ob ID != $_SESSION['user_id'] ;)
 
Du solltest bei deinem Code etwas gegen SQL Injections einbauen. ;)
Was für dich auch noch vom Vorteil ist, ist die Verwendung von Joins.

Wenn du mal so 10.000 User hast, und dann für jede Userid den Nicknamen extra ausließt wirst du sonst Spaß bekommen :biggrin:

*edit*
Außerdem kannst du direkt im MySQL Query prüfen ob ID != $_SESSION['user_id'] ;)

Punkt 1: Sowas wie
Code:
$Level = mysql_real_escape_string($Level);
?

Punkt 2: Ja danke geht so =)



Neuer Code:

Code:
$Level = $_POST['Level'];
$Level = mysql_real_escape_string($Level);

$sql = "SELECT ".  
    "States.ID, States.EP, States.Level, User.User ".  
    "FROM ".  
    "States inner join User ".  
    "On States.ID = User.ID ".
    "WHERE ".    
    "(States.Level = '".$Level."') ORDER BY `EP` DESC";  
$result = mysql_query ($sql);

$Found = '<h1>Gefunden:</h1>';
$Found .= '<br><center><table style="border-style:solid; border-width:1px; border-color:black;"><tr><td width = "150 px">User</td><td width = "100 px"></td></tr>';
$Found .= '<tr><td> </td><td> </td></tr>';


while ($row = mysql_fetch_array($result)) {
 if ($row['ID'] != $_SESSION["user_id"]) {
    $Found .= '<tr><td>'.$row["User"].'</td>';
    $Found .= '<td><a href="fight.php?attack='.$row["ID"].'">Angreifen</a></td></tr>'; 
    }
  }
    echo mysql_error();
$Found .= '</table></center><br>';
 
echo $Found;

Ist jetzt alles gut oder muss da noch etwas daran geändert werden?
 
Zuletzt bearbeitet:
Außerdem kannst du direkt im MySQL Query prüfen ob ID != $_SESSION['user_id'] ;)
Das würde ich noch machen.

Und naja, mag vielleicht dein "Stil" sein, aber ich finde deinen Code etwas aufgebläht, den kann man auch gut zusammenfassen:

z.B.
PHP:
$result = mysql_query ("SELECT   
    States.ID, States.EP, States.Level, User.User 
    FROM   
    States inner join User   
    On States.ID = User.ID 
    WHERE     
    (States.Level = '".mysql_real_escape_string($_POST['Level'])."') ORDER BY `EP` DESC");
Du beendest an jedem Zeilenende einen String ". und startest ihn darauf in der Zeile erneut ."

Du arbeitest anscheinend ja auch nicht mit einem Templatesystem, weshalb du es dir ersparen kannst die Ausgabe vorher in einem String zu speichern. Ich würde es da direkt ausgeben.
 
Ok vielen Dank für deine Ratschläge ich werde versuchen, sie umzusetzen.

Das Post habe ich aber extra in einer Variabel gespeichert, da ich dies noch weiter verwenden muss. Aber du hast Recht, ich könnte das gerade so Zusammenfassen:

Code:
$Level = mysql_real_escape_string($_POST['Level']);