Problem z nadpisywaniem obrazkow w bazie.

0
  1. Mam forma + 3 obrazki z POSTa.
  2. Wszystko ladnie mi sie dodaje, jest nowy rekord.
  3. Ale kiedy robie EDIT to wymazuja mi sie wszystkie obrazki.

Jak zrobic tak, ze kiedy zrobie upload tylko 2 giego, to to 1 i 3 zostana takie jakie juz sa w... folderze.

(W bazie mam sama nazwe pliku.)

Uprzejmie prosze o wskazowki.

Serdecznie dziekuje.

Kuba

3

Jak nie wstawisz kodu, który masz to raczej nikt nie zgadnie, co jest Twoim problemem.
Pewnie masz jakiś błąd w zapytaniu robiącym edit.

Poza tym opisz trochę dokładniej całą sytuację, bo na razie to ten post powinien polecieć do kosza z adnotacją "szczątkowy opis problemu".

0
<?
session_start();
?>

<html lang="en">
<title>EditShopSave</title>
<meta http-equiv="refresh" content="2; url = http://Prada.blog/panel.php">

<?

// ODBIERAMY Z SESJE

$ShopID = $_SESSION["ShopID"];
$AgentID = $_SESSION["AgentID"];

// BAZA DANYCH

include("DatabaseConnect.php");

// ODBIERAMY ZMIENNE

$Name = $_POST["Name"];
$City = $_POST["City"];
$Country = $_POST["Country"];
$Phone = $_POST["Phone"];
$Email = $_POST["Email"];
$Website = $_POST["Website"];




// OBRAZEK 1

if($_FILES['Photo1']['error'] == 0)
{
$zapis = move_uploaded_file($_FILES['Photo1']['tmp_name'], $_SERVER[DOCUMENT_ROOT].'/img/'.basename($_FILES['Photo1']['name']));
}
$Photo1 = basename($_FILES['Photo1']['name']);

if($zapis) {

// JESLI BYL ZAPIS TO ROBIMY UPLOAD POJEDYNCZEGO OBRAZKA W OSOBNEJ INSTRUKCJI

$data = [
'photo1FileName' => $Photo1,
];
$sql = "UPDATE Shops SET Photo1FileName = :photo1FileName WHERE
ShopID = :shopid AND WhoDid = :whodid";

$stmt = $pdo->prepare($sql);
$stmt->execute($data);

} // END OF IF ZAPIS




// OBRAZEK 2
if($_FILES['Photo2']['error'] == 0)
{
$zapis = move_uploaded_file($_FILES['Photo2']['tmp_name'], $_SERVER[DOCUMENT_ROOT].'/img/'.basename($_FILES['Photo2']['name']));
}
$Photo2 = basename($_FILES['Photo2']['name']);

if($zapis) {

// JESLI BYL ZAPIS TO ROBIMY UPLOAD POJEDYNCZEGO OBRAZKA W OSOBNEJ INSTRUKCJI

$data = [
'photo2FileName' => $Photo2,
];
$sql = "UPDATE Shops SET Photo2FileName = :photo2FileName WHERE
ShopID = :shopid AND WhoDid = :whodid";

$stmt = $pdo->prepare($sql);
$stmt->execute($data);

} // END OF IF ZAPIS




// OBRAZEK 3
if($_FILES['Photo3']['error'] == 0)
{
$zapis = move_uploaded_file($_FILES['Photo3']['tmp_name'], $_SERVER[DOCUMENT_ROOT].'/img/'.basename($_FILES['Photo3']['name']));
}
$Photo3 = basename($_FILES['Photo3']['name']);

if($zapis) {

// JESLI BYL ZAPIS TO ROBIMY UPLOAD POJEDYNCZEGO OBRAZKA W OSOBNEJ INSTRUKCJI

$data = [
'photo3FileName' => $Photo3,
];
$sql = "UPDATE Shops SET Photo3FileName = :photo3FileName WHERE
ShopID = :shopid AND WhoDid = :whodid";

$stmt = $pdo->prepare($sql);
$stmt->execute($data);

} // END OF IF ZAPIS

// TEST DLA PRODUKTU

// echo " ShopID: $ShopID<br> AgentID: $AgentID<br> Name: $Name<br> City: $City<br> Country: $Country<br> Phone: $Phone<br> Email: $Email<br> Website: $Website<br>$Photo1<br> $Photo2<br> $Photo3";


// DODAJEMY DO BAZY

$data = [
'shopid' => $ShopID,
'whodid' => $AgentID,
'name' => $Name,
'city' => $City,
'country' => $Country,
'phone' => $Phone,
'email' => $Email,
'website' => $Website

];

$sql = "UPDATE Shops SET Name = :name, City = :city, Country = :country, Phone = :phone, Email = :email, Website = :website WHERE
ShopID = :shopid AND WhoDid = :whodid";

$stmt = $pdo->prepare($sql);
$stmt->execute($data);
echo "Shop updated...";

// JAKIS TAM NIBY ERROR HANDLING

if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($pdo->errorInfo());
}



?>
1

Po pierwsze - czym są zmienne ShopID = :shopid AND WhoDid = :whodid";?

A po drugie - sprawdź w bazie, czy po aktualizacji wszystkie dane są tracone, czy raczej wszystkie wpisane pozycje dostają wartość ostatnio aktualizowanego zdjęcia.

1

Jak będziesz mieć 100 obrazków, to zrobisz 100 kolumn? Bez sensu. Zrób se dodatkową tabelkę z danymi dla konkretnego zdjęcia: id shop_id photo_path ...

I co rozumiesz przez "wymazanie"?

0

Dobra. Pomoge Wam mi pomoc.

Wyobrazcie sobie to.

Jeden form mi wstawia 10 zdjec.

A potem drugi form mi dalej daje mozliwosc edyci tych zdjec. Na zasadzie w pierwszem zapisie dodalem od 1 do 5. A w drugim zmienilem 4 i 5 i dopisalem 6ste.

W chwili obecnej moj skrypt dziala tak ze, w drugim zapisie 1, 2 i 3 by zniknely.

Prosze o podpowiedz w jaki logiczny sposob mam rozwiazac UPDATE skoro za 1 razem byl INSERT.

Dlaczego zniknely mi te 1 2 i 3?

Czy to za trudne za bardzo indywidualne zagadnienie? Kazda sensowna podpowiedz bedzie duzo warta.

Nie, nie bede robil tabelki opisujacej osobno kazde zdjecie. Do jednego rekordu przypisuje max 5 plikow.

:-) Dziekuje.

2

@Kubutek: Kod masz cały do napisania od nowa. Nie baw się w ten sposób jak pokazałeś. Pierwsza rzecz jaka mi się nasunęła, pierwszy IF ze zmienną $zapis - jeżeli jest TRUE to zawsze będzie się wykonywała reszta SQL'i.

2

No ale z tego co widzę, to nie zerujesz zmiennej $zapis. Więc w niektórych przypadkach jak update robisz dla jednego obrazka, to pozostałe dostaną pewnie null.

W ogóle weź to przerób na jakąś pętlę chociaż, żeby nie duplikować kodu, bo teraz to tragedia.

0

Mam pytanie:

<table>
<tr>
<td>Photo1:</td><td><input type="file" name="Photo1" id="Photo1" size="20"></td>
</tr><tr>
<td>Photo2:</td><td><input type="file" name="Photo2" id="Photo2" size="20"></td>
</tr><tr>
<td>Photo3:</td><td><input type="file" name="Photo3" id="Photo3" size="20"></td>
</tr>

Jak pozostawie puste te pola w formie, to co sie wysle na nastepna strone? NULL czy zmienne "" (puste)?

Przerobilem troche kodzik. Teraz w ogole sie nie uruchamia i szukam buga. Pomozecie?

<?
session_start();
?>

<html lang="en">
<title>EditProductSave</title>
<meta http-equiv="refresh" content="2; url = http://Prada.blog/panel.php">

<?

// ODBIERAMY Z SESJE

$ProductID = $_SESSION["ProductID"];
$AgentID = $_SESSION["AgentID"];

// BAZA DANYCH

include("DatabaseConnect.php");

// ODBIERAMY ZMIENNE

$Category = $_POST["Category"];
$Name = $_POST["Name"];
$Description = $_POST["Description"];
$Price = $_POST["Price"];


// OBRAZEK 1

if($_FILES['Photo1']['error'] == 0)
{
$zapis = move_uploaded_file($_FILES['Photo1']['tmp_name'], $_SERVER[DOCUMENT_ROOT].'/img/'.basename($_FILES['Photo1']['name']));
}
$Photo1 = basename($_FILES['Photo1']['name']);


// OBRAZEK 2


if($_FILES['Photo2']['error'] == 0)
{
$zapis = move_uploaded_file($_FILES['Photo2']['tmp_name'], $_SERVER[DOCUMENT_ROOT].'/img/'.basename($_FILES['Photo2']['name']));
}
$Photo2 = basename($_FILES['Photo2']['name']);

// OBRAZEK 3

if($_FILES['Photo3']['error'] == 0)
{
$zapis = move_uploaded_file($_FILES['Photo3']['tmp_name'], $_SERVER[DOCUMENT_ROOT].'/img/'.basename($_FILES['Photo3']['name']));
}
$Photo3 = basename($_FILES['Photo3']['name']);


// OBRAZEK 4

if($_FILES['Photo4']['error'] == 0)
{
$zapis =
move_uploaded_file($_FILES['Photo4']['tmp_name'], $_SERVER[DOCUMENT_ROOT].'/shop/img/'.basename($_FILES['Photo4']['name']));
}
$Photo4 = basename($_FILES['Photo4']['name']);


// OBRAZEK 5

if($_FILES['Photo5']['error'] == 0)
{
$zapis = move_uploaded_file($_FILES['Photo5']['tmp_name'], $_SERVER[DOCUMENT_ROOT].'/img/'.basename($_FILES['Photo5']['name']));
}
$Photo5 = basename($_FILES['Photo5']['name']);



// TEST

// echo " AgentID: $AgentID<br> ProductID: $ProductID<br> Category: $Category<br> Name: $Name<br> Description: $Description<br> Price: $Price<br> $Photo1<br> $Photo2<br> $Photo3<br> $Photo4<br> $Photo5";


// DODAJEMY DO BAZY

$data = [
'productid' => $ProductID,
'category' => $Category,
'name' => $Name,
'description' => $Description,
'whodid' => $AgentID,
'price' => $Price,
'photo1FileName' => $Photo1,
'photo2FileName' => $Photo2,
'photo3FileName' => $Photo3,
'photo4FileName' => $Photo4,
'photo5FileName' => $Photo5,
];

$sql = "UPDATE Products SET Category = :category, Name = :name, Description = :description, Price = :price, Photo1FileName = :photo1FileName, Photo2FileName = :photo2FileName, Photo3FileName = :photo3FileName, Photo4FileName = :photo4FileName, Photo5FileName = :photo5FileName WHERE
ProductID = :productid AND WhoDid = :whodid";

$stmt = $pdo->prepare($sql);
$stmt->execute($data);
echo "Product updated...";

// JAKIS TAM NIBY ERROR HANDLING

if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($pdo->errorInfo());
}



?>
0
<?
session_start();
?>

<html lang="en">
<title>EditShopSave</title>
<meta http-equiv="refresh" content="5; url = http://Prada.blog/panel.php">

<?

// ODBIERAMY Z SESJE

$ShopID = $_SESSION["ShopID"];
$AgentID = $_SESSION["AgentID"];

// BAZA DANYCH

include("DatabaseConnect.php");

// ODBIERAMY ZMIENNE

$Name = $_POST["Name"];
$City = $_POST["City"];
$Country = $_POST["Country"];
$Phone = $_POST["Phone"];
$Email = $_POST["Email"];
$Website = $_POST["Website"];



// ODBIERAMY EWENTUALNE NAZWY JUZ POPRZEDNIO ZAPISANYCH PLIKOW

$data = [
'shopid' => $ShopID
];

$sql = "SELECT * FROM Shops WHERE ShopID = :shopid AND WhoDid = :whodid";

$stmt = $pdo->prepare($sql);
$stmt->execute($data);


// NADAJEMY WYJSCIOWE SHOPY

WHILE ($shop = $stmt->fetch()) {

$Photo1 = $shop['Photo1FileName'];
$Photo2 = $shop['Photo2FileName'];
$Photo3 = $shop['Photo3FileName'];

}



// OBRAZEK 1

if($_FILES['Photo1']['error'] == 0)
{
$zapis1 = move_uploaded_file($_FILES['Photo1']['tmp_name'], $_SERVER[DOCUMENT_ROOT].'/img/'.basename($_FILES['Photo1']['name']));
}
if($zapis1) {
$Photo1 = basename($_FILES['Photo1']['name']);
}

// OBRAZEK 2
if($_FILES['Photo2']['error'] == 0)
{
$zapis2 = move_uploaded_file($_FILES['Photo2']['tmp_name'], $_SERVER[DOCUMENT_ROOT].'/img/'.basename($_FILES['Photo2']['name']));
}
if($zapis2) {
$Photo2 = basename($_FILES['Photo2']['name']);
}

// OBRAZEK 3
if($_FILES['Photo3']['error'] == 0)
{
$zapis3 = move_uploaded_file($_FILES['Photo3']['tmp_name'], $_SERVER[DOCUMENT_ROOT].'/img/'.basename($_FILES['Photo3']['name']));
}
if($zapis3) {
$Photo3 = basename($_FILES['Photo3']['name']);
}


// TEST DLA SHOP

echo " ShopID: $ShopID<br> AgentID: $AgentID<br> Name: $Name<br> City: $City<br> Country: $Country<br> Phone: $Phone<br> Email: $Email<br> Website: $Website<br>$Photo1<br> $Photo2<br> $Photo3";


// DODAJEMY DO BAZY

$data = [
'shopid' => $ShopID,
'whodid' => $AgentID,
'name' => $Name,
'city' => $City,
'country' => $Country,
'phone' => $Phone,
'email' => $Email,
'website' => $Website,
'photo1' => $Photo1,
'photo2' => $Photo2,
'photo3' => $Photo3
];

$sql = "UPDATE Shops SET Name = :name, City = :city, Country = :country, Phone = :phone, Email = :email, Website = :website, Photo1FileName = :photo1,
Photo2FileName = :photo2,
Photo3FileName = :photo3 WHERE
ShopID = :shopid AND WhoDid = :whodid";

$stmt = $pdo->prepare($sql);
$stmt->execute($data);
echo "Shop updated...";

// JAKIS TAM NIBY ERROR HANDLING

if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($pdo->errorInfo());
}



?>
1

Jezu... Weź usuń tą duplikację kodu... Masz ten sam kod zduplikowany 5 razy. Weź wrzuć to do funkcji i uruchamiaj dla różnych argumentów (przyjmujących wartość od 1 do 5).

Kiedy się nie uruchamia? Włącz se error reporting: https://www.php.net/manual/en/function.error-reporting.php

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