2016-07-11 4 views
-2

searchcars.php

echo "<a href=\"delete.php?VIN=" . $row['VIN'] . "\">Delete Car</a>"; 

delete.php

$VIN = $_GET['VIN']; 
$sql = "DELETE FROM Cars WHERE VIN = '$VIN'"; 
mysql_query($sql); 

から行を削除します。私はここで何が欠けていますか?すべてのデータ検証のそばなど。これは、実行しようとしている基本的な(ほとんどの)削除行のクエリです。早めにありがとう。

+6

'mysql_ *'関数の使用をやめてください。それらは_years_のために廃止され、php7で完全に削除されます。さらに、ユーザが提供するデータとの文字列連結を介してクエリを作成することはありません。あなたはSQLインジェクションに広くオープンしています – CollinD

+2

いくつかの非常に基本的なクエリのデバッグ方法については、「mysql_query($ sql)or die(mysql_error());」 –

+0

一般的にはリンクを使って物事を削除するのは良い考えではありません。 –

答えて

1

、より良い(これを行うにし、はるかに安全な方法)次のようになります。

PHP:searchcars.php

<?php 

// Set Up MySQL Connection 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 

try 
{ 
    $conn = new PDO("mysql:host=$servername;dbname=MyDB",$username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
} 
catch(PDOException $e) 
{ 
    echo "Connection failed: " . $e->getMessage(); 
} 
    // If $_POST['VIN'] is Set, Do a Little Validation 
    if(isset($_POST['VIN'])) 
    { 
     // If VIN Contains Any Characters other Than Numbers or Letters then Die 
     if(!preg_match('/^[a-zA-Z0-9]{24}/',$_POST['VIN'])) 
     { 
      die('A maximum combination of 24 numbers/letters is allowed'); 
     } 
     // Delete Specified VIN Record From MySQL 
     $query = " 
      DELETE 
      FROM Cars 
      WHERE VIN = :VIN 
     "; 
     try 
     { 
      $stmt = $conn->prepare($query); 
      $stmt->bindParam(':VIN', $_POST['VIN']); 
      $stmt->execute(); 
     } 
     catch(PDOException $ex) 
     { 
      die("MySQL error:" . $ex->getMessage()); 
     } 
    }  
?> 

HTML:

<form action="searchcars.php" method="POST"> 
    <button type="submit" name="VIN" value="<?php echo ($row['VIN']); ?>">Delete Car</button> 
</form> 

私がすることをお勧めしたいですあなたはPDO、準備されたステートメント、そしてPOST対GETを読んでいます。

+1

ありがとうございました。 "MYSQL_ * IS OBSOLETE!"よりも生産的なコメントと答えがあります。警察。非常に感謝して、私は間違いなくPDOを読むでしょう。乾杯! –

+0

喜んで助けてください。 :) PDOの大きな部分は、MySQLの注射攻撃を避けることです。たとえば、元のコードで '$ 'と' '' '=' 1 'の値を持つ' $ _GET [' VIN '] 'を提出すると、VINテーブル全体がダンプされ、ブラウザのURLを変更します。 PDOステートメントでは、MySQLはクエリとは別の完全な文字列を検索し、単に「OK、VINに一致する」または「1」=「1」と言って、何も削除しません。最初にブラウザからコードを挿入する機能を削除します。 :) –