2017-09-26 37 views
0

我的目標是比較oldwifi名稱,oldwifipassword與inputbox1和輸入框2.我想讓用戶只有在確認舊的wifiname和密碼後才能更改wifi名稱和密碼。PHP我的sql文本框值與數據庫字段值比較

以下是我的代碼。

<html> 
<body> 
<?php 
$con = mysql_connect("localhost","user","password"); 
$oldwifi = mysql_real_escape_string($_POST['oldwifi']); 
$oldpass = mysql_real_escape_string($_POST['oldpass']); 
$sql="UPDATE test SET dboldwifi = '".$oldwifi."',dboldpass = '".$oldpass."'WHERE id = '1'"; 
mysql_select_db("test", $con); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
else if(mysql_query($sql)&&strcmp($oldwifi,'dboldwifi')==0&&strcmp($oldpass,'dboldpass')==0) 
    { 
     echo "New wifi and password saved successfully !"; 
    } 
else 
{ 
     echo "Old credentials mismatch"; 
     die('Error: ' . mysql_error()); 
} 
mysql_close($con); 
?> 
</body> 
</html> 

我的數據庫:

mysql> select * from test; 
+-----------+-----------+----+ 
| dboldwifi | dboldpass | id | 
+-----------+-----------+----+ 
| Tarzan | Jane  | 1 | 
+-----------+-----------+----+ 

HTML代碼

<html> 

<body> 

<h1>A small example page to insert some data in to the MySQL database using PHP</h1> 

<form action="insert.php" method="post"> 

Firstname: <input type="text" name="oldwifi" /><br><br> 

Lastname: <input type="text" name="oldpass" /><br><br> 



<input type="submit" /> 

</form> 

</body> 
</html> 

輸出結果:舊憑證mismatchError:

我在PHP MySQL的初學者需要幫助的地方我做錯了!

以下工作代碼時,我嘗試插入數據;

<html> 
<body> 
<?php 
$con = mysql_connect("localhost","user","password"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
mysql_select_db("test", $con); 

$sql="INSERT INTO test (dboldwifi, dboldpass)VALUES ('$_POST[oldwifi]','$_POST[oldpass]')"; 
if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "1 record added"; 
mysql_close($con) 
?> 
</body> 
</html> 

謝謝!

+0

** WARNING **:如果你剛開始學習PHP,請不要學過時['mysql_query'](http://php.net/manual/ en/function.mysql-query.php)接口。這很糟糕,並且已經在PHP 7中被刪除了。像[PDO不是很難學的東西](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-php-pdo- for-database-access /)以及[PHP The Right Way](http://www.phptherightway.com/)等指南有助於解釋最佳實踐。確保**你的用戶參數[妥善轉義](http://bobby-tables.com/php),否則你將以嚴重的[SQL注入漏洞](http://bobby-tables.com/ )。 – tadman

+0

鑑於這裏的標籤是如何名字/姓氏,我只能假設你正在適應某種現有的腳本中,**不要**使用此代碼作爲基礎。這是古老而充滿潛在的危險。 – tadman

+0

感謝tadman的迴應!是的,我跟着一些現有的腳本,因爲我告訴你我是初學者。我會努力學習PDO但現在請忽略標貼,讓我知道如果我的問題的任何解決方案。 –

回答

0

這段代碼很糟糕,你要操作錯誤的順序。嘗試清理你的代碼,它會使調試更容易。

elseif(mysql_query($sql)&&strcmp($oldwifi,'dboldwifi')==0&&strcmp($oldpass,'dboldpass')==0)

這是字面上說:

if (updateTheRow && noDifferenceWifi && noDifferentPwd) 

你想讓它說的是:

if (noDifferenceWifi && noDifferentPwd) { 
    updateTheRow 

此外,你比較一下用戶輸入的文字串'dboldwifi'。

試試這個:

<?php 
// Set up your connection here. You can also put this in a config file 
// but the whole point is to get access to the $pdo variable. 
// See line 17 
$host = '127.0.0.1'; 
$db = 'test'; 
$user = 'root'; 
$pass = ''; 
$charset = 'utf8'; 

$dsn = "mysql:host=$host;dbname=$db;charset=$charset"; 
$opt = [ 
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
    PDO::ATTR_EMULATE_PREPARES => false, 
]; 
$pdo = new PDO($dsn, $user, $pass, $opt); 

// Don't need to escape because PDO is awesome 
$oldwifi = $_POST['oldwifi']; 
$oldpass = $_POST['oldpass']; 

// Now use that $pdo variable in your application to query, update, delete etc. 
$stmt = $pdo->query('SELECT 1 FROM test WHERE dboldwifi=? AND dboldpass=?'); 
$stmt->execute([$oldwifi, $oldpass]); 
$match = $stmt->fetchColumn(); 

if ($match) { 
    // Now update your row here using PDO. 
    // https://phpdelusions.net/pdo#dml 
} 
+0

謝謝你這麼多的寶貴時間waterloomatt先生。讓我試試你的代碼。它給了我一個清晰的畫面,但PDO對我來說又是新的..無論如何謝謝 –

相關問題