Variable in SELECT

Radiate

Mitglied
Sry Leute, aber ich muss schon wieder verzweifeln.
Lange Rede kruzer Sinn:

PHP:
// Login & Logout
function login($id)
{
    $sql="UPDATE $prefix._user
    SET session='".session_id()."'
    WHERE id=".$id;
    mysql_query($sql);
}

function logged_in()
{
    $sql="SELECT id
    FROM $prefix._user
    WHERE session='".session_id()."'
    LIMIT 1";
    $result= mysql_query($sql);
	return ( mysql_num_rows($result)==1);
}

function logout()
{
    $sql="UPDATE $prefix._user
    SET session=NULL
    WHERE session='".session_id()."'";
    mysql_query($sql);
    session_destroy();
}

Wieso geht das nicht das ich Variablen in einer SELECT verwenden kann?
Folgende Fehlermeldung erscheint:

Code:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource

Hat jemand eine Idee?
 
Woher kriegen die Funktionen $prefix?

Du solltest unbedingt die Inputs validieren, sprich bei der ID z. B. [phpf]intval[/phpf] anwenden.


Ansonsten kann [phpf]mysql_error[/phpf] auch sehr helfen.
 
Gut, dann denn gesamten Inhalt der File:

PHP:
<?
include("config.php");

function check_user($username, $password)
{
    $sql="SELECT id
    FROM ".$prefix."_user
    WHERE username='".$username."' AND password=MD5('".$password."')
    LIMIT 1";
    $result= mysql_query($sql) or die(mysql_error());
    if ( mysql_num_rows($result)==1)
    {
        $username=mysql_fetch_assoc($result);
        return $username['id'];
    }
    else
        return false;
}
// Login & Logout
function login($id)
{
    $sql="UPDATE ".$prefix."_user
    SET session='".session_id()."'
    WHERE id=".$id;
    mysql_query($sql);
}

function logged_in()
{
    $sql="SELECT id
    FROM ".$prefix."_user
    WHERE session='".session_id()."'
    LIMIT 1";
    $result= mysql_query($sql);
	return ( mysql_num_rows($result)==1);
}

function logout()
{
    $sql="UPDATE ".$prefix."_user
    SET session=NULL
    WHERE session='".session_id()."'";
    mysql_query($sql);
    session_destroy();
}
?>

Jetzt sollte schonmal geklärt sein woher das $prefix bezogen wird. ;)

Aber was ist das intval() was du meinst?
 
Nein, es ist immer noch nicht klar.

Grundsätzlich gilt:
Eine Funktion kennt KEINE Variablen, die ihr nicht übergeben werden (bei dir nur $id) ODER die in den Superglobalen stehen oder als "global" deklariert werden, z. B. so:

PHP:
$a = 10;

function foo() {
  echo $a; # würde einen E_NOTICE Fehler ausgeben, da $a nicht deklariert wurde.
  global $a;
  echo $a; # gibt 10 aus
}
Nur als kurze Erklärung.

Du solltest jeden Input den du bekommst validieren, so zum Beispiel die $id, die du in deinem SQL Query verwendest. Um SQL Injektionen und auch andere Sicherheitslücken eben abzudecken.
Dazu gibt es Funktionen wie:
[phpf]intval[/phpf] - erzwingt eine Integer, sprich wird 0 wenn es eigentlich keine gültige Zahl ist
[phpf]mysql_real_escape_string[/phpf] sollte IMMER verwendet werden, sobald Daten benutzt werden, die NICHT fest sind, also Formulare, URIs, o. ä.
 
Heißt das also ich kann sagen wir mal in der Ausgangsdatei config.php alles was ich will als global erstellen?
Und das Global heißt dann in jeder Datei in diesem Verzeichnis vernwendbar?
 
Nein, du müsstest in jeder Funktion, in der du es benutzen willst, als global deklarieren.

Einfacher wäre es z. B. eine Klasse dafür zu benutzen.

PHP:
class user {
  var $prefix;

function user($prefix) {
  $this->prefix = $prefix;
}

function check_user($username, $password)
{
    $sql="SELECT id
    FROM ".$this->prefix."_user
    WHERE username='".$username."' AND password=MD5('".$password."')
    LIMIT 1";
    $result= mysql_query($sql) or die(mysql_error());
    if ( mysql_num_rows($result)==1)
    {
        $username=mysql_fetch_assoc($result);
        return $username['id'];
    }
    else
        return false;
}
// Login & Logout
function login($id)
{
    $sql="UPDATE ".$this->prefix."_user
    SET session='".session_id()."'
    WHERE id=".$id;
    mysql_query($sql);
}

function logged_in()
{
    $sql="SELECT id
    FROM ".$this->prefix."_user
    WHERE session='".session_id()."'
    LIMIT 1";
    $result= mysql_query($sql);
    return ( mysql_num_rows($result)==1);
}

function logout()
{
    $sql="UPDATE ".$this->prefix."_user
    SET session=NULL
    WHERE session='".session_id()."'";
    mysql_query($sql);
    session_destroy();
}
}

$user = new user($prefix);

# Zugriff jetzt auf die Funktionen wie normale Klassen

$user->logout(); # Beispiel
?>

Der Vorteil ist, dass du es nur einmal übergeben musst.
Falls du PHP5 benutzt, könntest du natürlich auch die neueren Funktionen benutzen, wie z. B. den Konstruktor.

Nachtrag:
Generell sollte man Variablen lieber übergeben, als sie als global zu deklarieren!
 
Okay ich gebe dir mal die Files die für dich relevant sein sollten damit du meinen Gedanken besser folgen kannst. ;)

install.php
PHP:
<?php
// Inkludieren von Dateien - Include of files
include("../inc/config.php");
include("../".$languages."");
// Formular für die Installation - Formular for the installation
echo '
<html>
<head>

<title>Installation von Define-X ClanPage 1.0</title>

<meta name="Author" content="Radiate">
<meta name="Publisher" content="Radiate">
<meta name="Copyright" content="Radiate">

<link rel="stylesheet" href="../templates/'.$skin.'/css/style.css" type="text/css">

</head>
<body>
<form name="installation" action="create_tables.php" method="post">
<table align="center" width="900" cellspacing="0" cellpadding="0" border="0">
	<tr>
	<td colspan="3" class="content_outside">
	Willkommen zur Installation von Define-X Clanpage 1.0 |
';
	$start_jahr = 2006;
	$akt_jahr   = date("Y");
	if($akt_jahr <= $start_jahr) $jahr = $start_jahr;
	else $jahr = "$start_jahr bis $akt_jahr";
	echo 'Copyright by Define-X '.$jahr.'';
echo '
	</td>
	</tr>
	<tr>
	<td height="15" colspan="3" class="content">
	</td>
	</tr>
	<tr>
	<td class="content" colspan="3">
	</td>
	</tr>
	<td colspan="3" class="content_middle">
';
	echo "$lang[install1]";
echo '
	</td>
	</tr>
	<tr>
	<td colspan="3" class="content_middle">
';
	echo "$lang[install2]";
echo '
	</td>
	</tr>
	<tr>
	<td colspan="3" class="content_middle">
';
	echo "$lang[install3]";
echo '
	</td>
	</tr>
	<tr>
	<td colspan="3" class="content_middle">
';
	echo "$lang[install4]";
echo '
	</td>
	</tr>
	<tr>
	<td height="15" colspan="3" class="content_middle">
	</td>
	</tr>
	<tr>
	<td colspan="3" class="content_middle failed">
';
	echo "$lang[install5]";
echo '
	</td>
	</tr>
	<tr>
	<td colspan="3" class="content_middle">
';
	echo "$lang[install6]";
echo '
	</td>
	</tr>
	<tr>
	<td height="15" colspan="3" class="content">
	</td>
	</tr>
	<tr>
	<td class="content_right">
	Prefix der Tabelle:
	</td>
	<td class="content_left">
	<input type="text" name="prefix" size="24">
	</td>
	<td class="content_left">
	</td>
	</tr>
	<tr>
	<td height="15" colspan="3" class="content">
	</td>
	</tr>
	<tr>
	<td class="content_right">
	Admin:
	</td>
	<td class="content_left">
	<input type="text" name="admin" size="24">
	</td>
	<td class="content_left">
	</td>
	</tr>
	<tr>
	<td class="content_right">
	Password:
	</td>
	<td class="content_left">
	<input type="password" name="adminpass" size="24">
	</td>
	<td class="content_left">
	</td>
	</tr>
	<tr>
	<td class="content_right">
	Gültige E-Mail Adresse:
	</td>
	<td class="content_left">
	<input type="text" name="email" size="24">
	</td>
	<td class="content_left">
	</td>
	</tr>
	<tr>
	<td class="content_left">
	</td>
	<td class="content_left">
	<input type="submit" value="Installieren" onfocus="if(this.blur)this.blur()"> 
	</td>
	<td class="content_left">
	</td>
	</tr>
	<tr>
	<td height="15" colspan="3" class="content">
	</td>
	</tr>
	<tr>
	<td colspan="3" class="content_outside">
	Vorbereitung
	</td>
	</tr>
</table>
</form>
</body>
</html>
';
?>

create_tables.php
PHP:
<?php
// Inkludieren von Dateien - Include of files
include("../inc/config.php");
// Formular für die Installation - Formular for the installation
echo '
<html>
<head>

<title>Installation von Define-X ClanPage 1.0</title>

<meta name="Author" content="Radiate">
<meta name="Publisher" content="Radiate">
<meta name="Copyright" content="Radiate">

<link rel="stylesheet" href="../'.$css.'" type="text/css">

</head>
<body>
<form name="install" action="create_tables.php" method="post">
<table align="center" width="900" cellspacing="0" cellpadding="0" border="0">
	<tr>
	<td colspan="3" class="content_outside">
	Willkommen zur Installation von Define-X Clanpage 1.0 |
';
	$start_jahr = 2006;
	$akt_jahr   = date("Y");
	if($akt_jahr <= $start_jahr) $jahr = $start_jahr;
	else $jahr = "$start_jahr bis $akt_jahr";
	echo 'Copyright by Define-X '.$jahr.'';
echo '
	</td>
	</tr>
	<tr>
	<td height="15" colspan="3" class="content">
	</td>
	</tr>
	<tr>
	<td colspan="3" class="content_middle">
';
	// Dieser Code erzeugt die Tabellen
	$prefix = $_POST[prefix];
	$admin = $_POST[admin];
	$adminpass = md5($_POST[adminpass]);
	$email = $_POST[email];
	$sql = "CREATE TABLE ".$prefix."_user(
			id  		INT( 8 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
			session  	VARCHAR( 32 ) NOT NULL default'',
			privilegs  	VARCHAR( 80 ) NOT NULL default'',
			username 	VARCHAR( 80 ) NOT NULL default'',
			password 	VARCHAR( 80 ) NOT NULL default'',
			email	 	VARCHAR( 80 ) NOT NULL default''
			)";

	$query = mysql_query($sql);
	
	$eintragen = "INSERT INTO ".$prefix."_user(id, rechte, username, password, email) VALUES('id', 'Admin', '$admin', '$adminpass', '$email')" OR DIE (mysql_error());
	
	$eintrag = mysql_query($eintragen);
	
	if ($query){
		echo "<div class=\"successful\">Die Tabelle <b>".$prefix."_user</b> wurde erfolgreich erstellt!</div>";
		}
	else{
		echo '<div class="failed">Installation fehlgeschladen!</div><br>';
		echo 'Query: '.$sql.'<br><br>';
		echo 'Fehler: '.mysql_error().'<br><br>';
		}
	if ($eintrag){
		echo "<div class=\"successful\">Der Account <b>".$admin."</b> wurde erfolgreich erstellt!</div><br>";
		}
	else{
		echo "<div class=\"failed\">Der Account <b>".$admin."</b> konnte nicht erstellt werden!</div><br>";
		}
		
	$install = $query && $eintrag;
	
	if ($install){
		echo "<div class=\"successful\">Die Installationsschritte wurden alle einwandfrei ausgeführt und die Datei <b>create_tables.php</b> wurde entfernt!</div>";
		$datei="create_tables.php";
		unlink("$datei");
		}
	else{
		echo "<div class=\"failed\">Die Installation konnte nicht alle Schritte abschließen, daher wurde die Datei <b>create_tables.php</b> nicht entfernt!</div>";
		}
echo '
	</td>
	</tr>
	<tr>
	<td height="15" colspan="3" class="content">
	</td>
	</tr>
	<tr>
	<td colspan="3" class="content_outside">
	Tabellen erstellen
	</td>
	</tr>
</table>
</form>
</body>
</html>
';
?>

config.php
PHP:
<?php
// Variablen - Variables
$host = "localhost";							// Host
$user = "Radiate";								// Datenbank User
$pass = "DefineXdatabase";						// Datenbank Pass
$table = "19249m7717_3";						// Datenbank
$prefix = "dxcp";								// Prefix
$skin = "standard";								// Template
$css = "templates/".$skin."/css/style.css";		// Style
$languages = "languages/german/main.php";		// Sprache

// Verbindung - Connection
$verbindung = mysql_connect ($host, $user, $pass) or die ("Es ist keine Verbindung möglich. Benutzername oder Passwort sind falsch");
mysql_select_db($table) or die ("Die Datenbank wurde nicht gefunden");
?>

und zu guterletzt die um die es sich handelt
sessionhelpers.inc.php
PHP:
<?
include("config.php");

function check_user($username, $password)
{
    $sql="SELECT id
    FROM _user='".$prefix."'
    WHERE username='".$username."' AND password=MD5('".$password."')
    LIMIT 1";
    $result= mysql_query($sql) or die(mysql_error());
    if ( mysql_num_rows($result)==1)
    {
        $username=mysql_fetch_assoc($result);
        return $username['id'];
    }
    else
        return false;
}
// Login & Logout
function login($id)
{
    $sql="UPDATE _user='".$prefix."'
    SET session='".session_id()."'
    WHERE id=".$id;
    mysql_query($sql);
}

function logged_in()
{
    $sql="SELECT id
    FROM _user='".$prefix."'
    WHERE session='".session_id()."'
    LIMIT 1";
    $result= mysql_query($sql);
	return ( mysql_num_rows($result)==1);
}

function logout()
{
    $sql="UPDATE _user='".$prefix."'
    SET session=NULL
    WHERE session='".session_id()."'";
    mysql_query($sql);
    session_destroy();
}
?>

Bitte nicht übel nehmen diese Primitive Variante in der letzteren, da ich mal probieren wollte.^^
 
Wieso geht das mit diesem jetzt doch?

PHP:
<?
include("config.php");

function check_user($username, $password)
{
    $sql="SELECT id
    FROM ".$prefix."_user
    WHERE username='".$username."' AND password=MD5('".$password."')
    LIMIT 1";
    $result= mysql_query($sql) or die(mysql_error());
    if ( mysql_num_rows($result)==1)
    {
        $username=mysql_fetch_assoc($result);
        return $username['id'];
    }
    else
        return false;
}
// Login & Logout
function login($id)
{
    $sql="UPDATE ".$prefix."_user
    SET session='".session_id()."'
    WHERE id=".$id;
    mysql_query($sql);
}

function logged_in()
{
    $sql="SELECT id
    FROM ".$prefix."_user
    WHERE session='".session_id()."'
    LIMIT 1";
    $result= mysql_query($sql);
	return ( mysql_num_rows($result)==1);
}

function logout()
{
    $sql="UPDATE ".$prefix."_user
    SET session=NULL
    WHERE session='".session_id()."'";
    mysql_query($sql);
    session_destroy();
}
?>
 
Zurück