2012-06-18 111 views
2

我有一個非常簡單的腳本,創建一個用戶:

<?php 
include 'mysqlserver.php'; 
session_start(); 



$con = mysql_connect($mysql_host, $mysql_username,$mysql_password); 
if (!$con) { 
die('Could not connect: ' . mysql_error()); 
} 


mysql_select_db($mysql_db, $con); 

$newuser = $_POST[username]; 
$newpassword = $_POST[password]; 
$confirmnewpassword = $_POST[confirmpassword]; 

if ($newpassword != $confirmnewpassword) { 
die('Passwords do not match.'); 
} 

if ($newuser == null) { 
die('You need to choose a username!'); 
} elseif ($newpassword == null) { 
die('You need to enter a password!'); 
} 

$avail_query = mysql_query("SELECT * FROM users WHERE username='$newuser'"); 

$avail_numrows = mysql_num_rows($avail_query); 

if ($avail_numrows != 0) { 
die('That user already exists'); 
} 


mysql_query("INSERT INTO users (username, password) 
VALUES ('$newuser', '$newpassword')"); 


$_SESSION['username'] == $newuser; 

mysql_close($con); 
?> 

<script type="text/javascript"> 

function enterUCP(){ 
window.location = "/member.php" 
} 

</script> 
</head> 
<body onLoad="setTimeout('enterUCP()', 3000)"> 
Account created! Logging you in... 
</body> 

本來,我的劇本只是重定向到登錄頁面創建一個帳戶後。我一直在嘗試調整它,以便在創建帳戶後登錄。 出於某種原因,我無法編輯$ _SESSION ['用戶名']或任何其他會話變量,即使我已經開始在第3行的會話。我很困惑,因爲我的一些其他PHP腳本正確地操縱$ _SESSION變量,我不能說出我的有什麼不同。

P.S.請不要評論我的系統的安全性。這可能是非常不安全的,但我只是在寫一個原型。

編輯:只是爲了使這個問題稍微沒有用處,任何人都可以找到任何嚴重的安全缺陷here

+0

我正在閱讀它..但記得在腳本的開頭(在打開php標籤之後)放置「session_start()」:) –

+0

@ErenorPaz,不必要,只要它在發送任何東西之前到客戶端(回聲,打印..) – Adi

+0

如果包含給出錯誤怎麼辦?好的,在這種情況下,不會有任何連接變量,所以它會停止執行,但正如你所說的,「在任何事情發送到瀏覽器之前」:) –

回答

6

變化:

$_SESSION['username'] == $newuser; 

到:

$_SESSION['username'] = $newuser; 

你比較,而不是設置。

+0

謝謝! *巨型facepalm * – Jaxkr

+1

它發生,特別是在星期一! – ceejayoz

+2

@Jaxkr一個更大的facepalm將在你的第一次SQL注入後發生:D,一個兄弟般的建議..看看[在這](http://stackoverflow.com/questions/60174/best-way-to-prevent- sql-injection-in-php) – Adi

3

$ _SESSION ['username'] == $ newuser;

刪除第二個=符號。

$_SESSION['username'] = $newuser; 
+0

該死的...秒數晚 – javajavajava

+0

不管怎麼說,都有+1。 :-) – ceejayoz

3

哦,天哪:)

$_SESSION['username'] == $newuser; 

雙等於sign..put只有一個,它會工作:)

$_SESSION['username'] = $newuser; 
+0

太晚..良好的工作ceejayoz和user1454749 :) –

+0

是的。 * facepalm *應該自己找到它。 – Jaxkr

3

很多人都已經回答了你的問題,但我沒有」我不想把它放在評論中。

$_SESSION['username'] = $newuser; 

重要: 首先,可以通過切換

$_SESSION['username'] == $newuser; 

解決您的代碼

而你學習的MySQLi或PDO,這樣對你的代碼

$newuser = mysql_real_escape_string($_POST[username]); 

保護喲自己的表單SQL Injection

請確保您對查詢中使用的所有輸入進行類似的轉義。

+0

謝謝,夥計。將從現在開始做。 – Jaxkr