@Rust56

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value ошибка?

Добрый день!
Выдаёт ошибку при записи в базу, полный код файла прикрепил в комментариях
<form class="form-horizontal" action="" method="post">
							
										<label for="" class="col-sm-2 control-label">Название меню <span>*</span></label>
										<div class="col-sm-4">
											<input type="text" class="form-control" name="menu_name" value="<?php echo $menu_name; ?>">
										</div>
									</div>
									<div class="form-group">
										<label for="" class="col-sm-2 control-label">Меню URL <span>*</span></label>
										<div class="col-sm-4">
											<input type="text" class="form-control" name="menu_url" value="<?php echo $menu_url; ?>">
										</div>
									</div>
									<div class="form-group">
										<label for="" class="col-sm-2 control-label">Родительское меню <span>*</span></label>
										<div class="col-sm-4">
											<select class="form-control select2" name="menu_parent">
												<option value="0" <?php if($menu_parent == 0){echo 'selected';} ?>>Нет род. меню</option>
												<?php
                                                $q = $pdo->prepare("SELECT * 
                                                                    FROM tbl_menu 
                                                                    ORDER BY menu_order ASC");
                                                $q->execute();
                                                $res = $q->fetchAll();
                                                foreach ($res as $row) {
                                                    if($row['menu_id'] == $menu_parent) {
                                                        $sel1 = 'selected';
                                                    } else {
                                                        $sel1 = '';
                                                    }
                                                    if($row['page_id']==0) {      
                                                        echo '<option value="'.$row['menu_id'].'" '.$sel1.'>'.$row['menu_name'].'</option>';
                                                    } else {
                                                        $r = $pdo->prepare("SELECT * 
                                                                            FROM tbl_page 
                                                                            WHERE page_id=?");
                                                        $r->execute([$row['page_id']]);
                                                        $res1 = $r->fetchAll();
                                                        foreach ($res1 as $row1) {
                                                            echo '<option value="'.$row['menu_id'].'" '.$sel1.'>'.$row1['page_name'].'</option>';
                                                        }
                                                    }
                                                }
                                                ?>
											</select>
										</div>
									</div>
									<div class="form-group">
										<label for="" class="col-sm-2 control-label">Позиция <span>*</span></label>
										<div class="col-sm-1">
											<input type="text" class="form-control" name="menu_order" value="<?php echo $menu_order; ?>">
										</div>
									</div>
									
									<div class="form-group">
										<label for="" class="col-sm-2 control-label"></label>
										<div class="col-sm-6">
											<button type="submit" class="btn btn-success pull-left" name="form_other">Обновить</button>

						</form>


запись в базу

<?php
if(isset($_POST['form_other'])) {
    $valid = 1;

    if(empty($_POST['menu_order'])) {
        $valid = 0;
        $error_message .= "Позиция меню не может быть пустой<br>";
    } else {
        if(!is_numeric($_POST['menu_order'])) {
            $valid = 0;
            $error_message .= "Позиция меню должена быть числовым значением.<br>";
        }
    }
    
    if($valid == 1) {
        $q = $pdo->prepare("UPDATE tbl_menu SET 
                    menu_type=?, 
                    page_id=?, 
                    menu_name=?,
                    menu_url=?,
                    menu_order=?,
                    menu_parent=?
        
                    WHERE menu_id=?
                ");
        $q->execute([
                    'Остальные',
                    '',
                    $_POST['menu_name'],
                    $_POST['menu_url'],
                    $_POST['menu_order'],
                    $_POST['menu_parent'],
                    $_REQUEST['id']
                ]);
        $success_message = 'Меню успешно обновлено.';
    }
}
?>

<?php
$statement = $pdo->prepare("SELECT * FROM tbl_menu WHERE menu_id=?");
$statement->execute(array($_REQUEST['id']));
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
    $menu_type = $row['menu_type'];
    $page_id = $row['page_id'];
    $menu_name = $row['menu_name'];
    $menu_url = $row['menu_url'];
    $menu_order = $row['menu_order'];
    $menu_parent = $row['menu_parent'];
}
?>


В итоге выдаёт ошибку
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'page_id' at row 1 in D:\Server\OpenServer\domains\admin\menu-edit.php:74 Stack trace: #0 D:\Server\OpenServer\domains\saturn\admin\menu-edit.php(74): PDOStatement->execute(Array) #1 {main} thrown in D:\Server\OpenServer\domains\saturn\admin\menu-edit.php on line 74
Не могу понять почему, может кто подскажет
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
У вас в форме нет элемента с name="id". Ссылка на обработчик формы тоже такого элемента не содержит. Соответственно, в $_REQUEST['id'] ничего нет.
Вообще, у вас в логах ещё и предупреждения должны быть о доступе к несуществующему элементу массива.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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