Kleiner Php Fehler. Php funktioniert nicht!

03/27/2013 11:48 vbacoder#1
Hi,

ich habe hier irgendwo einen Fehler gemacht aber finde Ihn als ANfänger leider nicht :S

PHP Code:
<?php
session_start 
();

    if(
$_SESSION['id'] == "") {
        die(
'Kein Account gefunden!');
    }
    else {
    
    include(
'../inc/config.php');
    
        
mysql_select_db('player');
        
    
$query mysql_query("SELECT *, SUM(`account_id`) as amount FROM player where name = '" $_SESSION['id'] . "'");
$cccc mysql_query("SELECT (`account_id`) FROM player where name = '" $_SESSION['id'] . "'");
$lasttime mysql_fetch_array($query); 
$amount $lasttime['amount']; 
$insertnew false;     

mysql_select_db('account');
        
$xxx mysql_query("UPDATE account.account SET status = 'BLOCK' where id = '$cccc'");
        
header("Location: http://****.html");

    
        
        

    exit;
    }
    
        
        



?>

Ich Danke für eure Hilfe :)
03/27/2013 11:57 tayfe#2
Es wäre noch gut, wenn du sagen könntest, was genau das Problem ist bzw. wenn es sich um etwas programmiertechnisches handelt, in welcher Zeile der Fehler liegt. So kann man jetzt erstmal nur spekulieren, da ganz schön viel falsch sein könnte wie z.B. die Tabellen- und Spaltennamen.

Was mir nur auffällt ist diese Zeile:

PHP Code:
$xxx mysql_query("UPDATE account.account SET status = 'BLOCK' where id = '$cccc'"); 
Hier änderst du den Account, bei dem die ID wirklich"$cccc" ist. Da ich vermute, dass du jedoch eher die Variable $cccc nutzen willst, sollte das so aussehen:

PHP Code:
$xxx mysql_query("UPDATE account.account SET status = 'BLOCK' where id = '".$cccc."'"); 
03/27/2013 12:06 vbacoder#3
Das Script soll in der Datenbank mit dem Namen "player" in der Tabelle "player" die zeile mit der $_SESSION['id'] suchen (also die die im Bropwser als ?id=xxx angegeben wird) und in dieser Spalte die "account_id" finden.

Anschließend nach der account_id in der datenbank "account" , tabelle "account" suchen und dort bei status ingleicher zeile ein "BLOCK" eintragen.

Es funktioniert soweit alles nur es wird kein BLOCK eingetragen.
03/27/2013 12:29 Mikesch01#4
So müsste es gehen:

PHP Code:
 <?php
session_start 
();

$id mysql_real_escape_string($_SESSION['id']); //wichtig!! Sicherheit!!

    
if(empty($id)) {
        die(
'Kein Account gefunden!');
    }
    else {
    
    include(
'../inc/config.php');
    
    
mysql_select_db('player');
        
    
$query mysql_query("SELECT SUM(`account_id`) as amount FROM player where name = '" $id "'");
    
$lasttime mysql_fetch_assoc($query); 
    
$amount $lasttime['amount'];

    
$cccc mysql_query("SELECT account_id FROM player where name = '" $id "'");
    
$row mysql_fetch_assoc($cccc);
    
$insertnew false;     

    
mysql_select_db('account');

    
mysql_query("UPDATE account.account SET status = 'BLOCK' where id = '"$row['account_id'] ."'");

    
header("Location: http://****.html");

    exit;
    }  
?>

Da ist ein bisschen mehr verändert. Kannst gerne mal mit dem alten Code abgleichen und die Veränderungen feststellen.

P.s ich würde die Variablen wie 'cccc' oder 'xxx' sinnvoller bennenen, den später weisst du nicht mehr, wofür die mal waren.
03/27/2013 12:39 PseudoPsycho#5
Quote:
mysql_real_escape_string($_SESSION['id']);
Ähm, wozu soll das gut sein?
1. ID's sind für gewöhnlich Integer. Da funktioniert dann kein mysql_real_escape_string. Die richtige Funktion wäre intval().
2. Sessions werden serverseitig gespeichert. Es ist überhaupt nicht notwendig, das an dieser Stelle zu escapen.
03/27/2013 12:49 Mikesch01#6
Quote:
Originally Posted by PseudoPsycho View Post
Ähm, wozu soll das gut sein?
1. ID's sind für gewöhnlich Integer. Da funktioniert dann kein mysql_real_escape_string. Die richtige Funktion wäre intval().
Naja, er benutzt die "id" aus der URL um den Namen abzugleichen.... Entweder der Begriff "id" ist falsch oder es wurde in der Abfrage statt "id" versehentlich "name" verwendet.

Code:
where [B]name [/B]= '" . $id . "'
Quote:
Originally Posted by PseudoPsycho View Post
2. Sessions werden serverseitig gespeichert. Es ist überhaupt nicht notwendig, das an dieser Stelle zu escapen.
Sicherheit geht für mich einfach vor. Diese Variable wurde möglicherweise vor der Zuweisung nicht geschützt (das ist natürlich jetzt spekulativ). Ich würde es aus Vorsorge trotzdem schützen :)
03/27/2013 12:49 vbacoder#7
Quote:
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user ''@'localhost' (using password: NO) in /users/block.php on line 4

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /users/block.php on line 4
Kein Account gefunden!
Naja nicht so wirklich :S
03/27/2013 12:52 Cheetanatical__*#8
Das geht aus deinem Quellcode nicht hervor. Intval().
03/27/2013 12:53 Mikesch01#9
Naja gut, hier wird die Datenbankverbindung erst später ausgelöst, als die Variable zugeweisen wird.

Benutz statt mysql_real_escape_string einfach htmlentities oder lass es ganz weg^^
03/27/2013 12:57 vbacoder#10
Also was muss ich jetzt abändern das es geht ? ^^
03/27/2013 13:01 Mikesch01#11
PHP Code:
 <?php
session_start 
();

$id $_SESSION['id']; //das hier wurde geändert. Ist das der Name des Spielers oder die ID?!

    
if(empty($id)) {
        die(
'Kein Account gefunden!');
    }
    else {
    
    include(
'../inc/config.php');
    
    
mysql_select_db('player');
        
    
$query mysql_query("SELECT SUM(`account_id`) as amount FROM player where name = '" $id "'");
    
$lasttime mysql_fetch_assoc($query); 
    
$amount $lasttime['amount'];

    
mysql_select_db('account'); //das wurde auch verschoben 

    
$cccc mysql_query("SELECT account_id FROM player where name = '" $id "'");
    
$row mysql_fetch_assoc($cccc);
    
$insertnew false;     

    
mysql_query("UPDATE account.account SET status = 'BLOCK' where id = '"$row['account_id'] ."'");

    
header("Location: http://****.html");

    exit;
    }  
?>
03/27/2013 13:06 vbacoder#12
Ne geht immernoch nicht es kommt die Ausgabe "Kein Account gefunden!"

:S
03/27/2013 13:10 Mikesch01#13
Was steht denn in der $_SESSION['id'] drinne?! Ein Name oder die ID als Zahl eines Spielers? Gibt es diese ID auch in der Datenbank?
03/27/2013 17:38 vbacoder#14
Der name steht dort
03/27/2013 18:56 FUTDealer#15
Wenn ich jetzt nichts überlesen habe, solltest du sich auch zur DB connecten(mysql_connect)