2017-04-19 68 views
-3

我正在研究一個非常基礎的PHP程序。我對PHP很陌生,並且知道我使用的是舊版本,即不是PDO。我一直在研究這一段時間,並不知道爲什麼它不工作。PHP通過表格從表中刪除問題

我只是試圖從我的表中刪除一個匹配用戶輸入的項目。

((也如果任何人有任何簡單的建議,我可以使用有一個更安全的刪除功能,因爲我知道,如果用戶輸入「R」例如,表中的一大部分將被刪除))

這裏是我的代碼:

<?php 

    //delete from table 
    if(isset($_POST['delete1'])) 
    { 
    $deletevalue = $_POST['deletevalue']; 
    $deletequery = "DELETE FROM users WHERE deletevalue = $deletevalue"; 
    $deleteresult = deleteTable($deletevalue); 
    } 

    function deleteTable ($deletevalue) 
    { 
    $connect = mysqli_connect("localhost", "root", "", "test_db"); 
    $delete_fromTable = mysqli_query($connect, $deletevalue); 
    print mysqli_error($connect); 
    } 
    ?> 

    <!DOCTYPE html> 
    <html> 
    <body> 

    <form action="zzz.php" method="post" />      
    <p> Remove Item: <input type="text" name="deletevalue" placeholder="Item 
    Name" /> </p> 
    <input type="submit" name ="delete1" value="submit" /> 
    </form> 
    </body> 
    </html> 
+4

[Little Bobby](http://bobby-tables.com/)說*** [你的腳本存在SQL注入攻擊風險。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql -injection-in-php)***瞭解[MySQLi](http:// http:// http://my.wikipedia.org/wiki/Prepared_statement) php.net/manual/en/mysqli.quickstart.prepared-statements.php)。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –

+0

「請不要火焰」並不意味着你會逃避所有的評論,告訴你你的代碼有多麼嚴重。 –

+0

不可能告知爲什麼在不知道數據庫表結構的情況下無法正常工作。 –

回答

0

這裏你的代碼會看起來像(除安全問題)

在這段代碼中你的firstName的基礎上刪除您記錄的用戶這就是爲什麼在條款WHERE firstName = '$deletevalue' firtName那裏。

if(isset($_POST['delete1'])) 
{ 
    $deletevalue = $_POST['deletevalue']; 
    //here put your table column in where clause 
    $deletequery = "DELETE FROM users WHERE firstName = '$deletevalue'"; //if your form enters name of the users 
    $deleteresult = deleteTable($deletequery); 
} 

function deleteTable ($deletequery) 
{ 
    $connect = mysqli_connect("localhost", "root", "", "test_db"); 
    $delete_fromTable = mysqli_query($connect, $deletequery); 
    print mysqli_error($connect); 
} 

請參閱您的where子句WHERE name =中,如果您的用戶名的基礎上刪除。

並且還請參閱deleteTable($deletequery);您需要傳遞您的查詢而不是值。

注:
是的,我知道你正在學習基本的東西,但我recomendations是
1)使用準備好的語句,探討一些關於它
2)基於ID刪除記錄(唯一字段)沒有名字,名字(名字)可能會爲多個用戶是相同的用戶表

+0

是啊試過這個,不工作:( –

+2

讓我們不教/傳播草率和危險的公司丁的做法。如果您發佈的答案沒有準備好的陳述[您可能想在發佈之前考慮這一點](http://meta.stackoverflow.com/q/344703/)。另外[一個更有價值的答案來自於顯示OP的正確方法](https://meta.stackoverflow.com/a/290789/1011527)。 –

+0

hehehe傑伊你,是的,謝謝你,但我會寫在備註使用準備好的聲明。 – webDev

0

有關的所有意見,並與安全性陳述完全OK,你應該真的考慮使用PPS : Prepared Parameterized Statements。這將有助於Preventing SQL injection。 Plus:在你的頁面上使用error_reporting(E_ALL); ini_set('display_errors', 1);將幫助PHP給你提示錯誤:)

這是處理你的查詢的一種方法(不是唯一的一種)。 請仔細閱讀並根據您的數據庫結構和列名稱對名稱進行修改。

<?php 

error_reporting(E_ALL); ini_set('display_errors', 1); 

$host = ""; /* your credentials here */ 
$user = ""; /* your credentials here */ 
$pwd = ""; /* your credentials here */ 
$db = ""; /* your credentials here */ 

/* store in PHP variable */ 

$deletevalue = $_POST['deletevalue']; 

echo"[ is my var ok ? -> $deletevalue ]"; /* just checking value */ 

// connexion to db 
$mysqli = mysqli_connect("$host", "$user", "$pwd", "$db"); 

if (mysqli_connect_errno()) { echo "Error: no connexion allowed : " . mysqli_connect_error($mysqli); } 

$query = " DELETE FROM `users` WHERE deletevalue = ? "; 

$stmt = $mysqli->prepare($query); /* prepare query */ 

$stmt->bind_param("s", $deletevalue); /* bind param will sanitize -> 's' is for a string */ 

print_r($stmt->error_list); /* any error ? */ 
print_r($stmt->get_warnings()); /* any error ? */ 
print_r($stmt->error); /* any error ? */ 

/* another ways of checking for errors : 

if (!($stmt = $mysqli->prepare(" DELETE FROM `users` WHERE deletevalue = ? "))) { 
echo "Error attempting to prepare : (" . $mysqli->errno . ") " . $mysqli->error; 
} 

if (!$stmt->bind_param("s", $deletevalue)) { 
echo "Error attempting to bind params : (" . $stmt->errno . ") " .  $stmt->error; 
} 
*/ 
if (!$stmt->execute()) { echo"false"; echo "Error attempting to execute : (" . $stmt->errno . ") " . $stmt->error; } else { echo"true"; } 

?> 
+0

這看起來確實很好,但我不明白任何一個:(我只是爲了一個小函數而努力,因爲我開始嘗試和理解PHP的基礎知識,然後我將採取適當的課程 –

+0

@SeánCahill:我儘可能多地評論了代碼,那麼你也必須閱讀所有評論給你的鏈接:),它可能看起來很奇怪,但並不難學 - >好的教程+ RTM ... – OldPadawan