Registations Script macht Probleme

02/01/2015 02:04 Prof.MindFreak#1
Guten Tag,
Wenn ich auf denn registrieren Button klicke passiert das hier.
[Only registered and activated users can see links. Click Here To Register...]
So siht das Regestrieren aus.
[Only registered and activated users can see links. Click Here To Register...]

Hat jemand eine Lösung ?

EDIT!
PHP Code:
<div class="con_top">Registration</div>
<div class="con_mid">
<?PHP
session_start
(); 
if (
$_POST['submit']){
 
        if(
$_POST["account"] == "" || $_POST["pass"] == "" || $_POST["loeschcode"] == ""){             
            
header ("Location: register.php?error=notfilled");
            return 
false;
        }
 
        else if (
strlen($_POST["pass"]) <|| strlen($_POST["pass"]) >16 || !ctype_alnum($_POST["pass"])){             
            
header ("Location: index.php?s=register&error=pass");  
            return 
false;
        }
        
        else if (
strlen($_POST["account"]) <|| strlen($_POST["account"]) >16 || !ctype_alnum($_POST["account"])){            
            
header ("Location: index.php?s=register&error=acc");    
            return 
false;
        }
        
        else if (
strlen($_POST["loeschcode"]) != || !ctype_alnum($_POST["loeschcode"])){         
            
header ("Location: index.php?s=register&error=loeschcode");    
            return 
false;
        }
 
        if(
$_POST["captcha"]!=$_SESSION["captcha_id"]){
            
header("Location: index.php?s=register&error=captcha");
            return 
false;
        }
        
        
$checksql "SELECT login FROM account.account WHERE login = ".mysql_real_escape_string($_POST["account"]);
        
$result $sqlServ->query($checksql);
        if(
$result->num_rows != 0){
            
header("Location: index.php?s=register&error=nametaken");
            return 
false;
        }
        
        
$sql "INSERT INTO account.account (login, password, zipcode, status) VALUES ('".mysql_real_escape_string($_POST["account"])."', ".mysql_real_escape_string(md5($_POST["pass"]))."', ".mysql_real_escape_string($_POST["loeschcode"])."', ".mysql_real_escape_string("OK");
        if (
$sqlServ->query($sql) === TRUE) {
            
header("Location: index.php?s=register&success=true");
            return 
true;
        } 
        else 
        {
            
header("Location: index.php?s=register&error=sql");
            return 
false;
        }
}
  
?>
    <form action="index.php?s=register" method="POST">
      <table>
        <tr>
          <th class="topLine">Account:</th> 
          <td class="tdunkel"><input type="text" name="account" maxlength="16" size="16"/> 8-16 Zeichen (nur a-Z,0-9)</td>
        </tr>
        <tr>
          <th class="topLine">Password:</th> 
          <td class="tdunkel"><input type="password" name="pass" maxlength="16" size="16"/> 8-16 Zeichen (nur a-Z,0-9)</td>
        </tr>
        <tr>
          <th class="topLine">Löschcode:</th> 
          <td class="tdunkel"><input type="text" name="loeschcode" maxlength="7" size="7"/> 7 Zeichen (nur a-Z,0-9)</td>
        </tr>
        <tr>
          <th class="topLine">Captcha:</th>
          <td class="tdunkel"><img src="./captcha/captcha.php" title="Captcha"/>&nbsp;<input type="text" name="captcha" maxlength="5" size="5"/></td>
        </tr>
        <tr>
          <th class="topLine" style="text-align:center;" colspan="2"><input type="submit" name="submit" value="registrieren"/> &bull; <input type="reset" value="zurücksetzen"/></th>
        </tr>
      </table>
    </form>
</div>
<div class="con_bot"></div>
<?PHP
   
if(isset($_REQUEST["error"])){
        
$e $_REQUEST["error"];
        if(
$e == "pass"){
            echo 
"Das Passwort entspricht nicht den Anforderungen";
        } else if(
$e == "notfilled"){
            echo 
"Es wurden nicht alle Felder ausgefüllt";
        } else if(
$e == "acc"){
            echo 
"Accountname entspricht nicht den Anforderungen";
        } else if(
$e == "loeschcode"){
            echo 
"Loeschcode entspricht nicht den Anforderungen";
        } else if(
$e == "captcha"){
            echo 
"Captcha falsch";
        } else if(
$e == "nametaken"){
            echo 
"Name bereits genutzt";
        } else if(
$e == "sql"){
            echo 
"SQL Fehler";
        }
}
 
?>
So siht die Datenbank Struktur aus.
PHP Code:
SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- 
Table structure for `account`
-- ----------------------------
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` (
  `
idint(11NOT NULL AUTO_INCREMENT,
  `
loginvarchar(30NOT NULL DEFAULT '',
  `
passwordvarchar(45NOT NULL DEFAULT '',
  `
real_namevarchar(16) DEFAULT '',
  `
social_idvarchar(13NOT NULL DEFAULT '',
  `
emailvarchar(64NOT NULL DEFAULT '',
  `
phone1varchar(16) DEFAULT NULL,
  `
phone2varchar(16) DEFAULT NULL,
  `
addressvarchar(128) DEFAULT NULL,
  `
zipcodevarchar(7) DEFAULT '',
  `
create_timedatetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `
question1varchar(48) DEFAULT NULL,
  `
answer1varchar(48) DEFAULT NULL,
  `
question2varchar(48) DEFAULT NULL,
  `
answer2varchar(48) DEFAULT NULL,
  `
is_testortinyint(1NOT NULL DEFAULT '0',
  `
statusvarchar(8NOT NULL DEFAULT 'OK',
  `
securitycodevarchar(192) DEFAULT '',
  `
newslettertinyint(1) DEFAULT '0',
  `
empiretinyint(4NOT NULL DEFAULT '0',
  `
name_checkedtinyint(1NOT NULL DEFAULT '0',
  `
availDtdatetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `
mileageint(11NOT NULL DEFAULT '0',
  `
cashint(11NOT NULL DEFAULT '0',
  `
gold_expiredatetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `
silver_expiredatetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `
safebox_expiredatetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `
autoloot_expiredatetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `
fish_mind_expiredatetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `
marriage_fast_expiredatetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `
money_drop_rate_expiredatetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `
ttl_cashint(11NOT NULL DEFAULT '0',
  `
ttl_mileageint(11NOT NULL DEFAULT '0',
  `
channel_companyvarchar(30NOT NULL DEFAULT '',
  `
last_playdatetime NOT NULL,
  `
coinsint(11NOT NULL DEFAULT '0',
  `
web_adminint(1NOT NULL DEFAULT '0',
  `
web_ipvarchar(15NOT NULL,
  `
web_aktiviertvarchar(32NOT NULL,
  
PRIMARY KEY (`id`),
  
UNIQUE KEY `login` (`login`),
  
KEY `social_id` (`social_id`)
ENGINE=MyISAM AUTO_INCREMENT=52183 DEFAULT CHARSET=ascii;

-- ----------------------------
-- 
Records of account
-- ----------------------------
INSERT INTO `accountVALUES ('1''sanii187''*830EAC57F255B7F37B5B6DF6E259E9AAB6CDA337''''0000000'''nullnullnull'''0000-00-00 00:00:00'nullnullnullnull'0''OK''''0''0''0''0000-00-00 00:00:00''0''0''0000-00-00 00:00:00''0000-00-00 00:00:00''0000-00-00 00:00:00''0000-00-00 00:00:00''0000-00-00 00:00:00''0000-00-00 00:00:00''0000-00-00 00:00:00''0''0''''2012-10-13 14:16:22''0''0'''''); 
02/01/2015 08:43 NotEnoughForYou#2
Code:
 
if($_POST["captcha"]==$_SESSION["captcha_id"]){ 
  header("Location: index.php?s=register&error=captcha"); 
  return false; 
}
Da ist der Fehler...
02/01/2015 14:01 Prof.MindFreak#3
Was genau?
Danke für die Antwort
02/01/2015 16:13 NotEnoughForYou#4
Es wird geprüft, ob das Captcha mit der Captcha Session übereinstimmt. Wenn das der Fall ist wird auf eine Fehlerseite weitergeleitet. So macht das natürlich keinen Sinn, man soll ja nur weitergeleitet werden, wenn das Captcha nicht mit der Captcha Session übereinstimmt.

Ergo:
!= statt ==

Abgesehen davon ist das Script nicht gegen SQL Injections geschützt und jeder kann SQL Code in der Datenbank ausführen lassen, würde ich also lieber nicht so nutzen.
02/01/2015 17:06 Prof.MindFreak#5
Quote:
Originally Posted by NotEnoughForYou View Post
Es wird geprüft, ob das Captcha mit der Captcha Session übereinstimmt. Wenn das der Fall ist wird auf eine Fehlerseite weitergeleitet. So macht das natürlich keinen Sinn, man soll ja nur weitergeleitet werden, wenn das Captcha nicht mit der Captcha Session übereinstimmt.

Ergo:
!= statt ==

Abgesehen davon ist das Script nicht gegen SQL Injections geschützt und jeder kann SQL Code in der Datenbank ausführen lassen, würde ich also lieber nicht so nutzen.
Wegen der Sql Injection ist es jetz so okay ?
02/01/2015 17:13 NotEnoughForYou#6
Nein. Offensichtlich wird ja mysqli genutzt, deshalb müsste es dann auch mysqli_real_escape_string sein.

der Fehler sagt aus, dass $sqlServ kein Objekt ist auf dem query() aufgerufen kann.

Zeig mal am besten deine index.php da wird $sqlServ initialisiert sein.