2014-01-09 3 views
0

mysql 삽입 및 업데이트 방법을 이해하는 데 도움이 필요합니다. 나는 Mamp를 실행 중이며 php와 mysql이 작동 중임을 알고있다. 내 데이터베이스 설정 방법은 정보 테이블에 키가 있다는 것입니다. 데이터는 데이터베이스로 암호화되고 passbook.html에 표시되면 암호 해독됩니다. 현재 데이터를 업데이트 할 수 있지만 사용자 이름이나 암호가 변경되면 새 항목이 업데이트되는 대신 데이터베이스에 저장됩니다. 데이터를 업데이트하려면이 문제를 어떻게 해결할 수 있습니까? 암호 또는 사용자 이름이 변경되면 업데이트가 수행되어야합니다. 웹 사이트가 변경되면 새 항목이 만들어지고 이전 항목이 제거되어야합니다.mysql 삽입 및 업데이트

passbook.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>Passbook</title> 
</head> 
<body > 

<header> 

<h1> My Passbook</h1></header> 
</header> 
<body>   
<?php 
    $count = 1; 
?> 

<style> 
#pass a{ 
visibility:hidden; 
} 
#pass:hover a{ 
visibility:visible; 
} 
td{ 
    text-align:center; 
} 
</style> 

    <script type="text/javascript"> 
function checkBox(checkbox){ 
if(checkbox.checked) 
    checkbox.value = 'Yes'; 
else 
    checkbox.value = 'No'; 
} 

function addRow(){ 
      var table = document.getElementById('table'); 
      var row = table.insertRow(-1); 


      var count = document.getElementById('table').rows.length - 1; 

      row.innerHTML="<td name='row' value='"+count+"'>"+count+"</td>" 
         + "<td><input name='" + count + "check' type='checkbox' value=''></input></td>" 
         + "<td><input name='" + count + "web' type='text'></input></td>" 
         + "<td><input name='" + count + "user' type='text'></input></td>" 
         + "<td><input name='" + count + "pass' type='text'></input></td>"; 


         document.getElementById('custom').value = count; 

      } 

</script> 

<form method="post" action="passbook.php"> 
<table id="table" border=5;> 
<th>Row #</th> 
<th>Selected</th> 
<th>Websites</th> 
<th>Usernames</th> 
<th>Passwords</th> 

<?php 
session_start(); 
$connection = mysql_connect('localhost', $_SESSION['username'], $_SESSION['password']) or die ("Could not connect"); 
$key = mysql_query('SELECT `key` FROM `'.$_SESSION['username'].'`.`info`'); 
$string = 'SELECT * FROM `'.$_SESSION['username'].'`.`passbook` WHERE 1'; 
$result = mysql_query($string); 
    while($row = mysql_fetch_assoc($result)) 
    { 
     $decUser = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($row['username']), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 
     $decPass = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($row['password']), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 
     if($row['selected'] == 1) 
      echo "<tr><td style='text-align:center;' value='".$count."'>".$count."</td> 
        <td><input type='checkbox' name='".$count."check' value='1' checked></td> 
        <td><input type='text' name='".$count."web' value='".$row['website']."'><br></td> 
        <td id='user'><a><input type='text' name='".$count."user' value='".$decUser."'></a></td> 
        <td id='pass'><a><input type='text' name='".$count."pass' value='".$decPass."'></a></td> 
        </tr>"; 
     else if($row['selected'] == 0) 
      echo "<tr><td style='text-align:center;' value='".$count."'>".$count."</td> 
        <td><input type='checkbox' name='".$count."check' value='0'></td> 
        <td><input type='text' name='".$count."web' value='".$row['website']."'><br></td> 
        <td id='user'><a><input type='text' name='".$count."user' value='".$decUser."'></a></td> 
        <td id='pass'><a><input type='text' name='".$count."pass' value='".$decPass."'></a></td> 
        </tr>"; 
    $count++; 
    } 
    ?> 
    </table> 


    <br/> 
<input type="button" value="Add row" id="AddRow" onclick="addRow()"></input> 
<input type="submit" value="Save Table"></input> 
</form> 
    <br/><br/> 
<label id="yes"></label> 

<script type="text/javascript"> 
function GotoPage() 
{ 
var loc = document.getElementById('scroller').value; 
if(loc!="0") 
window.location = loc; 
} 
</script> 


<select id="scroller" style="height:42px; width:145px;" onchange="GotoPage()" > 
<optgroup label="Home"> 
<option value="homepage.html">Home</option> 
</optgroup> 
<optgroup label="View Credentials" > 
<option value="passbook.html" selected>Passbook</option> 
</optgroup> 
<optgroup label="Other" > 
<option value="settings.html" >Settings</option> 
</optgroup> 
</select> 

</body></html> 

passbook.php

session_start(); 

$connection = mysql_connect('localhost', $_SESSION['username'], $_SESSION['password']) or die ("Could not connect"); 
$db = mysql_select_db($_SESSION['username'],$connection); 
    $num = 0; 

foreach ($_POST as $data => $value){ 
    $num = substr($data, 0 , 1); 
} 
    $string = "SELECT `key` FROM `info`"; 
    $key = mysql_query($string) or die("failureeee"); 

    for($i = 1; $i <= $num; $i++){ 
    $username = $_POST[$i.'user']; 
    $password = $_POST[$i.'pass']; 
    $encUser = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), substr($username,strlen($i)-1), MCRYPT_MODE_CBC, md5(md5($key)))); 
    $encPass = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), substr($password,strlen($i)-1), MCRYPT_MODE_CBC, md5(md5($key)))); 
    $website = $_POST[$i.'web']; 
    echo "Encrypt" . "<br>" . $_POST[$i.'check'] . " " . $website . " " . $encUser. " " . $encPass . "<br>"; 


    if(isset($_POST[$i.'check'])){ 
      $q = "SELECT * FROM `passbook` WHERE `website`='".$website."'"; 
      $select = mysql_query($q); 
      while($info = mysql_fetch_assoc($select)){ 
       if($info == $website){ 
        $query = "UPDATE `passbook` SET `selected` = '1',`username` = '".$encUser."',`password`='".$encPass."' WHERE `website`='".$website."'"; 
        $run = mysql_query($query); 
       } 
      } 
      if(!isset($query)){ 
       $query = "INSERT INTO `passbook` (`selected`,`website`,`username`,`password`) VALUES ('1','".$website."','".$encUser."','".$encPass."')"; 
       $run = mysql_query($query); 
       echo "<br>INSERT web=".$website."<br>"; 
      } 
    } 
    else{ 
     $q = "SELECT `website` FROM `".$_SESSION['username']."`.`passbook`"; 
      $select = mysql_query($q); 
      while($info = mysql_fetch_assoc($select)){ 
       if($info == $website){ 
        $q2 = "UPDATE `passbook` SET `selected` = '0',`username` = '".$encUser."',`password`='".$encPass."' WHERE `website`='".$website."'"; 
       } 

      } 
      if(!isset($q2)){ 
       $run = mysql_query($q2); 
      } 
      else{ 
      $q2 = "INSERT INTO `passbook` (`selected`,`website`,`username`,`password`) VALUES ('0','".$website."','".$encUser."','".$encPass."')"; 
      $run = mysql_query($q2); 
       } 
     } 
    } 

답변

0

귀하의 PHP 주요 오류가 있습니다.

  • mysql_로 기능이 SQL 인젝션에 취약 당신을 떠날,
  • 당신은 데이터베이스에 직접 사용자가 제출 값을 보내 감가 상각되는
  • 코드는 다음 코드에서

논리적없는 당신 배열 - $ info -를 문자열 - $ 웹 사이트와 비교하려고 시도합니다.

while($info = mysql_fetch_assoc($select)){ 
    if($info == $website){ 
     $query = "UPDATE `passbook` SET `selected` = '1',`username` = '".$encUser."',`password`='".$encPass."' WHERE `website`='".$website."'"; 
     $run = mysql_query($query); 
    } 
} 

내가 당신이 할 무슨 뜻인지 생각이다, 그렇지 않은 경우는

while($info = mysql_fetch_assoc($select)){ 
    // $info is an array that holds the row's data. You access an individual "cell" by referencing the column name as the key 
    if($info['website'] == $website){ 
     $query = "UPDATE `passbook` SET `selected` = '1',`username` = '".$encUser."',`password`='".$encPass."' WHERE `website`='".$website."'"; 
     $run = mysql_query($query); 
    } 
} 

그런 다음이 코드에 당신이 작업 ...를 실행하려고, $의 Q2가 설정되어 있는지 확인하고

그것을 사용하여 쿼리? 말이되지 않습니다.

if(!isset($q2)){ 
    $run = mysql_query($q2); 
} 

이것은 무엇보다 중요한 의견입니다 ... "암호화"체계는 무의미합니다. 암호화 된 데이터와 함께 키를 저장합니다. SQL 인젝션 문제를 해결하지 않으면 누군가 데이터베이스에 액세스하면 데이터를 해독하는 데 필요한 모든 것을 갖게됩니다.

+0

감사합니다. 암호화 계획으로 무엇을 권하고 싶습니까? – CrazyJohnny