2013-01-22 105 views
0

這應該很容易,但我不能讓它工作。 這個想法是尋找從表單發佈的電子郵件地址。如果它存在回顯的東西,如果不回聲別的東西。mysql_query與PHP變量

我的代碼是:

<?php 
//MySQL Database Connect 
mysql_connect("localhost", "********", "**********") 
    or die("Unable to connect to MySQL"); 

//get data from form 
$email=$_POST['email']; 

//ask the database for coincidences 
$result = mysql_query("SELECT email FROM pressmails WHERE email='.$email.'"); 
$num_rows = mysql_num_rows($result); 


if($num_rows < 0){ 
    echo "The user is registered"; 
} else { 
    echo "The user is not registered"; 
} 

//Close database connection 
mysql_close(); 
?> 
+3

的'mysql'擴展已經過時。閱讀更多http://php.net/en/mysql-connect。 //哦,你顯然會引入一些SQL注入 – KingCrunch

+2

不要使用mysql_ *'。他們現在已經被棄用了,你應該習慣使用'mysqli'作爲最低... – BenM

+0

你是否收到用戶沒有註冊的消息?我想也許你的'$ num_rows <0'是錯誤的方式...... –

回答

3

你是不是串聯串正常。

$result = mysql_query("SELECT email FROM pressmails WHERE email='.$email.'");

應該

$result = mysql_query("SELECT email FROM pressmails WHERE email='".$email."'"); 
1

您應該結束使用結束引號的字符串(如果你"開始字符串中,你必須結束字符串"也同樣爲')。

並且不要忘記使用mysql_real_escape_string,否則腳本不安全。

該腳本將成爲這樣的事情:

// save the query in a variable, so we can echo it to debug when it doesn't work as expected 
$sql = "SELECT email FROM pressmails WHERE email='".mysql_real_escape_string($email)."'"; 
$result = mysql_query($sql); 
+0

非常感謝。我試過了,它不起作用,但如果我回顯$ sql,則會打印字符串OK。當我回顯$ result時,它不會打印任何內容。我檢查了phpmyadmin的查詢和它的工作原理...這是非常WEIRD,正確嗎? – Jaume

1

你不需要拼接識別,因爲包裝文字中"會自動解析變量到字符串:

$result = mysql_query("SELECT email FROM pressmails WHERE email='$email'"); 

你應該小心,注意你。這樣做代表了一個重要的SQL注入漏洞。你至少應該考慮清潔$email。另請參閱我對PHP中的mysql_*函數的評論。

Docs

這個擴展不贊成PHP 5.5.0,並且將在 將來被移除。相反,應該使用MySQLi或PDO_MySQL擴展。 另請參見MySQL:爲更多 信息選擇API指南和相關FAQ。替代該功能包括:

mysqli_close()PDO:NULL值分配給PDO的對象

+0

感謝您的幫助,但無論我使用mysql還是mysqli,它仍然無法正常工作。當我輸入註冊的電子郵件或未註冊的電子郵件時,變量$ num_rows是空的...任何想法?謝謝!!! – Jaume

+0

'$ num_rows'永遠不會小於0.它可以是0或更大。你需要檢查'if($ num_rows> 0)'... – BenM

0

(假設你得到你的語法錯誤糾正)不是這個邏輯倒退?

if($num_rows < 0){ 
echo "The user is registered"; 
} else { 
echo "The user is not registered"; 
} 

如果用戶註冊了自己的電子郵件是在數據庫和查詢返回一行或多行

嘗試

if($num_rows){ 
    echo "The user is registered"; 
} else { 
    echo "The user is not registered"; 
} 
+0

更好的辦法是使用'$ num_rows> 0',除了完整的查詢檢查丟失,這應該是一個評論,而不是一個答案。 –