Этот ответ, так сказать, является первой тестовой версией. Его цель - выяснить, где именно находится ваша проблема (в коде функций PHP, в настройках БД или в данных, которые есть в ваших таблицах БД).
Итак, вместо вашей страницы PHP, используйте мои две страницы (brugere.php
и connect.php
), в точности как они есть. Но, во-первых, на странице connect.php
измените мои учетные данные базы данных своими! Запустите две страницы и посмотрите, как это работает. В зависимости от результатов или возможной возникшей ошибки / исключения / предупреждения у нас будет отправная точка для решения вашей проблемы.
Примечание: Вначале давайте договоримся сосредоточиться на части выбора записей (например, на успешном выполнении оператора SELECT
), а не на удалении части данных таблицы (например, на успешном запуске DELETE
заявление).
Я также предоставил список определений таблиц и данных, которые я использовал в своих тестах. Может быть, нам это не понадобится. Но я опубликовал его, чтобы вы могли составить собственное представление о том, как должны быть определены или должны быть определены таблицы и их отношения.
Поскольку вы не указали имя / тип используемого расширения доступа к данным ( PDO , объектно-ориентированный mysqli или процедурный mysqli ), Я решил использовать PDO в моих кодах. После того, как мы обнаружим проблему, будет очень легко переключить код на то расширение, которое вы используете.
Буду ждать от вас обратной связи.
Удачи.
<Ч />
PHP страниц:
brugere.php:
<?php
require 'connection.php';
$brugerDeleted = FALSE;
$imagesDir = '../images/';
if (isset($_GET['sletBruger'])) {
$brugerId = $_GET['id'] ?? '';
/*
* ===========================================
* Validate the bruger id sent in query string
* ===========================================
*/
if (empty($brugerId)) {
$errors[] = 'No bruger id provided. Please provide one.';
} elseif (!is_numeric($brugerId)) {
$errors[] = 'The provided bruger id must be an integer.';
} else {
/*
* =========================================================
* Get the billednavn for the bruger id sent in query string
* =========================================================
*/
$sql = 'SELECT billednavn
FROM bruger_billeder
WHERE fk_bruger = :fk_bruger';
$statement = $connection->prepare($sql);
$statement->execute([
':fk_bruger' => $brugerId,
]);
$billednavn = $statement->fetchColumn(0);
/*
* ===========================================================
* Delete the file defined by the value of "billednavn" column
* in "bruger_billeder" table from the images directory
* ===========================================================
*/
if (FALSE !== $billednavn && is_file($imagesDir . $billednavn)) {
unlink($imagesDir . $billednavn);
}
/*
* ===================================================================
* Delete the bruger identified by the bruger id sent in query string.
* The corresponding billednavn is automaticaly deleted too, because
* of the FK defined in "bruger_billeder" table.
* ===================================================================
*/
$sql = 'DELETE FROM brugere
WHERE ID = :ID';
$statement = $connection->prepare($sql);
$statement->execute([
':ID' => $brugerId,
]);
$brugerDeleted = TRUE;
}
}
/*
* =======================
* Get the list of brugere
* =======================
*/
$sql = 'SELECT
brug.*,
fr.f_navn,
br.rollenavn,
bb.billednavn
FROM brugere AS brug
INNER JOIN bruger_billeder AS bb ON brug.ID = bb.fk_bruger
INNER JOIN faerdighedsroller AS fr ON brug.fk_faerdighed = fr.ID
INNER JOIN brugerroller AS br ON brug.fk_rolle = br.ID
ORDER BY brug.ID DESC';
$statement = $connection->prepare($sql);
$statement->execute();
$brugere = $statement->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes" />
<meta charset="UTF-8" />
<!-- The above 3 meta tags must come first in the head -->
<title>Demo</title>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" type="text/css" rel="stylesheet" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<style type="text/css">
body { padding: 30px; }
.centered { text-align: center; }
img { max-width: 200px !important; }
</style>
</head>
<body>
<div class="container">
<h5>Oprettede Brugere</h5>
<?php
if (isset($errors)) {
foreach ($errors as $error) {
?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $error; ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<?php
}
} elseif ($brugerDeleted) {
?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
The selected bruger has been successfully deleted.
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<?php
}
?>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>#</th>
<th>NAVN</th>
<th>EMAIL</th>
<th>MOBILNUMMER</th>
<th>NIVEAU</th>
<th>KILOMETER</th>
<th class="centered">BILLEDE</th>
<th class="centered">REDIGER</th>
<th class="centered">SLET</th>
</tr>
</thead>
<tbody>
<?php
if (!empty($brugere)) {
foreach ($brugere as $bruger) {
$id = $bruger['ID'];
$navn = $bruger['navn'];
$email = $bruger['email'];
$mobil = $bruger['mobil'];
$kilometer = $bruger['kilometer'];
$fNavn = $bruger['f_navn'];
$rollenavn = $bruger['rollenavn'];
$billednavn = $bruger['billednavn'];
?>
<tr>
<td><?php echo $id; ?></td>
<td><?php echo $navn; ?></td>
<td><?php echo $email; ?></td>
<td><?php echo $mobil; ?></td>
<td><?php echo $fNavn; ?></td>
<td><?php echo $kilometer; ?></td>
<td class="centered">
<img src="<?php echo $imagesDir . $billednavn; ?>" alt="<?php echo $billednavn; ?>" class="img-fluid img-thumbnail" />
</td>
<td class="centered">
<a href="?s=sections/redigerBruger&id=<?php echo $id; ?>"
class="btn btn-success btn-sm">
<i class="fa fa-edit"></i>
</a>
</td>
<td class="centered">
<a href="?s=sections/brugere&id=<?php echo $id; ?>&sletBruger"
onclick="return confirm('Er du sikker på du vil slette \'<?php echo $navn; ?>\'');"
class="btn btn-danger btn-sm">
<i class="fa fa-trash"></i>
</a>
</td>
</tr>
<?php
}
} else {
?>
<tr>
<td colspan="9">
No records found
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</body>
</html>
connection.php:
<?php
/*
* This page contains the code for creating a PDO connection instance.
*/
// Db configs.
define('HOST', 'localhost');
define('PORT', 3306);
define('DATABASE', 'tests');
define('USERNAME', 'root');
define('PASSWORD', 'root');
define('CHARSET', 'utf8');
/*
* Error reporting.
*
* @link http://php.net/manual/en/function.error-reporting.php
*/
error_reporting(E_ALL);
ini_set('display_errors', 1); /* SET IT TO 0 ON A LIVE SERVER! */
/*
* Create a PDO instance as db connection to db.
*
* @link http://php.net/manual/en/class.pdo.php
* @link http://php.net/manual/en/pdo.constants.php
* @link http://php.net/manual/en/pdo.error-handling.php
* @link http://php.net/manual/en/pdo.connections.php
*/
$connection = new PDO(
sprintf('mysql:host=%s;port=%s;dbname=%s;charset=%s', HOST, PORT, DATABASE, CHARSET)
, USERNAME
, PASSWORD
, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => FALSE,
PDO::ATTR_PERSISTENT => FALSE,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
);
<Ч />
Таблица определений и данных испытаний:
Таблица "bruger_billeder":
CREATE TABLE `bruger_billeder` (
`fk_bruger` int(11) unsigned NOT NULL,
`billednavn` varchar(255) NOT NULL,
PRIMARY KEY (`fk_bruger`),
CONSTRAINT `bruger_billeder_ibfk_1` FOREIGN KEY (`fk_bruger`) REFERENCES `brugere` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `bruger_billeder` (`fk_bruger`, `billednavn`)
VALUES
(1,'image-3.jpg'),
(2,'image-1.jpg'),
(3,'image-4.jpg'),
(4,'image-1.jpg'),
(5,'image-2.jpg');
Стол "Брюгере":
CREATE TABLE `brugere` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`navn` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`mobil` varchar(8) NOT NULL,
`kilometer` varchar(255) NOT NULL,
`fk_tilmelding` int(11) NOT NULL,
`fk_faerdighed` int(11) unsigned NOT NULL,
`fk_rolle` int(11) unsigned NOT NULL,
PRIMARY KEY (`ID`),
KEY `fk_faerdighed` (`fk_faerdighed`),
KEY `fk_rolle` (`fk_rolle`),
CONSTRAINT `brugere_ibfk_1` FOREIGN KEY (`fk_faerdighed`) REFERENCES `faerdighedsroller` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `brugere_ibfk_2` FOREIGN KEY (`fk_rolle`) REFERENCES `brugerroller` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `brugere` (`ID`, `navn`, `email`, `password`, `mobil`, `kilometer`, `fk_tilmelding`, `fk_faerdighed`, `fk_rolle`)
VALUES
(1,'asdf','kjhkjhj','ziasdf','kjhdf','234',0,2,5),
(2,'hhkjh','iuzaiusdf','mashdfk','ziqewr','673',0,2,5),
(3,'izziu','trere','jhghjf','bnbngh','877',0,2,1),
(4,'oiuoiu','rtzadskf','kjhfasdf','cbvcbvc','654',0,3,3),
(5,'piuoiu','rztrtr','mnbfd','ewtre','49',0,1,4);
Таблица «Бругерроллер»:
CREATE TABLE `brugerroller` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`rollenavn` varchar(25) NOT NULL,
`niveau` tinyint(2) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `brugerroller` (`ID`, `rollenavn`, `niveau`)
VALUES
(1,'jhkjhj',1),
(2,'iuzot',0),
(3,'uziqwezr',0),
(4,'etretre',1),
(5,'poiuiou',0);
Таблица "faerdighedsroller":
CREATE TABLE `faerdighedsroller` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`f_navn` varchar(255) NOT NULL,
`niveau` tinyint(3) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `faerdighedsroller` (`ID`, `f_navn`, `niveau`)
VALUES
(1,'iuziuz',0),
(2,'iouoiu',0),
(3,'uzizu',1),
(4,'kljh',0),
(5,'trerte',1);