Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Не удаётся удалить строку из базы данных


Recommended Posts

Всем доброго дня!

Не могу понять почему не хочет удалять из базы строку.

Подскажите, пожалуйста в чём проблема.

Есть кнопка в модальном окне, при нажатии на которую должна удалиться строка и закрыться окно. Окно закрывается, но не удаляется строка.

Как в шаблоне, так и в контроллере большой код - писать весь не буду - много. Весь код напишу только в Модели. 

Спасибо!

 

 

Шаблон:

<div class="modal fade" id="Lep_Modal_Delete" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
		<div class="modal-dialog" role="document">
			<div class="modal-content">
				<div class="modal-header">
					<h4 class="modal-title" id="myModalLabel">Подтверждение удаления</h4>
					<button type="button" class="close" data-dismiss="modal" aria-label="Close">
						<span aria-hidden="true">&times;</span>
					</button>
				</div>
				<div class="modal-body">
					<p>Вы действительно хотите удалить данный договор?</p>
					<table class="table table-striped table-bordered">
						<tbody>
							<tr>
								<td>
									<strong>ID номер:</strong>
								</td>
								<td>
									<span id="Lep_Delete_LepID"></span>
								</td>
							</tr>
							<tr>
								<td>
									<strong>Договор №:</strong>
								</td>
								<td>
									<span id="Lep_Delete_LepNr"></span>

								</td>

							</tr>
							<tr>
								<td>
									<strong>Имя клиента:</strong>
								</td>
								<td>
									<span id="Lep_Delete_KlientNimi"></span>

								</td>

							</tr>
							<tr>
								<td>
									<strong>Фамилия клиента:</strong>
								</td>
								<td>
									<span id="Lep_Delete_KlientPNimi"></span>

								</td>

							</tr>
						</tbody>
					</table>
				</div>
				<div class="modal-footer">
					<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
					<button type="button" class="btn btn-danger" id="Lep_Delete_Confirm">Delete</button>
				</div>
			</div>
		</div>
	</div>

	<script>
		$('.Lep_LepID_delete_confirm').click(function () {
var lepid = $(this).data('lepid');
var lepnr = $(this).data('lepnr');
var klientnimi = $(this).data('klientnimi');
var klientpnimi = $(this).data('klientpnimi');
$('#Lep_Delete_LepID').html(lepid);
$('#Lep_Delete_LepNr').html(lepnr);
$('#Lep_Delete_KlientNimi').html(klientnimi);
$('#Lep_Delete_KlientPNimi').html(klientpnimi);
$('#Lep_Delete_Confirm').off('click').on('click', function () {
$.ajax({
url: 'index.php?route=common/lepingud/lepingud',
type: 'post',
data: 'lepid=' + lepid + '&token= {{ csrf_token }}',
dataType: 'json',
beforeSend: function () {
$('#Lep_Modal_Delete').modal('hide');
$('.loading-overlay').show();
},
success: function (json) {
if (json['success']) {
location.reload();
} else {
alert(json['error']);
}
},
complete: function () {
$('.loading-overlay').hide();
}
});
});
});
</script>

 

Контроллер:

    public function delete()
    {
        $this->load->language('common/lepingud/lepingud');
        $json = array();

        if ($this->request->server['REQUEST_METHOD'] == 'POST') {
            if (isset($this->request->post['lepid'])) {
                $this->load->model('common/lepingud/lepingud');
                $this->model_common_lepingud_lepingud->deleteLeping($this->request->post['lepid']);
                $json['success'] = true;
            } else {
                $json['error'] = $this->language->get('error_lepid');
            }
        } else {
            $json['error'] = $this->language->get('error_method');
        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }

 

Модель(Верхняя часть кода работает и я могу добавить данные в таблицу)

<?php
class Modelcommonlepingudlepingud extends Model
{
    public function addDataToDatabase($data)
    {
        $db = new PDO('mysql:host=' . DB_HOSTNAME . ';dbname=' . DB_DATABASE, DB_USERNAME, DB_PASSWORD);
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->query("SET NAMES 'utf8'");

        // Connect to the database
        try {
            $db = new PDO('mysql:host=' . DB_HOSTNAME . ';dbname=' . DB_DATABASE, DB_USERNAME, DB_PASSWORD);
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $db->query("SET NAMES 'utf8'");
        } catch (Exception $e) {
            // Handle any errors that occur during the connect process
        }
        // Insert or update the data in the database
        $sql = "INSERT INTO " . DB_PREFIX . "leping_kuld (LepNr, Esindus, Paevid, KlientNimi, KlientPNimi, Summa, Pakett, Seisukord, KTahtaeg, Intress, Hoiutasu, Lepingutasu, Nimetus, Seeria, Parool, Kirjeldus, Makseviis, Proov, Kaal, Kategooria, TNimi, TPNimi, Isikukood)            
        VALUES (:lepnr, :esindus, :paevid, :klientnimi, :klientpnimi, :summa, :pakett, :seisukord, :ktahtaeg, :intress, :hoiutasu, :lepingutasu, :nimetus, :seeria, :parool, :kirjeldus, :makseviis, :proov, :kaal, :kategooria, :tnimi, :tpnimi, :isikukood)
        ON DUPLICATE KEY UPDATE Esindus = VALUES(Esindus), Paevid = VALUES(Paevid), KlientNimi = VALUES(KlientNimi), KlientPNimi = VALUES(KlientPNimi), Summa = VALUES(Summa), Pakett = VALUES(Pakett), Seisukord = VALUES(Seisukord), KTahtaeg = VALUES(KTahtaeg), Intress = VALUES(Intress), Hoiutasu = VALUES(Hoiutasu), Lepingutasu = VALUES(Lepingutasu), Nimetus = VALUES(Nimetus), Seeria = VALUES(Seeria), Parool = VALUES(Parool), Kirjeldus = VALUES(Kirjeldus), Makseviis = VALUES(Makseviis), Proov = VALUES(Proov), Kaal = VALUES(Kaal), Kategooria = VALUES(Kategooria), TNimi = VALUES(TNimi), TPNimi = VALUES(TPNimi), Isikukood = VALUES(Isikukood)";

        $stmt = $db->prepare($sql);
        $stmt->bindParam(':lepnr', $data['LepNr']);
        $stmt->bindParam(':esindus', $data['Esindus']);
        $stmt->bindParam(':paevid', $data['Paevid']);
        $stmt->bindParam(':klientnimi', $data['KlientNimi']);
        $stmt->bindParam(':klientpnimi', $data['KlientPNimi']);
        $stmt->bindParam(':summa', $data['Summa']);
        $stmt->bindParam(':pakett', $data['Pakett']);
        $stmt->bindParam(':seisukord', $data['Seisukord']);
        $stmt->bindParam(':ktahtaeg', $data['KTahtaeg']);
        //$date = DateTime::createFromFormat('d.m.Y', $data['KTahtaeg']);Delete if not use
        //$newDate = $date->format('Y-m-d');Delete if not use
        //$stmt->bindParam(':ktahtaeg', $newDate);Delete if not use
        $stmt->bindParam(':intress', $data['Intress']);
        $stmt->bindParam(':hoiutasu', $data['Hoiutasu']);
        $stmt->bindParam(':lepingutasu', $data['Lepingutasu']);
        $stmt->bindParam(':nimetus', $data['Nimetus']);
        $stmt->bindParam(':seeria', $data['Seeria']);
        $stmt->bindParam(':parool', $data['Parool']);
        $stmt->bindParam(':kirjeldus', $data['Kirjeldus']);
        $stmt->bindParam(':makseviis', $data['Makseviis']);
        $stmt->bindParam(':proov', $data['Proov']);
        $stmt->bindParam(':kaal', $data['Kaal']);
        $stmt->bindParam(':kategooria', $data['Kategooria']);
        $stmt->bindParam(':tnimi', $data['TNimi']);
        $stmt->bindParam(':tpnimi', $data['TPNimi']);
        $stmt->bindParam(':isikukood', $data['Isikukood']);
        $stmt->execute();
        header('Refresh: 0.1');
    }
    public function deleteLeping($lepid)
    {
        if (is_numeric($lepid) && isset($this->db)) {
            $lepid = (int)$lepid;
            $query = $this->db->prepare("DELETE FROM " . DB_PREFIX . "leping_kuld WHERE LepID = ?");
            $query->bind_param("i", $lepid);
            $query->execute();
        }
    }
}

 

  • +1 1
Надіслати
Поділитися на інших сайтах


Що в журналах?

 

Замініть тимчасово код і гляньте консоль (ctrl+shift+i)

 

success: function (json) {

console.log(json);

if (json['success']) {

// location.reload();

} else {
alert(json['error']);
}

 

Надіслати
Поділитися на інших сайтах

11.06.2023 в 22:26, drOC сказал:

Що в журналах?

 

Замініть тимчасово код і гляньте консоль (ctrl+shift+i)

 

success: function (json) {

console.log(json);

if (json['success']) {

// location.reload();

} else {
alert(json['error']);
}

 

Спасибо за Ваш ответ!

К сожалению, я только учусь и ещё не умею пользоваться журналом, по крайней мере, я в консоли ничего не вижу - там ничего не меняется.

 

Подскажите, пожалуйста, какой код поменять на предложенный вами? Спасибо!

Надіслати
Поділитися на інших сайтах


11.06.2023 в 22:37, drOC сказал:

Щось не бачу в шаблоні атрибуту data-lepid, може не перекидає айді на контролер

 

var lepid = $(this).data('lepid');

 

В шаблоне выше у меня идёт таблица, которая выводит все строки базы данных и напротив каждой строки есть 3 кнопки Изменить, Печать, Удалить.  

Первые 2 работают и я могу менять данные и печатать их, а вот удалить не могу.

 

Код кнопок

						<div class="lep-buttons-action">
							<button type="button" class="Lep_LepID_change btn btn-primary" data-toggle="modal" data-target="#lep_add_entry_modal" data-token="{{ csrf_token }}" data-isikukood="{{ row.Isikukood }}" data-lepid="{{ row.LepID }}" data-lepnr="{{ row.LepNr }}" data-esindus="{{ row.Esindus }}" data-solmitud="{{ row.Solmitud }}" data-paevid="{{ row.Paevid }}" data-klientnimi="{{ row.KlientNimi }}" data-klientpnimi="{{ row.KlientPNimi }}" data-summa="{{ row.Summa }}" data-pakett="{{ row.Pakett }}" data-seisukord="{{ row.Seisukord }}" data-ktahtaeg="{{ row.KTahtaeg }}" data-intress="{{ row.Intress }}" data-hoiutasu="{{ row.Hoiutasu }}" data-lepingutasu="{{ row.Lepingutasu }}" data-nimetus="{{ row.Nimetus }}" data-seeria="{{ row.Seeria }}" data-parool="{{ row.Parool }}" data-kirjeldus="{{ row.Kirjeldus }}" data-makseviis="{{ row.Makseviis }}" data-proov="{{ row.Proov }}" data-kaal="{{ row.Kaal }}" data-kategooria="{{ row.Kategooria }}" data-tnimi="{{ row.TNimi }}" data-tpnimi="{{ row.TPNimi }}">
								<i class="fa fa-pencil"></i>
							</button>
							<button type="button" class="Lep_LepID_change btn btn-primary" data-toggle="modal" data-target="#Lep_Modal_Print" data-token="{{ csrf_token }}" data-isikukood="{{ row.Isikukood }}" data-lepid="{{ row.LepID }}" data-lepnr="{{ row.LepNr }}" data-esindus="{{ row.Esindus }}" data-solmitud="{{ row.Solmitud }}" data-paevid="{{ row.Paevid }}" data-klientnimi="{{ row.KlientNimi }}" data-klientpnimi="{{ row.KlientPNimi }}" data-summa="{{ row.Summa }}" data-pakett="{{ row.Pakett }}" data-seisukord="{{ row.Seisukord }}" data-ktahtaeg="{{ row.KTahtaeg }}" data-intress="{{ row.Intress }}" data-hoiutasu="{{ row.Hoiutasu }}" data-lepingutasu="{{ row.Lepingutasu }}" data-nimetus="{{ row.Nimetus }}" data-seeria="{{ row.Seeria }}" data-parool="{{ row.Parool }}" data-kirjeldus="{{ row.Kirjeldus }}" data-makseviis="{{ row.Makseviis }}" data-proov="{{ row.Proov }}" data-kaal="{{ row.Kaal }}" data-kategooria="{{ row.Kategooria }}" data-tnimi="{{ row.TNimi }}" data-tpnimi="{{ row.TPNimi }}">
								<i class="fa fa-print"></i>
							</button>
							<button type="button" class="Lep_LepID_delete_confirm btn btn-danger" data-toggle="modal" data-target="#Lep_Modal_Delete" data-token="{{ csrf_token }}" data-isikukood="{{ row.Isikukood }}" data-lepnr="{{ row.LepNr }}" data-lepid="{{ row.LepID }}" data-klientnimi="{{ row.KlientNimi }}" data-klientpnimi="{{ row.KlientPNimi }}">
								<i class="fa fa-trash"></i>
							</button>

						</div>

 

Надіслати
Поділитися на інших сайтах


csrf_token існує?

 

замініть конструкцію вище так

 

success: function (json) {

console.log(json);
console.log('lepid=' + lepid + '&token= {{ csrf_token }}');

if (json['success']) {

// location.reload();

} else {
alert(json['error']);
}

 

журнали в адмінці розділ - це якщо причина на бекенді і увімкнено в системних налаштуваннях запис

консоль у вкладенні ctrl+shift+i (або cmd+shifti для мак) - це якщо проблема на фронтенді (внизу буде дамп console.log)

2023-06-11_22-39.png

Надіслати
Поділитися на інших сайтах

В журнале

2023-04-30 19:13:44 - PHP Notice:  Undefined offset: 1 in ***/admin/controller/common/lepingud/lepingud.php on line 71
2023-04-30 19:13:44 - PHP Notice:  Undefined offset: 2 in ***/admin/controller/common/lepingud/lepingud.php on line 72
2023-04-30 19:13:44 - PHP Notice:  Undefined offset: 3 in ***/admin/controller/common/lepingud/lepingud.php on line 73
2023-04-30 19:13:44 - PHP Notice:  Undefined offset: 4 in ***/admin/controller/common/lepingud/lepingud.php on line 74
2023-04-30 19:13:44 - PHP Notice:  Undefined offset: 5 in ***/admin/controller/common/lepingud/lepingud.php on line 75
2023-04-30 19:13:44 - PHP Notice:  Undefined offset: 6 in ***/admin/controller/common/lepingud/lepingud.php on line 76
2023-04-30 19:13:44 - PHP Notice:  Undefined offset: 7 in ***/admin/controller/common/lepingud/lepingud.php on line 77
2023-04-30 19:13:44 - PHP Notice:  Undefined offset: 8 in ***/admin/controller/common/lepingud/lepingud.php on line 78
2023-04-30 19:13:44 - PHP Notice:  Undefined offset: 9 in ***/admin/controller/common/lepingud/lepingud.php on line 79
2023-04-30 19:13:44 - PHP Notice:  Undefined offset: 10 in ***/admin/controller/common/lepingud/lepingud.php on line 80
2023-04-30 19:13:44 - PHP Notice:  Undefined offset: 11 in ***/admin/controller/common/lepingud/lepingud.php on line 81

 

 

71я строка начинается тут

        if ($this->request->server['REQUEST_METHOD'] == 'POST') {
            if (isset($this->request->post['lepid'])) {
                $this->load->model('common/lepingud/lepingud');
                $this->model_common_lepingud_lepingud->deleteLeping($this->request->post['lepid']);
                $json['success'] = true;
            } else {
                $json['error'] = $this->language->get('error_lepid');
            }
        } else {
            $json['error'] = $this->language->get('error_method');
        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }
}

 

Надіслати
Поділитися на інших сайтах


11.06.2023 в 22:42, drOC сказал:
success: function (json) {

console.log(json);
console.log('lepid=' + lepid + '&token= {{ csrf_token }}');

if (json['success']) {

// location.reload();

} else {
alert(json['error']);
}

Простите за невежество, а это в какую часть кода вставить? В конец Модели или вместо чего-то?

Надіслати
Поділитися на інших сайтах


Ось цю частину змінити (тимчасово) там доданий вивід дампу I/O і закоментоване перезавантаження сторінки

 

success: function (json) {
if (json['success']) {
location.reload();
} else {
alert(json['error']);
}

 

Надіслати
Поділитися на інших сайтах

Чтобы было немного понятнее обо мне: Я знаю HTML и CSS. JavaScript и PHP у меня как с Украинским =)))))) - Я Эстонец - понять Вас или жену могу, а сформулировать не особо.

Я пользуюсь давно opencart, но это мой первый проект, где я разбираюсь именно с кодом. Пишу по Инструкциям и шаблонам. До этого как-то справлялся, но с этим удалением прям беда 2й день воюю =))

Змінено користувачем Yurasic
Надіслати
Поділитися на інших сайтах


11.06.2023 в 22:54, drOC сказал:

Ось цю частину змінити (тимчасово) там доданий вивід дампу I/O і закоментоване перезавантаження сторінки

 

success: function (json) {
if (json['success']) {
location.reload();
} else {
alert(json['error']);
}

 

Закоментировал свою строку, добавил Вашу, отправил на сервер.

 

ничего не поменялось после нажатий кнопок.

Всё так же после нажатия на Delete просто закрывает Ajax

Консоль молчит:

 

LepID2.png

Надіслати
Поділитися на інших сайтах


Знайшов, спробуйте замінити

 

    public function deleteLeping($lepid)
    {
        if (is_numeric($lepid) && isset($this->db)) {
            $lepid = (int)$lepid;
            $query = $this->db->prepare("DELETE FROM " . DB_PREFIX . "leping_kuld WHERE LepID = ?");
            $query->bind_param("i", $lepid);
            $query->execute();
        }
    }

 

на

 

    public function deleteLeping($lepid)
    {
        if (!empty($lepid)) {
            $lepid = (int)$lepid; // це не потрібно теж якщо у вас PDO
            $query = $this->db->prepare("DELETE FROM " . DB_PREFIX . "leping_kuld WHERE LepID = ?");
            $query->execute([$lepid]);
        }
    }

 

Надіслати
Поділитися на інших сайтах

Цитата

ничего не поменялось после нажатий кнопок.

 

у вас мабуть кеш шаблону або модифікацій, поверніть все як було - відповідть вище написав, там проблема в передачі параметру lepid

 

я щось поліз не в ті хащі спочатку)

 

 

Надіслати
Поділитися на інших сайтах

В 11.06.2023 в 22:47, Yurasic сказав:

csrf_token існує? - Да, я таким образом добился, чтобы не вылетало каждый раз в окно авторизации. передаётся токен

 

по цій темі є модуль кому треба

 

 

Надіслати
Поділитися на інших сайтах

11.06.2023 в 23:05, drOC сказал:

Знайшов, спробуйте замінити

 

    public function deleteLeping($lepid)
    {
        if (is_numeric($lepid) && isset($this->db)) {
            $lepid = (int)$lepid;
            $query = $this->db->prepare("DELETE FROM " . DB_PREFIX . "leping_kuld WHERE LepID = ?");
            $query->bind_param("i", $lepid);
            $query->execute();
        }
    }

 

на

 

    public function deleteLeping($lepid)
    {
        if (!empty($this->db)) {
            $lepid = (int)$lepid; // це не потрібно теж якщо у вас PDO
            $query = $this->db->prepare("DELETE FROM " . DB_PREFIX . "leping_kuld WHERE LepID = ?");
            $query->execute([$lepid]);
        }
    }

 

Поменял! К сожалению, изменений нет. Всё также. Но и ошибок не прибавилось +)

Надіслати
Поділитися на інших сайтах


11.06.2023 в 23:11, drOC сказал:

 

по цій темі є модуль кому треба

 

 

Он убирает использование Токена?! Если да, это было бы круто - этот токен, меня прямо-таки убивает. Хотя на сайте планируется много личных данных. Будет ли безопасно без него?!

Надіслати
Поділитися на інших сайтах


В 11.06.2023 в 23:14, Yurasic сказав:

Он убирает использование Токена?! Если да, это было бы круто - этот токен, меня прямо-таки убивает. Хотя на сайте планируется много личных данных. Будет ли безопасно без него?!

 

так, токен зберігається в cookies - інші модулі передають його в штатному режимі (тобто все працює, API, ajax і тд)

 

напишіть мені в особисті повідомлення - я вам зроблю за 5 хвилин або увімкніть вивід помилок на екран і скажіть адресу сайту.

Надіслати
Поділитися на інших сайтах

11.06.2023 в 23:15, drOC сказал:

Кеш модифікацій скидали?

Да!

 

Может у Вас есть вариант кода попроще?!

 

Задача, чтобы он при нажатии на кнопку кидал в модель переменную  lepid и удалял строку с базы. Имя столбца LepID?

Надіслати
Поділитися на інших сайтах


Це зрозуміло,

 

у вас там помилка в коді була, якщо змін немає то треба глянути по ФТП /storage/modification/... шлях до Modelcommonlepingudlepingud

 

якщо кеш файлу є то треба глянути чи записані зміни, може у вас ще якийсь модуль кешування/компіляції,

короче це простіше дивитись по дампам бо візуально не бачу

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.