PHP, MYSQL UPDATE

162
06 октября 2021, 12:10

Не работает перебор значения в циклах for, foreach.

Конкретнее после удаления строки из таблицы, обновить столбец с id. Т.е. например мы имеем таблицу где в ней есть столбец id со значениями 1, 2, 3 ... послед удаления строки например 2 столбец с id принимает значения 1, 3.... Мне нужно осуществить обновление столбца id в соответствии количество строк, что бы стало id: 1, 2 ....

Логика такая удалить значение с бд и после обновить столбец с ID.

$delete = mysql_query("DELETE FROM test WHERE id='".$_GET['id']."'");
$id = mysql_query("SELECT id FROM test");
while($idCheck[] = mysql_fetch_assoc($id)) {
    #echo $idCheck["id"]."\n";
}
echo count($idCheck);
for($i = 0; $i < count($idCheck); $i++) {
    mysql_query("UPDATE test SET id=".$i);
}

получил массив со значениями в поле id он соответствует бд. Но в переборе в цикле значений в обновление бд вписывает общее значение строк после удаления . Т.е вместо 1, 2, 3 ... записывает 2, 2, 2...

Answer 1

Другой вариант тоже не работает - тут стоит включить отображение ошибок на экран, потому что исходя из "конструкции"

foreach ($idCheck as $key => $value) {
    mysql_query("UPDATE test WHERE id='".$value[$key]."'");
}

вряд-ли существует индекс $value[$key] вообще

Answer 2
$delete = mysql_query("DELETE FROM test WHERE id=".$_GET['id']);
$id = mysql_query("SELECT id FROM test");
$rows = mysql_num_rows($id);
$fields = mysql_num_fields($id);
for($i = 0; $i < $rows; $i++) {
    mysql_query("UPDATE test WHERE id = ".$i);
}
Answer 3

Если не брать во внимание в целом использование get-запроса для измеения данных, использование устаревшего расширения для работы с БД, отсутствие какой-либо проверки на валидность данных и защиты от инъекций, и самое главное непонятность, зачем это все надо, то задачу надо решать не через циклы на стороне пхп.

у вас есть цепочка идентификаторов 1 2 3 4 5. Вы удаляете 3, получаете 1 2 4 5. Далее вместо циклов по перебору нужно выполнить только один запрос на апдейт записей 4 и 5 уменьшив их на 1.

$id = $_GET['id'];
mysql_query("delete from test where id = $id");
mysql_query("update test set id = id - 1 where id > $id") ;

в своих попытках решения UPDATE test SET id=$i у вас нет условия where, так что вы данным значением обновляете всю таблицу целиком. вот и остаются значения только последней итерации цикла.

READ ALSO
Как через PHP сравнить текст и ответ от сервера и вывести указанное значение?

Как через PHP сравнить текст и ответ от сервера и вывести указанное значение?

Как через PHP сравнить текст и ответ от сервера и вывести указанное значение? Нужно, чтобы сервер сравнил переменную с отображаемым Пользуюсь...

211
Как изменить &lt;title&gt; страницы через php?

Как изменить <title> страницы через php?

есть сайт siteru, к нему установлен алиас домена krd

169
Корректировка размеров экрана

Корректировка размеров экрана

В процессе написания простой программы-рисовалки возникла проблема с работой под мое устройствоЭкран 2960х1440, но при использовании данной...

273
Java Scanner.hasNextInt() в цикле с условием. Что не так с кодом?

Java Scanner.hasNextInt() в цикле с условием. Что не так с кодом?

Начал учить JavaПоявился вопрос как реализовать проверку вводимых данных в консоль

171