Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Update nieznanej ilosci rekordów
Forum PHP.pl > Forum > Przedszkole
kosma
Siedzę i dumam nad problemem i lipa, a rozwiązania nie znalazłem czego powodem może być błędnie zadane zapytanie. Zobrazuje problem na przykładzie:

Kod
$dodaj=mysql_query("UPDATE xxx SET plik1='$plik1', plik2='$plik2', plik3='$plik3', plik4='$plik4' WHERE login='$login' ");


W formularzu mam cztery pola wyboru do wysyłki plików, pliki wgrywają się na serwer zaś w bazie ich nazwy i działa to jak należy poza aktualizacją rekordów pustymi wpisami, gdyż przy wysyłce jednego pliku i przy zapytaniu jak wyżej, aktualizują się wszystkie 4 rekordy, tj. jeden o nazwę wysłanego pliku, pozostałe trzy o puste wartości.
Mógłbym wystosować 4 zapytania UPDATE z warunkiem i aktualizacją jedynie jednego rekordu gdy warunek wysyłki tegoż jednego pliku spełniony ale czy nie można tego zrobić w jednym zapytaniu do bazy?
Sky_walker
musisz dynamicznie formułować zapytanie - czyli dodawaj plik1='$plik1' w SET tylko jeśli plik1 został przesłany.
kosma
Kiepska sprawa gdyż chcę aby był wybór czy plik wgramy pod pozycję 1, 2, 3 czy też 4 jak i również umożliwić wysyłkę kilku plików jednocześnie np. o numerach 2 i 4.
Czyżby nie było innego sposobu i muszę 4 razy wystosować zapytanie?
Sky_walker
  1. <?php
  2. if ($plik1<>""){ $zapytanie .= "plik1='$plik1', ";}
  3. if ($plik2<>""){ $zapytanie .= "plik2='$plik2', ";}
  4. if ($plik3<>""){ $zapytanie .= "plik3='$plik3', ";}
  5. if ($plik4<>""){ $zapytanie .= "plik4='$plik4', ";}
  6.  
  7. $dodaj=mysql_query("UPDATE xxx SET $zapytanie WHERE login='$login' ");
  8. ?>


jako zadanie domowe - musisz pozbyc sie przecinka po ostatnim fragmencie zapytania.
ale w każdym razie - to jest to o co mi chodziło smile.gif
kosma
Poradziłem sobie w mało elegancki sposób
Kod
<?php

  if ($plik1 !="") $plik1a="plik1='$plik1',";
  if ($plik2 !="") $plik2a="plik2='$plik2',";
  if ($plik3 !="") $plik3a="plik3='$plik3',";
  if ($plik4 !="") $plik4a="plik4='$plik4',";
  $plik5a="act='1'";
  
  $dodaj=mysql_query("UPDATE xxx SET $plik1a $plik2a $plik3a $plik4a $plik5a WHERE login='$login' ");
?>


Ostatnim zapisanym rekordem będzie rekord aktywacji który nic nie zmienia, a pozwala uniknąć pętli warunków aby pozbyć się tego nieszczęśliwego przecinka. Nie jest to może najlepsze rozwiązanie ale spełnia założenie aby w jednym zapytaniu do bazy można było określić nie wiadomą ilość zapisu rekordów bez usuwania treści pozostałych rekordów.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.