2012-12-07 3 views
-4

좋아, 그래서 내가 동일한 필드를 입력 한 증가 할 수있는 사용 가능한 열을 만들려고 노력하고 있지만 작동하지 않는 것 및 나이 동안 노력하고있어. 나는 코드가 혼란 스럽다는 것을 알고 있지만 누군가 도와 줄 수 있습니까?캔트 업데이트 행 mysql 데이터베이스

$make = strtolower($_POST['make']); 
    $fuel = $_POST['fuel']; 
    $transmission = $_POST['transmission']; 
    $size = $_POST['size']; 
    $doors = $_POST['doors']; 
    /*$date = time();*/ 

    date_default_timezone_set('Europe/London'); 
    $date = date('y-m-d'); 

    $connect = mysql_connect ("localhost", "root", "**********"); 
    mysql_select_db ("car"); 

    $query = "SELECT * FROM type WHERE make = '$make'"; 
    $result = mysql_query($query); 
    $row = mysql_num_rows($result); 
    $amount = $row+1; 
    $id = $make."[".$amount."]"; 

    if (isset($_POST['submit'])){ 

     if ($make&&$fuel&&$transmission&&$size&&$doors) 
     { 
      /*if ($fuel!== $fueltype['0','1','2','3'])*/ 
      if ($fuel=='text') 
      { 
       $msg = ("Please enter a valid fuel type: Petrol, Diesel, LPG or Electric"); 
      } 
      else 
      if ($transmission=='text') 
      { 
       $msg = ('Please enter a valid transmission type: Manual, Auto or Semi-auto'); 

      } 
      else 
      if(strpos($size,".") == false){ 
      $msg = ('Please enter the valid engine size: 1.0, 1.4, 1.6 etc'); 
      } 
      else 
      if(!preg_match("/^[0-9]+$/",$doors)){ 
      $msg = ('Please enter the number of doors. 3, 5 etc'); 
      } 
      else{ 
      //Creates the id 
      $query = mysql_query("SELECT * FROM type"); 
     $numrows = mysql_num_rows($query); 

     if ($numrows!=0){ 

      while ($row = mysql_fetch_assoc($query)){ 
      $dbid = $row["id"]; 
      $dbmake = $row["make"]; 
      $dbfuel = $row["fuel"]; 
      $dbtransmission = $row["transmission"]; 
      $dbsize = $row["size"]; 
      $dbdoors = $row["doors"]; 
      } 

      if ($make==$dbmake&&$fuel==$dbfuel&&$transmission==$dbtransmission&&$size==$dbsize&&$doors==$dbdoors){ 

      print_r($dbid); 
      print_r($dbmake); 
      print_r($dbfuel); 
      print_r($dbtransmission); 
      print_r($dbsize); 
      print_r($dbdoors); 
        mysql_query("UPDATE type SET available=available+1 ON DUPLICATE KEY id = id "); 
      } 
      else{ 

      //increments the available column '$make'+'[#]' 
      $query = "SELECT * FROM type WHERE id = '$id'"; 
      $result = mysql_query($query); 
      $numrows = mysql_num_rows($result); 
      $inc = $numrows+1; 
      $available = $inc; 


      $query = mysql_query ("INSERT INTO type VALUES ('$id', '$make', '$fuel', '$transmission', '$size', '$doors', '$date', '$available')"); 
      $msg = ("Car has been added to database. <a href='database.php'>View database?</a>"); 
      } 
      } 
      } 
      } 
+3

를 사용하는 너의 질문을 내려라. 전체 스크립트를 붙여 넣고 "여기, 고쳐주세요"라고 말하는 것은 좋지 않습니다. – dtbarne

+2

** 경고! ** 귀하의 코드는 [SQL 주입 취약점] (http://en.wikipedia.org/wiki/SQL_injection)을 앓고 있습니다. [매개 변수가있는 쿼리] (http://en.wikipedia.org/wiki/Prepared_statement)를 활용할 수 있도록 [PDO] (http://php.net/book.pdo)와 같은 * 비 사용되지 않는 * 데이터베이스 인터페이스를 사용하십시오.). – Charles

+0

SQL 인젝션 취약점이 있습니다. mysql_ * 함수는 더 이상 사용되지 않아야하며 공개 포럼에 데이터베이스 비밀번호를 게시하는 것은 좋지 않을 것입니다. – Cfreak

답변

2

코드에서 문제가있는 부분을 찾아내는 데 너무 많은 방법이 있으므로 문제를 해결하지 못합니다.

그러나 코드는 SQL 삽입에 취약합니다. 사람들이 사용할 수있는 일종의 웹 사이트에이 파일을 업로드 할 계획이라면 PHP PDO 매개 변수화를 사용하거나 입력을 모두 소독하십시오.

0

방법으로 SQL 문을 변경에 대한 :

"UPDATE type SET available=available+1 where id='$dbid'" 

내가 쿼리에 사용되는 ON 중복에 대해 확실하지 오전이 유효한 경우, 당신은 당신은 축소 할 필요가 ID = 아이디

관련 문제