Как удалить несколько строк из базы данных mysql с помощью флажка с помощью PHP?

Я пытаюсь delete внести свои данные в базу данных "admin", но кнопка удаления не работает.

это моя верхняя часть

<?php
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="admin"; // Database name 
$tbl_name="admin"; // Table name 
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");
$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
?>

Это мой код флажка

<tbody>
<?php
    while($rows=mysql_fetch_array($result)){
?>
<tr>
<td><?php echo $rows['course_code']; ?></td>
<td><?php echo $rows['course_name']; ?></td>
<td><?php echo $rows['lecture_id']; ?></td>
<td><input name="checkbox[]" type="checkbox"
    id="checkbox[]" value="<?php echo $rows['course_code'];?>"></td>
<td><form>
</form>
</td>
</tr>
<?php
    }
?>
</tbody>

и это мой код кнопки

<input type='button' id="delete" value='Delete' name='delete'>

Это мой код функции php

<?php
if(isset($_POST['delete'])){
for($i=0;$i<$count;$i++){
$del_id = $checkbox[$i];
$sql = "DELETE FROM $tbl_name WHERE course_code='$del_id'";
$result = mysql_query($sql);
}
if($result){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=delete.php\">";
}
}
mysql_close();
?>

person Kelvin Hii    schedule 28.05.2014    source источник
comment
Ваш ввод находится за пределами вашего тега <form>; первая крупная проблема. Кроме того, нет action или метода, установленного для файла, который должен выполнять работу. То есть: <form action="delete.php"... method = "post"   -  person Funk Forty Niner    schedule 28.05.2014
comment
исправьте это, поместите ваши входные файлы в форму <td><form> </form>   -  person ɹɐqʞɐ zoɹǝɟ    schedule 28.05.2014
comment
Проконсультируйтесь с этим вопросом и ответом на SO, который похож на ваш stackoverflow.com/q/14475096, и вы найдете там свой ответ. Это тот, с которого я начал, и он мне очень помог в прошлом.   -  person Funk Forty Niner    schedule 28.05.2014
comment
Кроме того, метод формы по умолчанию использует GET, если он не установлен. Сделайте <form action="delete.php" method="post">. Теперь у вас достаточно информации, чтобы исправить это самостоятельно.   -  person Funk Forty Niner    schedule 28.05.2014


Ответы (3)


включите все элементы ввода в ваши <form> теги: <form> all inputs are here </form>

Обновить:

<input name = "checkbox[]" type="checkbox"  id="checkbox[]" value="<?php echo     $rows['course_code'];?>">

to (идентификатор здесь не имеет значения):

<input name="checkbox[]" type="checkbox"  value="<?php echo $rows['course_code'];?>"/>

и код вашей кнопки:

<input type='button' id="delete" value='Delete' name='delete'>

to

<input type="submit" value="Delete"/>

установить открывающий тег <form> на <form action="delete.php" method="post">

Примечание. Я предполагаю, что приведенные ниже коды находятся в файле delete.php. если нет, замените «delete.php» на это имя в вышеприведенном теге открывающей формы.

ваш файл delete.php:

<?php
$cheks = implode("','", $_POST['checkbox']);
$sql = "delete from $tbl_name where course_code in ('$cheks')";
$result = mysql_query($sql) or die(mysql_error());
mysql_close();
?>

Примечание. Поскольку поддержка mysql_ в будущем будет прекращена, лучше использовать расширение mysqli. Но прежде чем использовать это, вы должны включить его на своем сервере. mysqli является частью php, и в более новой версии php он есть, но не включен. Чтобы включить это, просмотрите информационную страницу php и найдите путь к файлу php.ini в строке «Загруженный файл конфигурации» на этой странице. Вы можете увидеть страницу с информацией о php, загрузив следующий файл php в браузере:

<?php
 phpinfo();
?>

откройте этот файл php.ini в текстовом редакторе и снимите комментарий или добавьте строку extension=php_mysqli.dll в список расширений. также найдите «extension_dir» и откройте указанный каталог и убедитесь, что там есть файл php_mysqli.dll. (у вас может быть расширение .so, если вы не используете ОС Windows)

Затем перезапустите сервер, и все готово!

Автор Фред -ii-

Использование mysqli_ с подготовленными операторами действительно лучше и более безопасный метод. Однако некоторые даже предлагают PDO, но даже PDO не имеет некоторых функций, которые предлагает mysqli_; странно это. Даже PDO нуждается в санитарной обработке. Многие думают, что использование PDO решит проблемы инъекций, но это не так. -Спасибо, Фред.

person Janaka R Rajapaksha    schedule 28.05.2014
comment
и 1+ за неиспользование петель :) - person ztripez; 28.05.2014
comment
Просто и элегантно, моя внутренняя кодовая обезьяна в восторге. - person Jhecht; 28.05.2014
comment
mysql_ уведомление об устаревании, вероятно, принесет еще больше бонусных баллов, а также внедрения SQL и XSS. ;-) - person Funk Forty Niner; 28.05.2014
comment
Использование mysqli_ с подготовленными операторами действительно лучший и безопасный метод. Однако некоторые даже предлагают PDO, но даже PDO не имеет некоторых функциональные возможности, которые предлагает mysqli_; странно это. Даже PDO нуждается в санитарной обработке. Многие думают, что использование PDO решит проблему инъекций, но это не так. Многие либо не проголосуют за хороший ответ, либо проголосуют за него, если не упомянут уведомление об устаревании mysql_, думаю, вы хотели бы знать ;-) - person Funk Forty Niner; 28.05.2014
comment
@ Fred-ii- Спасибо, что рассказали о сравнении PDO с расширением mysqli. Я обновил ответ. - person Janaka R Rajapaksha; 28.05.2014

попробуйте этот код. это работает хорошо. connection.php

<?php $hostname_conection = "localhost"; /* this is the server name(assigned to variable) which is localhost since it runs on local machine */ 
$database_conection = "company"; /* this is the database name( assigned to variable)*/ 
$username_conection = "root"; /* user name (assigned to variable)*/
$password_conection = ""; /*password (assigned to variable) */ 
$conection = mysql_connect($hostname_conection, $username_conection, $password_conection) or trigger_error(mysql_error(),E_USER_ERROR); /* Mysql_connect function is used to conncet with database it takes three parameters server/hostname, username,and password*/ 
mysql_select_db($database_conection,$conection) or die(mysql_error("could not connect to database!")); /* Mysql_select is used to select the database it takes two parameters databasename and connection variable in this case $conection */ 
?>

multiple_delete.php

<?php require_once('conection.php'); ?> 
<?php 
in
/* now to display the data from the database which we inserted in above form we */ /* we make the query to select data from the table EMP */ 
            $display = "select * from test_mysql";
        $result = mysql_query($display, $conection) or die(mysql_error()); /* the query is executed and result of the query is stored in variable $result */ 
        if ($result == FALSE) {
            die(mysql_error()); /* displays error */
        } ?> <h1 align="center"> Displaying Recods in Table </h1> 
        <form method="get" action="" id="deleteform" > 
            <table width="245" border="1" align="center"> 
                <tr>
                    <td width="51">
                        <input type="submit" name="delete" id="button" value="delete" onclick="document.getElementById('deleteform').action = 'delete.php';document.getElementById('deleteform').submit();"/> <!--- here on clicking the button the form is submitted and action is set to delete.php Here we have used javaScript document refers to this whole page and now we can access any tag that has its id with help of getElementById() method and after the we specify the operation we want to perform in this case action and submit. ---> 
                    </td> 
                    <td width="50">id</td> 
                    <td width="55">name</td>
                    <td width="47">lastname</td>
                </tr>
 <?php 
 while ($rows = mysql_fetch_array($result)) 
        { /* here we make use of the while loop which fetch the data from the $result int array form and stores in $row now we can display each field from the table with $row[‘field_name’] as below */ 
     ?> 
                <tr>
                    <td>
                        <input type="checkbox" name="empids[]" value="<?php echo $rows['id']; ?>" /> <!--here with each checkbox we send the id of the record in the empids[] array ---> 
                    </td>
                    <td>
                        <?php echo $rows['id'] ?>
                    </td>
                        <td>
                            <?php echo $rows['lastname'] ?>
                        </td>
                        <td><?php echo $rows['name'] ?></td> 
                            <?php } ?>
                </tr>
            </table>
        </form> ?>
    </body>
</html>

удалить.php

<?php 
require_once('conection.php'); 
?>
 <?php
 if (isset($_GET['delete'])) /* checks weather $_GET['delete'] is set*/
     {
     if (isset($_GET['empids'])) /* checks weather $_GET['empids'] is set */ 
         { 
         $checkbox = $_GET['empids']; /* value is stored in $checbox variable */ 
         if (is_array($checkbox)) 
             { 
             foreach ($checkbox as $key => $your_slected_id) /* for each loop is used to get id and that id is used to delete the record below */ 
                 { 
                 $q="DELETE FROM test_mysql WHERE id=$your_slected_id "; /* Sql query to delete the records whose id is equal to $your_slected_id */
                 mysql_query($q,$conection) ; /* runs the query */ 

                 } 
                 header("location:multiple_delete.php"); /* Goes back to index.php */ 

                 } 

                 } else 
                     { 
                     echo" you have not selected reords .. to delete"; 

                     } 

                     } ?>
person Keyur Patel    schedule 17.04.2015

person    schedule
comment
НО моя кнопка все еще не работает - person John Chasapis; 10.12.2015