Emchik
@Emchik
Что-то прикольное сделать могу

Как удалить нужную запись из БД?

Использую библиотеку RedBeanPHP.

Есть код вывода записей:

<?php 
						$videos = R::findAll( 'videos' );
						 foreach( $videos as $videos ) : 
					?>
						<div class="col-md-4 col-sm-6 sz-video">
							<a class="popup-youtube" href="https://www.youtube.com/watch?v=">
								<div class="vidos embed-responsive embed-responsive-16by9">
									<span class="overlay"><ion-icon name="play" class="icon-play"></ion-icon></span>
									<div class="img-vid" style="background-image: url(http://trk-odi-front-dist.loc/img/background/cover_crop_db5170b3d1cbd874.jpg)"></div>
								</div>
								<h3><?php echo $videos->title; ?></h3>
								<button name="delete">Удалить</button>
						</a>
						</div>
					<?php endforeach; delete_video();?>


И вот такая функция удаления:

function delete_video()
{
	$data = $_POST;
	if( isset($data['delete']) )
	{
                $ids = R::getAssoc('SELECT id FROM videos');
		$videos = R::find( 'videos', 'id = ?', $ids );
		R::trash( $videos );
	}
}


Единственное, чего я добился разными вариациями, так это удаления всех записей разом. Бесит уже. HELP!
  • Вопрос задан
  • 645 просмотров
Пригласить эксперта
Ответы на вопрос 3
402d
@402d
начинал с бейсика на УКНЦ в 1988
а где ид видео ? Вы выбираете всех. логично что все удаляются.
Ответ написан
Комментировать
php10
@php10
Разработчик на PHP
У вас вот здесь:
$ids = R::getAssoc('SELECT id FROM videos');

Происходит выборка всех идентификаторов! Скорее всего у вас нет понимания того, что вы пишите. Ведь затем:
$videos = R::find( 'videos', 'id = ?', $ids );
    R::trash( $videos );


Вы удаляете все видео.
Вам первый запрос нужно переписать с учетом какого-то условия WHERE, например:
$ids = R::getAssoc('SELECT id FROM videos WHERE id = ?');


А почему бы просто не сделать удаление одним SQL запросом?
DELETE FROM videos WHERE id = ?
Ответ написан
@alexalexes
Если заняться изучением основ SQL, то можно понять, что в данной ситуации самым оптимальным решением будет - выполнить запрос с параметром:
DELETE FROM videos WHERE id = ?
Естественно, на странице браузера надо обеспечить, чтобы при нажатии кнопки "Удалить" серверу передавался id удаляемой записи, помимо того, какое действие мы хотим совершить.
Серверный скрипт, также должен принимать не только параметр вида действия (delete), но параметр id, на какую запись необходимо направить действие. Далее, структура SQL-запроса должна иметь в себе возможность подставить параметр.
PS:
$ids = R::getAssoc('SELECT id FROM videos');
    $videos = R::find( 'videos', 'id = ?', $ids );

Самое не оптимальное решение - выгребать все записи из таблицы, а потом на стороне серверного приложения искать ту единственную, которая удовлетворяет условию. Эта медвежья услуга нагружает тракт обмена данных между веб-сервером и СУБД-сервером.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы