2016-12-02 64 views
-1

我試圖從表單輸入,然後檢查表(用戶),如果該名稱存在,我需要搶uid柱。PHP - 檢查用戶名是否有密鑰更多

輸入(用戶名/ MSG)>檢查用戶名>如果是這樣獲得的uid>否則添加用戶(這個我)>採取的UID,當我插入味精到其表(消息)

表結構使用: user:uid(Unique)|命名

繼承人在PHP whise其中:

<?php 
$name = $_GET["name"]; 
$message = $_GET["message"]; 

$checkn = "SELECT 1 FROM user WHERE name = $name"; 
$sql = "INSERT INTO user (uid, name) VALUES ('','$name')"; 
$msg = "INSERT INTO message (uid, message) VALUES ('$uid','$message')"; 
$uid = "SELECT uid FROM user WHERE name = $name"; 
$result = $conn->query($checkn); 

if ($conn->query($checkn) === TRUE) { 
    echo "Checkn TRUE"; 
}else { 
    echo "<br> SHEEET" . $checkn . $conn->error; 
} 

$conn->close();?> 

我抹去了批量開始,並得到這個固定的所以一旦我能得到這個部分做了我,如果用戶不存在添加。謝謝。

+0

解釋我們什麼不工作? –

+0

我想'WHERE name = $ name'會導致錯誤(並打開SQL注入)。這個問題並沒有解釋具體的問題。防止SQL注入使用參數化查詢。 – chris85

回答

1

我覺得你寫的查詢不對,使用PHP時你應該在'內寫入查詢,如果它包含變量的話。 "將不會分析變量值。

替換:

$checkn = "SELECT 1 FROM user WHERE name = $name";

有了:

$checkn = 'SELECT 1 FROM user WHERE name = $name';

,它應該工作。對其他查詢也一樣。使用'代替"

希望它有幫助。

+0

'''嚴格,不允許變量'''允許所有的變量,你永遠不應該插入這樣的變量。 – KatsuoRyuu

0

剛剛從我的頭

<?php 

$name = $_GET["name"]; 
$message = $_GET["message"]; 

$checkn = sprintf('SELECT 1 FROM `user` WHERE `name` = \'%s\'', $name); 
$sql = sprintf('INSERT INTO `user` (`uid`, `name`) VALUES (\'\',\'%s\')', $name); 
$msg = sprintf('INSERT INTO `message` (`uid`, `message`) VALUES (\'%s\',\'%s\')', $uid, $message); 
$uid = sprintf('SELECT `uid` FROM `user` WHERE `name` = \'%s\'', $name); 

$result = $conn->query($checkn); 

if ($conn->query($checkn) == TRUE) { 
    echo "Checkn TRUE"; 
} else { 
    echo "<br> SHEEET" . $checkn . $conn->error; 
} 

$conn->close(); 

?> 

的頂部由於某種原因,我有時有問題時,我並沒有把'周圍的表名。 我也分開了變量插值,所以它更容易保護它的SQL注入(我沒有保護它)。

您使用三重===這意味着它的嚴格,但MySQL會傳回1,當使用嚴格不正確。

希望它有幫助