PHP & MySQL - проблема удаления строк таблицы - PullRequest
0 голосов
/ 29 апреля 2010

Хорошо, мой сценарий должен удалить конкретный случай пользователя, который хранится в 2 таблицах MySQL, но по какой-то причине, когда пользователь удаляет конкретный случай, он удаляет все случаи пользователей. Я только хочу, чтобы он удалил случай, выбранный пользователем. Мне было интересно, как я могу решить эту проблему? Заранее спасибо за помощь.

Вот код PHP и MySQL.

if(isset($_POST['delete_case'])) {

$cases_ids = array();

$mysqli = mysqli_connect("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT cases.*, users_cases.* FROM cases INNER JOIN users_cases ON users_cases.cases_id = cases.id WHERE users_cases.user_id='$user_id'");

if (!$dbc) {
    print mysqli_error($mysqli);
}  else {
    while($row = mysqli_fetch_array($dbc)){ 
        $cases_ids[] = $row["cases_id"];
    }
}

foreach($_POST['delete_id'] as $di) {
    if(in_array($di, $cases_ids)) {
        $mysqli = mysqli_connect("localhost", "root", "", "sitename");
        $dbc = mysqli_query($mysqli,"DELETE FROM users_cases WHERE cases_id = '$di'");

        $dbc2 = mysqli_query($mysqli,"DELETE FROM cases WHERE id = '$di'");
    }

}

}

Вот код XHTML.

<li>
<input type="text" name="file[]" size="25" />
<input type="text" name="case[]" size="25" />
<input type="text" name="name[]" size="25" />
<input type="submit" name="delete_case" id="delete_case" value="Delete Case" />
<input type="hidden" name="delete_id[]" value="' . $row['cases_id'] . '" />
</li>

<li>
<input type="text" name="file[]" size="25" />
<input type="text" name="case[]" size="25" />
<input type="text" name="name[]" size="25" />
<input type="submit" name="delete_case" id="delete_case" value="Delete Case" />
<input type="hidden" name="delete_id[]" value="' . $row['cases_id'] . '" /> 
</li>

<li>
<input type="text" name="file[]" size="25" />
<input type="text" name="case[]" size="25" />
<input type="text" name="name[]" size="25" />
<input type="submit" name="delete_case" id="delete_case" value="Delete Case" />
<input type="hidden" name="delete_id[]" value="' . $row['cases_id'] . '" /> 
</li>

Вот таблицы MySQL.

CREATE TABLE cases (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
file VARCHAR(255) NOT NULL,
case VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE users_cases (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
cases_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
PRIMARY KEY (id)
);

Ответы [ 2 ]

1 голос
/ 29 апреля 2010

С первого взгляда это, вероятно, потому, что весь этот HTML содержится в одной форме. Поэтому независимо от того, какую кнопку Удалить регистр вы нажмете, каждое из скрытых полей delete_id [] будет отправлено на сервер.

Так что вам нужно разделить каждую строку в ее собственную форму, как ...

<li>
<form method="POST" action="someURL.php">
<input type="text" name="file[]" size="25" />
<input type="text" name="case[]" size="25" />
<input type="text" name="name[]" size="25" />
<input type="submit" name="delete_case" id="delete_case" value="Delete Case" />
<input type="hidden" name="delete_id[]" value="' . $row['cases_id'] . '" />
</form>
</li>

или что-то еще, например, замена Submit кнопок на простые Button и добавление некоторого JavaScript ...

0 голосов
/ 29 апреля 2010

Это может быть связано с тем, что идентификатор всех дел передается, даже когда пользователь выбирает один случай ....

Следующее может работать только для получения значений, выбранных пользователем ...

  1. Свяжите флажок с каждым ли с уникальным идентификатором
  2. Позвольте пользователю установить флажок для дел, которые он хочет удалить
  3. Когда пользователь нажимает «Удалить» или что-то еще, используйте javascript для сбора идентификатора случаев, для которых установлен флажок ...
  4. Затем отправьте эти идентификаторы на следующую страницу ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...