Mehr IDs als in der Datenbank "verbieten"

  • Themenstarter Themenstarter ByeBye 152404
  • Beginndatum Beginndatum
B

ByeBye 152404

Hallo, ich bins mal wieder.
Hab heute folgendes Problem, ich hab ein Script gebastelt mit Login, Userlist, Profil etc. (is ja auch egal).
Nun habe ich aber das Problem das wen man in den Link eine höhere ID eingibt als in der Datenbank vorhanden ist, läd sich das Script zu tode udn kommt nicht zum Ende.
Also was ich genau möchte, das mein PHP Script abfragt ob die ID in der Datenbank vorhanden ist eine Fehlermeldung ausgibt, wen nicht halt normal weiter macht.

Der Link:
Code:
index.php?site=profil&id=1

Mein kläcklicher versuch das zu unterbinden.
PHP:
...
$profil_id = $_GET['id'];
...
if ($num_profil > 0)
{
  $dsatz_profil = mysql_fetch_assoc($query);
  if($profil_id != $dsatz_profil['ID'])
  {
...

Danke schonmal für die Hilfe.
 
Habe deinen Text nicht ganz verstanden, aber vielleicht hilft dir das?


PHP:
<?
mysql_connect()....

// lese höchste ID aus mySQL Tabelle aus
list($array['id']) = mysql_fetch_array(mysql_query("select MAX(id) FROM tabelle"));

// Variablen holen
$profil_id = $_GET['id'];
$highest_id= list($array['id'];

// Wenn profil_id höher ist als die größte id in der mySQL Tabelle, gib eine Fehlermeldung aus...

if($profil_id > $highest_id) {
  echo "Leider nicht gefunden!";
} else {
 // Anweisung
}
...
?>

lg
 
Bei dieser Zeile

PHP:
$highest_id = list($array['ID']);

Sagt er mir immer

Parse error: parse error, unexpected ';', expecting '=' in C:\Program Files\xampp\htdocs\login\profil.php on line 14

Habe uach schon geschaut, kann mir aber nicht erklären woran es liegt. :confused:
Ich finde den Fehler einfach nicht.
 
Hallo,
du könntest es auch ungefähr so lösen:
PHP:
<?php
    require('connect.php');
    
    $sql = "SELECT * FROM tabelle WHERE id = '".mysql_real_escape_string($_GET['id'])."'";
    $query = mysql_query($sql) or die(mysql_error());
    
    if (!mysql_num_rows($query) > 0){
        exit;
    } else {
        $ds = mysql_fetch_object($query);
        // Hier erfolgt dann die Ausgabe
    }
?>

mfg
forsterm
 
naja irgendwie bringt mich das beides nicht wirklich weiter. Die erste Version gibt mir Fehler aus und die Zweite schneidet sich mit dem was ich bis jetzt gecodet habe.
 
Hallo,

wie sieht denn dein bisheriges Skript aus? Anscheinend gibt es ja dort eine Endlosschleife, die es zu entfernen gilt.

<offtopic>
forsterm hat gesagt.:
PHP:
[…]    
    if (!mysql_num_rows($query) > 0){
[…]
Diese Abfrage ergibt hier zwar zufällig das erwartete Verhalten, allerdings nicht auf dem Weg, den du wahrscheinlich beabsichtigt hattest. Der !-Operator bindet nämlich stärker als >, wodurch zunächst das Ergebnis des Aufrufs von [phpf]mysql_num_rows[/phpf] negiert und dann auf > 0 getestet wird.

Eindeutiger wird die Abfrage, wenn man if (!(mysql_num_rows($query) > 0)) schreibt. Oder gleich if (mysql_num_rows($query) == 0) :)
</offtopic>

Grüße,
Matthias
 
Mein bissheriges Script sieht so aus.
PHP:
if($_GET['id']) {

$profil_id = $_GET['id'];

$connection = mysql_connect("$db_server", "$db_user", "$db_password") or die(mysql_error());
mysql_select_db("$db_name", $connection);
$query = mysql_query("SELECT * FROM user WHERE ID = '".$profil_id."'") or die(mysql_error());
$num_profil = mysql_num_rows($query) or die(mysql_error());

if ($num_profil > 0)
{ 
  $dsatz_profil = mysql_fetch_assoc($query);
... //Hier gehts dann mit der Ausgabe der Seite weiter
 
Hallo,

K4ZUY4 hat gesagt.:
PHP:
$connection = mysql_connect("$db_server", "$db_user", "$db_password") or die(mysql_error());
mysql_select_db("$db_name", $connection);
Warum hast du die Variablen denn hier in Anführungszeichen notiert? :confused:

PHP:
$query = mysql_query("SELECT * FROM user WHERE ID = '".$profil_id."'") or die(mysql_error());
Bitte angewöhnen, Daten aus externen Quellen (dazu zählen auch $_GET und $_POST) grundsätzlich nicht zu vertrauen. $_GET['id'] könnte hier alles mögliche enthalten – niemand garantiert, dass sie in einem Format daherkommt, das du erwartest. Da es sich bei $profil_id vermutlich um eine Ganzzahl handeln soll, würde sich hier die Anwendung von [phpf]intval[/phpf] anbieten. Ansonsten empfiehlt sich die Verwendung von [phpf]mysql_real_escape_string[/phpf].

Anhand dieses Quellcodestücks kann ich allerdings nicht erkennen, wie das Skript hier in eine Endlosschleife gebracht werden sollte. Kannst du durch geschicktes Auskommentieren den Bereich eingrenzen, in dem das Skript stecken bleibt?

Grüße,
Matthias
 
Danke erstmal für den Tip mit intval(). :-)
Werde ich mir angewöhnen.
Wo genau er stecken bleibt is mir nicht bekannt, er bleibt eben nur hängen und gibt nichts aus. Also denek ich mal am Anfang.

Hier ist der Rest des Codes:
PHP:
$dsatz_profil = mysql_fetch_assoc($query);
  echo "<table width='529' border='0' cellpadding='0' cellspacing='0'><tr>";
  echo "<td width='529' height='206' valign='top'><table width='100%' border='0' cellpadding='0' cellspacing='0'><tr>";
  echo "<td height='19' colspan='2' valign='top'><b>&bull; Personal Info</b></td></tr><tr><td width='120' height='19' valign='top'>Nickname:</td>";
  echo "<td width='409' valign='top'>".$dsatz_profil['Username']."</td></tr><tr><td height='19' valign='top'>Name:</td>";
  echo "<td valign='top'>".$dsatz_profil['Nachname'].",".$dsatz_profil['Vorname']."</td></tr><tr>";
  echo "<td height='19' valign='top'>Geburtstag:</td>";
  echo "<td valign='top'>".$dsatz_profil['Bday']."</td></tr><tr><td height='19' valgin='top'>Geschlecht:</td>";
  echo "<td valgin='top'>".$dsatz_profil['Sex']."</td></tr><tr><td height='19' valign='top'>Wohnort:</td>";
  echo "<td valign='top'>".$dsatz_profil['Wohnort']."</td></tr><tr><td height='19' valign='top'>Registriert seid:</td>";
  echo "<td valign='top'>".$dsatz_profil['Datum']."</td></tr><tr>";
  echo "<td height='92' colspan='2' valign='top'><table width='100%' border='0' cellpadding='0' cellspacing='0'><tr>";
  echo "<td height='19' colspan='2' valign='top'><b>&bull;Kontakt</b></td></tr><tr>";
  echo "<td width='120' height='19' valign='top'>E-Mail</td>";
  if($dsatz_profil['ShowEmail'] == 0)
  {
    echo "<td width='409' valign='top'>Keine E-Mail vorhanden.</td>";
  }
  if($dsatz_profil['ShowEmail'] == 1)
  {
    echo "<td width='409' valign='top'><a href='mailto:".$dsatz_profil['Useremail']."'>".$dsatz_profil['Useremail']."</a></td>";
  }
  echo "</tr><tr><td height='21' valign='top'>ICQ:</td>";
  if($dsatz_profil['Usericq'] == "N/A")
  {
    echo "<td valign='top'>".$dsatz_profil['Usericq']."</td>";
  } else {
    echo "<td valign='top'><a href='http://online.mirabilis.com/scripts/online.dll?icq=".$dsatz_profil['Usericq']."&img=5'>".$dsatz_profil['Usericq']."</a></td>";
  }
  echo "</tr><tr><td height='19' valign='top'>IRC:</td>";
  if($dsatz_profil['Userircnetwork'] == "N/A" || $dsatz_profil['Userirc'] == "N/A")
  {
    echo "<td valign='top'>N/A</td>";
  } else {
    echo "<td valign='top'><a href='irc://".$dsatz_profil['Userircnetwork']."/".$dsatz_profil['Userirc']."'>".$dsatz_profil['Userirc']."</a></td>";
  }  
  echo "</tr><tr><td height='19' valign='top'>Skype:</td>";
  echo "<td valign='top'>".$dsatz_profil['Userskype']."</td>";
  echo "</tr></table></td></tr></table></td></tr></table>";
}
}
else
 {
   include("inc/func/redir.php");
   redirect('index.php?site=news', '<center>Es wurde keine Userid angegeben.<br />Sie werden Weitergeleitet.</center>');
 }
 
Zurück