2014-09-29 3 views
3

Вопрос очень простой, и я нашел много похожих вопросов в stackoverflow, но ни один из них не работал должным образом для меня.удалите определенную строку таблицы, используя php

Я разработал таблицу, которая будет отображать что-то данные, как это:

ID name Delete 
1 abc  Delete 
2 def  Delete 

код, используемый для вышеприведенного дисплея является

<?php 
$con=mysqli_connect("abc","abc","abc","abc"); 
// Check connection 
if (mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$result = mysqli_query($con,"SELECT * FROM student"); 
echo "<table class='table table-striped table-bordered table-hover'> 
<thead> 
<tr> 
<th>ID</th> 
<th>name</th> 
<th>delete</th> 
</tr> 
</thead>"; 
while($row = mysqli_fetch_array($result)) 
{ 
echo "<tbody data-link='row' class='rowlink'>"; 
echo "<tr>"; 
echo "<td>" . $row['id'] . "</td>"; 
echo "<td>" . $row['name'] . "</td>"; 
echo "<td><a href='delete.php'>Delete</a></td>"; 
echo "</tr>"; 
echo "</tbody>";  
} 
echo "</table>"; 
mysqli_close($con); 
?> 

код delete.php

<?php 
$con=mysqli_connect("abc","abc","abc","abc"); 
// Check connection 
if (mysqli_connect_errno()) { 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
mysqli_query($con,"DELETE FROM student WHERE id='$id'"); 
mysqli_close($con); 
header("Location: index.php"); 
?> 

Вид на базу данных

Id name 
1 abc 
2 cdf 

проблема заключается в том, что она не удалять данные, а также не показывает каких-либо ошибок

Я новичок в этой области, был бы признателен, если кто-то может помочь мне

+0

Вы не определили '$ id' в коде удаления; * или у вас? * Он не показан/включен. –

+0

Вы также помещаете кавычки вокруг целого числа и не можете проверить возвращаемую функцию. – Sammitch

+1

Создание вашего скрипта для удаления простой GET, безусловно, собирается ударить вас по крупу и топать по всем ребрам. НИКОГДА не выполняйте такую ​​деструктивную операцию, как за вами - подумайте, что произойдет, если ваш браузер решит предварительно выбрать все ссылки на странице. «Упс». –

ответ

5

Изменить эту строку:

echo "<td><a href='delete.php'>Delete</a></td>"; 

в

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

Тогда для delete.php (и как было первоначально указано в комментарии, $id не был определен).

<?php 
$con=mysqli_connect("abc","abc","abc","abc"); 
// Check connection 
if (mysqli_connect_errno()) { 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$id = $_GET['id']; // $id is now defined 

// or assuming your column is indeed an int 
// $id = (int)$_GET['id']; 

mysqli_query($con,"DELETE FROM student WHERE id='".$id."'"); 
mysqli_close($con); 
header("Location: index.php"); 
?> 

и он будет работать.

Тем не менее, в целях безопасности, вы должны смотреть в использовании mysqli with prepared statements или PDO with prepared statements, они намного безопаснее. Я привел пример ниже.


Вот подготовлены заявления пример:

<?php 
$DB_HOST = "xxx"; 
$DB_NAME = "xxx"; 
$DB_USER = "xxx"; 
$DB_PASS = "xxx"; 

$con = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); 
if($con->connect_errno > 0) { 
    die('Connection failed [' . $con->connect_error . ']'); 
} 

$id = (int)$_GET['id']; 

$update = $con->prepare("DELETE FROM student WHERE id = ?"); 
$update->bind_param('i', $id); 
$update->execute(); 
$update->close(); 
+1

Спасибо, что он отлично работал – Sam

+0

@Sam Вы очень приветствуете Сэма. –

0

Добавить параметр GET в Ваша ссылка:

echo "<td><a href='delete.php?id='".$row['id']."'>Delete</a></td>"; 

Затем поймать его в delete.php запросе:

$id = $_GET['id']; 
mysqli_query($con,"DELETE FROM student WHERE id='".$id."'"); 
+1

Использование 'GET' никогда не является хорошей идеей при изменении данных в базе данных. Используя, например, расширение для предварительного просмотра, вы автоматически уничтожите свою базу данных. – jeroen

+0

Я пробовал это, но он не возвращает никакого результата – Sam

+0

Почему это не очень хорошая идея? Вы можете очистить $ id по intval ($ id), а затем это безопасно. – Carca

-1

вы, вероятно, не хотят, чтобы обновить страницу каждый раз, когда строка удаляется вы можете сделать это с помощью AJAX запрос на сервер намного быстрее. Вы можете получить полный код по приведенной ниже ссылке: delete individual row from databse using ajax

Смежные вопросы