2017-09-26 2 views
0

내 목표는 oldwifi 이름 oldwifipassword를 inputbox1 및 입력 상자 2와 비교하는 것입니다. 이전 wifiname 및 암호를 확인한 후에 만 ​​사용자가 Wi-Fi 이름 및 암호를 변경할 수있게하려고합니다.PHP 데이터베이스 필드 값과 내 SQL 텍스트 값 비교

아래 코드는 제 코드입니다.

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"); 
$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> 

!

아래 코드가 작동하려고합니다. 코드를 삽입하려고합니다.

<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

** 경고가 ** : 당신은 그냥 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-phps-pdo- for-database-access /)와 [PHP The Right Way] (http://www.phptherightway.com/)와 같은 가이드가 모범 사례를 설명하는 데 도움이됩니다. ** 확실하게 ** 귀하의 사용자 매개 변수는 [제대로 이스케이프] (http://bobby-tables.com/php) 또는 심각한 [SQL 주입 버그]로 끝날 것입니다 (http://bobby-tables.com/). – tadman

+0

여기 레이블이 firstname/lastname 인 방법을 감안할 때 나는 기존 스크립트의 일종을 적용한다고 가정 할 수 있습니다 **이 코드를 기본으로 사용하지 마십시오 **. 그것은 고대이고 잠재적 위험으로 가득 차 있습니다. – tadman

+0

답장을 보내 주셔서 감사합니다! 네, 제가 초급자라고 말하면서 기존 스크립트를 따르고 있습니다. 나는 PDO를 배우려고 노력할 것이지만 지금은 lables를 무시하고 제 질문에 대한 해결책이 있는지 알려주십시오. –

답변

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는 나를 위해 새로운 것이다. –

관련 문제