Błąd przy wgrywaniu plików do bazy (BLOB)

0

Dzień dobry smile.gif
Przychodzę z kolejnym problemem z którym nie mogę sobie poradzić, prawdopodobnie jest to ogólny błąd tylko, że na starszych wersjach pewnie to "przechodziło". Dopiero się uczę dlatego proszę o nie "krzyczenie" na moje wyponicki tylko proszę o drobną pomoc smile.gif Próbowałem poprawić błąd który się wyświetla ale tylko pogarszałem sprawę. Na starszych wersjach mariaDB wszystko działało lecz na najnowszej coś idzie nie tak i wyświetla się następujący błąd:

Fatal error: Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '' for column `server100024_pliki4`.`file_base`.`id` at row 1 in /home/server100024/ftp/skb/333/panel/add.php:26 Stack trace: #0 /home/server100024/ftp/skb/333/panel/add.php(26): PDOStatement->execute() #1 {main} thrown in /home/server100024/ftp/skb/333/panel/add.php on line 26

Kod add.php:

<?php

session_start();

if (!isset($_SESSION['admin']))
{
  header('Location: ../index.php');
  exit();
}
	
require '../php/dbsoft.php';

 if(empty($_POST['user'])){

 }else{
  if($_FILES['myfile']['type'] == "application/pdf" || $_FILES['myfile']['type'] == "image/jpeg"){
    $name = $_FILES['myfile']['name'];
    $type = $_FILES['myfile']['type'];
    $user_id_form = $_POST['user'];
    $data = file_get_contents($_FILES['myfile']['tmp_name']);
    $statement = $connection->prepare("insert into file_base values ('', ?, ?, ?, ?)");
    $statement->bindParam(1, $name);
    $statement->bindParam(2, $type);
    $statement->bindParam(3, $data);
    $statement->bindParam(4, $user_id_form);
    $statement->execute();
    echo 'przeslano';
  }else{
    echo 'Nieprawidłowy format'; 
 }
}


?>

Formularz do wybrania pliku:

<?php

session_start();

if (!isset($_SESSION['admin']))
{
  header('Location: ../index.php');
  exit();
}

header("refresh: 900; url=../wyloguj");

?>

<?php

require '../php/dbsoft.php';

$sql = 'SELECT * FROM account WHERE id="'.$_SESSION['id_session'].'"';
$statement = $connection->prepare($sql);
$statement->execute();
$row = $statement->fetchAll(PDO::FETCH_OBJ);

foreach($row as $rows):
$email = $rows->email;
endforeach;

?>

<!DOCTYPE html>
<html lang="en">

<head>

  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="">
  <meta name="author" content="">

  <title>SB Admin 2 - Login</title>

</head>

<body>
<h1>Witaj, <?php echo $email; ?></h1>
<a href="../wyloguj">Wyloguj się</a>
<hr>

<?php
    
    echo $_SESSION['panel'];
    unset($_SESSION['panel']);

?>

<br><br>
<h3>DODAJ PDF</h3>

<form method="post" action="add.php" enctype="multipart/form-data">
<input name="user" type="number" placeholder="Wpisz tutaj ID UŻYTKOWNIKA">
<br><br>

<input type="text" value="1" name="CHECK" hidden>

<input type="file" name="myfile"/>
    
    <br><br>
<button TYPE="submit">DODAJ PDF</button>
</form>
<br><br><br>
<hr><hr><hr>

<p>ZNAJDŹ PDF</p>

<ol>
<?php

$sql = 'SELECT * FROM file_base';
$statement = $connection->prepare($sql);
$statement->execute();

while($row = $statement->fetch()){

?>

<li>
<a target="_blank" href="see.php?id=<?php echo $row['id']; ?>"><?php echo $row['name']; ?> /// ID UŻYTKOWNIKA <?php echo $row['user_id']; ?></a>
<br>
<a target="_blank" href="delete.php?id=<?php echo $row['id']; ?>">Usuń plik</a>
</li>

<?php

}

?>
</ol>

</body>

</html>

Chodzi o dodawanie plików .pdf .png .jpg do bazy jako BLOB. Proszę o ewentualną poprawę kodu :)

3

W pliku add.php w linii 20 masz insert bez określonych kolumn. Dopisz może nazwy kolumn, będzie łatwiej to debugować. Jak masz autoincrement na id to pomijaj w insert tą kolumnę.

2

Odpowiadaj w postach.
Nie wiem jakie masz kolumny w tej tabeli. Jak zrobisz zapytanie typu:

INSERT INTO TableName (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

To wartość bez względu na kolejność kolumn będzie na stale przypisany do określonej w zapytaniu.
Możesz oczywiście przed execute() czyli po linii 25 dodać

 var_dump($statment);
die();

i zobaczyć jak się tworzy to zapytanie. Ja unikam nie podawania kolumn w insert, bo potem coś się zmieni w kolumnach i szukasz gdzie i dlaczego.

0

Zdefiniowałem kolumny i działa. Dziwne, bo na wersji mariaDB 10.1-10.4 wszystko działało tak jak miałem wcześniej. Bardzo dużo błędów pojawiło się jak wgrałem nową wersję 10.5.5. Dziękuję bardzo za pomoc :)

0
Mateusz Jakubiec napisał(a):

Zdefiniowałem kolumny i działa. Dziwne, bo na wersji mariaDB 10.1-10.4 wszystko działało tak jak miałem wcześniej. Bardzo dużo błędów pojawiło się jak wgrałem nową wersję 10.5.5. Dziękuję bardzo za pomoc :)

Jeśli kod jest niechlujnie napisany to skutkiem tego są potem takie kwiatki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1