2013-08-22 16 views
1

我在做一個應用程序中,我有這個表:發行使用HTML刪除從我的數據庫行時,PHP,JS

<?php 
require_once 'Connect2db3.php'; 
?>  
<form>  
<fieldset> 
<article class="rondehoeken"> 
<header> 
    <div class="streep1"></div> 
    <div class="streep2"></div> 
    <div class="streep3"></div> 
    <div class="streep4"></div> 
    <div class="streep5"></div> 
    <h1 id="artikel-titel" >Op Vooraad</h1> 
</header> 

<div id="artikel-container">  
<table class="table 1"> 
<thead> 
<title>Inventory Grid.html</title> 
    <meta charset = "UTF-8" /> 
    <style type = "text/css"> 
    table, td, th { 
     border: 1px solid black; 
    } 
    </style> 
</thead>  
<tbody> 
<?php 
$con=mysqli_connect("localhost","root","admin","inventarisdb"); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

$result = mysqli_query($con,"SELECT * FROM BCD"); 

echo "<table border='0'> 
<tr> 
<th>Categorie</th> 
<th>SerieNummer</th> 
<th>MacAdress</th> 
<th>ProductCode</th> 
<th>Prijs</th> 
<th>RekNummer</th> 
<th>PaletNummer</th> 
<th>Hoeveelheid</th> 
<th>Aantekeningen</th> 
</tr>"; 

while($row = mysqli_fetch_array($result)) 
    { 
    echo "<tr>"; 
    echo "<td>" . $row['Categorie'] . "</td>"; 
    echo "<td>" . $row['SerieNummer'] . "</td>"; 
    echo "<td>" . $row['MacAdress'] . "</td>"; 
    echo "<td>" . $row['ProductCode'] . "</td>"; 
    echo "<td>" . $row['Prijs'] . "</td>"; 
    echo "<td>" . $row['RekNummer'] . "</td>"; 
    echo "<td>" . $row['PaletNummer'] . "</td>"; 
    echo "<td>" . $row['Hoeveelheid'] . "</td>"; 
    echo "<td>" . $row['Aantekeningen'] . "</td>"; 
    echo '<td><input type="hidden" class="entryid" name="id" value='.$row['ID'].' /><a href="#" class="delete">delete</a></td>'; 
    echo "</tr>"; 
    } 
echo "</table>"; 

mysqli_close($con); 
?> 

</article> 
</fieldset> 
</form> 

在標題:

刪除形式:

<?php 
$db = array (
    'host' => 'localhost', 
    'user' => 'root', 
    'pass' => 'admin', 
    'dbname' => 'inventarisdb' 
); 

if(!mysql_connect($db['host'], $db['user'], $db['pass'])) 
{ 
    trigger_error('Fout bij verbinden: '.mysql_error()); 
} 
elseif(!mysql_select_db($db['dbname'])) 
{ 
    trigger_error('Fout bij selecteren database: '.mysql_error()); 
} 
else 
{ 
    $sql = "SET SESSION sql_mode = 'ANSI,ONLY_FULL_GROUP_BY'"; 
    if(!mysql_query($sql)) 
    { 
     trigger_error('MySQL in ANSI niet mogelijk'); 
    } 
} 

$id = $_GET['id']; 
$sql="DELETE FROM BCD WHERE id='$Categorie', '$SerieNummer', '$MacAdress', '$ProductCode', '$Prijs', '$RekNummer','$PaletNummer' ,'$Hoeveelheid', '$Aantekeningen'"; 
?> 

該表查找來自另一個表的數據,還提供了刪除該行的選項來自數據庫的表格。

我剛纔所說的一切,這個表格確實適用於這個腳本,除了數據實際上從我的數據庫中刪除。一旦按下刪除刪除操作得到執行提示一個所有說你要刪除一行。它將它從表格中刪除,但是當您檢入數據庫或只是使用表格刷新頁面時,該行仍然存在並且尚未刪除

任何想法爲什麼會發生這種情況或者該怎麼辦?或者,也許如何做到這一點更容易?

+0

最好將標題標籤移動到標籤頭部! – undone

回答

0

根據您的示例代碼演示,我得出了與@BabakBandpay相同的結論; 你永遠不會運行DELETE查詢

無論是否爲真,儘管轉移到MySQLi庫是一個很好的步驟,但仍然使用易受SQL注入影響的代碼。嘗試使用事先準備好的聲明,而不是:http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

下面是根據掉你的代碼的例子(API文檔):

<?php 

    $mysqli = new mysqli('localhost', 'root', 'admin', 'inventarisdb'); 

    /* check connection */ 
    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 

    // ... the rest of your code 

    $id = $_GET['id']; 
    $stmt = $mysqli->prepare("DELETE FROM BCD WHERE id=?"); 
    $stmt->bind_param("i", $id); 

    $success = $stmt->execute(); 

    $mysqli->close(); 
?> 

此代碼,而未經檢驗的,而不是真正的產品質量,是有點難由於綁定語句的性質更安全:

綁定變量將被服務器自動轉義。

當我仍然用PHP編寫代碼時,我更喜歡PDO,但是使用MySQLi的OOP版本是一個體面的妥協,所以我強烈建議閱讀文檔中的示例。

編輯:作爲附錄,我還建議通過濾波器模塊(http://www.php.net/manual/en/book.filter.php)運行您的輸入變量。假設$id應該是一個整數,我會更新分配:

$id = filter_var($_GET['id'], FILTER_SANITIZE_NUMBER_INT); 

這將從$_GET['id']去除一切不是數字或+/-號。

+0

謝謝!我會通讀並嘗試一下!很粗糙! – Kentje

3

我不認爲這會工作

$sql="DELETE FROM BCD WHERE id='$Categorie', '$SerieNummer', '$MacAdress', '$ProductCode', '$Prijs', '$RekNummer','$PaletNummer' ,'$Hoeveelheid', '$Aantekeningen'"; 

您應該將參數與或OR,這取決於你的刪除成功的標準需要不是一個逗號分隔,還提供每列名時間。

喜歡的東西

$sql="DELETE FROM BCD WHERE id='$Categorie' AND serial_number='$SerieNummer', //etc 

倒不如基於主鍵刪除,而不是這樣一個範圍值

的也不要使用mysql_函數,使用庫MySQLi或PDO與參數化查詢

+0

我改變了這一切,而我應該使用,而不是OR在這種情況下,但我得到了完全相同的執行操作和結果。 – Kentje

+0

@Kentje,這不適用於你,因爲你已經使用過的那些變量都沒有定義。 – vee

+0

提供每個AND/ORs的列名稱 – allen213

1

您的隱藏輸入被命名爲id,您打電話給$id = $_GET['id'],您查詢中的所有其他變量都是未定義的,因爲您沒有自己定義他們的地方,如果你已經定義了他們。

替換:

$id = $_GET['id']; 
$sql="DELETE FROM BCD WHERE id='$Categorie', '$SerieNummer', '$MacAdress', '$ProductCode', '$Prijs', '$RekNummer','$PaletNummer' ,'$Hoeveelheid', '$Aantekeningen'"; 

有:

$id = intval($_GET['id']); // assuming your id column is integer type. 
$sql="DELETE FROM BCD WHERE id=$id"; 

還要注意的是mysql_功能已被棄用。您應該使用mysqlipdo

+0

U意味着'$ ID'「;然後是嗎?在我剛剛嘗試後,它沒有任何區別,我得到相同的執行操作,但仍然沒有從數據庫中刪除統計信息 – Kentje

+0

' – vee

+0

當我這樣做時,我的腳本中出現一個錯誤,提示id = undefined變量,我的表不再顯示它查找的數據 – Kentje

2

因爲在您的代碼中很明顯,您不執行查詢。

+0

這是真的,除非他忘了粘貼那一點 - 原來的查詢不會工作,雖然 – allen213

相關問題