@dudedude

Не работает update запрос после mysqli_fetch_assoc?

структура таблицы
5f3257f25b21c232365359.jpeg

в функции update запрос не работает после mysqli_fetch_assoc, до mysqli_fetch_assoc( ) работает, точнее, update запрос возвращает истину, но никаких изменений в таблице не происходит. 7.4 php, database MariaDB 10.3, server last openserver. функция должна просто менять state, текущему на 0, следующему на 1
функция
// $link = mysqli_connect($host, $user, $pass, $db_name);
function setNewColor($link) {
	$query = "SELECT * FROM colors";
	$result = mysqli_query($link, $query);
	for ($data = []; $row = mysqli_fetch_assoc($result); $data[] = $row);
	mysqli_free_result($result);
		for ($i=0;$i<count($data);$i++) {
			if ($data[$i]['state'] == 1) {
				//print_r($data[$i]);
				$id = $data[$i]['id'];

				$query = "UPDATE colors SET state = 0 WHERE id=$id";
				$result = mysqli_query($link, $query);
				//Если state = 1 у последнего цвета, меняем state у первого, иначе меняем state у i++ (следующего).
				if ($i == count($data)-1) {

					$id = $data[0]['id'];
					$query = "UPDATE colors SET state = 1 WHERE id = $id";
					$result = mysqli_query($link, $query);
				} else {

					$id = $data[$i++]['id'];
					$query = "UPDATE colors SET state = 1 WHERE id = $id";
					$result = mysqli_query($link, $query);
				}
				break;
			}
		}

}


такой вариант тоже не работает
function setNewColor($link) {
	$query = "SELECT * FROM colors";
	$result = mysqli_query($link, $query);
	for ($data = []; $row = mysqli_fetch_assoc($result); $data[] = $row);
	mysqli_free_result($result);
		$i;
		$id;
		for ($i=0;$i<count($data);$i++) {
			if ($data[$i]['state'] == 1) {
				//print_r($data[$i]);
				$id = $data[$i]['id'];
				break;
			}
		}
	$query = "UPDATE colors SET state = 0 WHERE id=$id";
				$result = mysqli_query($link, $query);
				//Если state = 1 у последнего цвета, меняем state у первого, иначе меняем state у i++ (следующего).
				if ($i == count($data)-1) {

					$id = $data[0]['id'];
					$query = "UPDATE colors SET state = 1 WHERE id = $id";
					$result = mysqli_query($link, $query);
				} else {

					$id = $data[$i++]['id'];
					$query = "UPDATE colors SET state = 1 WHERE id = $id";
					$result = mysqli_query($link, $query);
				}
}

  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
Spartak-2205
@Spartak-2205
Разработка и создание сайтов
$id = $data[$i++]['id'];

Это будет не у следующего, а через один => 0, 2, 4, 6 итд...

Если
$id = $data[++$i]['id'];
Будет тоже через один, но вот так уже => 1, 3, 5, 7 итд..

Если вам надо следующий то тогда так:
$id = $data[$i+1]['id'];
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Где отладка?
Написал кучу бессмысленных предложений и не написал главного.
Вопросы вида "у миня ниработаит" надо задавать вот в таком формате
Вот результат селекта:
код с селектом строки и выводом результата
Вот результат апдейта этой же самой строки:
код с апдейтом и выводом результата


И сразу, ещё на этапе написания вопроса, все станет ясно, где в твоем коде косяк
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы