2013-04-16 86 views
0

我在這裏做錯了什麼?

// INSERT: if we have a name to add... 
if($_POST['email'] & $_POST['job_id']) { 
    // little bit of cleaning... 
    $email = mysql_real_escape_string($_POST['email']); 
    $job_id = mysql_real_escape_string($_POST['job_id']); 
    // insert new name into table 
    $sql = "INSERT INTO job_applications (id, email, job_id) VALUES ('','$email,'$job_id')"; 
    $result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR); 
} // end if 

我使用「&」,但沒有運氣,是有一定的語法以包括變量?只需要「if($ _ POST [])」一次超過一個值?

+1

你想知道這兩個值是否都是非空的? '&'是按位AND運算符,'&&'是_邏輯_AND。 –

+1

不要這樣做。 'mysql_real_escape_string($ _ POST ['email']);'使用綁定參數和準備語句。 – Kermit

回答

1

嘗試改變

$sql = "INSERT INTO job_applications (id, email, job_id) VALUES ('','$email,'$job_id')"; 

對於

$sql = "INSERT INTO job_applications (id, email, job_id) VALUES ('', '$email','$job_id')"; 

有錯誤報價。

而且,其&&而不是&

&& = AND

|| = OR

,並通過使用PDO更新自己,這是更安全,更

正如@ S.Visser所說,PDO有一些很酷的東西,比如:準備好的語句,佔位符,它對SQL注入更安全。

不難使用:

// Connect to MySQL Server 
$user = "test"; 
$pass = "test"; 
$dbh = new PDO('mysql:host=127.0.0.1;dbname=test', $user, $pass); 
// Prepare some statement 
$stmt = $dbh->prepare("SELECT * FROM test WHERE `email` = :email"); 

綁定一些PARAM,則params通常與:前PARAM名稱表示。如: :email,:name,:pass,:user等... PDOStatement::bindParam也包含第三個參數,它是值類型。 值類型爲代表,可以在這裏找到PDO常數: http://www.php.net/manual/pt_BR/pdo.constants.php 這些常量看起來像PDO::PARAM_* PDOStatement::bindParam也做mysql_real_escape_string工作,並在需要時引用值。

$stmt->bindParam(':email', '[email protected]'); 
// Execute the statement 
$stmt->execute(); 
// Fetch the result 
$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
// Show result array with print_r 
print_r($result); 

嗯,這是所有的,關於英語對不起,我是巴西人:P

+1

當你想傳播你對PDO的愛,請給出一個理由並解釋它。 –

+0

感謝您的提示,@ S.Visser –

+0

謝謝,我將考慮PDO。 –

0

您應該使用&&而不是僅僅使用&。這確保了兩個條件都得到滿足。

0

複製過去的代碼中的if語句。

if(isset($_POST['email']) && isset($_POST['job_id'])) { 
+0

,並且還使用PDO類進行數據庫連接。從來沒有使用mysql_real_escape_string進行sql注入 –

+0

PDO在Stackoverflow上就是這樣的炒作。我讀了這種評論超過50%。當你想傳播你對PDO的愛時,請給出一個理由,然後不要說:'use PDO' –

+0

許多PHP程序員學習瞭如何使用MySQL或MySQLi擴展來訪問數據庫。從PHP 5.1開始,有一個更好的方法。 PHP數據對象(PDO)爲準備好的語句提供方法,並使用對象來提高工作效率! –

0

TS:只是想: 「如果($ _ POST [])」 更多然後一次一個值?

有一種方法可以通過$ _POST ['']循環,因爲它是一個數組。但你需要小心,並檢查每個用戶的輸入!

foreach ($_POST as $key => $post) { 
    if(empty($post) { 
    echo $key ." is empty"; 
    } 
} 
0

除了邏輯運算符(&& VS &),你會做的更好用:

if (isset($_POST['email']) && isset($_POST['job_id'])) 

否則你的服務器可產生警告並記錄它,這將是一個性能命中。

+0

其實你可以通過'isset($ _ POST ['email'],$ _POST ['job_id'])'來實現同樣的事情。參見[這裏](http://php.net/isset)。閱讀起來更容易,尤其是在檢查3個或更多值時。 – vascowhite

+0

@vascowhite使用「isset」而不是&&? –

+0

@Nicos他在回答中使用isset,我只是建議使用它的更清潔的方式。 – vascowhite