Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] sprawdzenie zawartości tabeli
Forum PHP.pl > Forum > PHP
felixk
Witam, w pierwszej kolejności chcę jedynie zapytać czy się da i jeśli tak to jak możnaby to zrobić. Otóż chodzi o to, że mam wylistowany katalog, który wyświetlany jest w formie tabelki. W jednej z kolumn są checkboxy, które dają możliwość dodania tych plików do bazy danych. W tym miejscu jest problem tzn. czy da się zrobić tak aby po dodaniu odpowiednich plików te checkboxy bladły i były zaznaczone?
W zmiennej $files są zawarte wylistowane pliki. Poniższy kod generuje główną część tabelki do dodawania. Czy miałby ktoś jakiś pomysł?
  1.  
  2. for($i = 0, $c = count($files); $i < $c; $i++) {
  3. $names[] = pathinfo($files[$i], PATHINFO_FILENAME);
  4.  
  5. echo '<tr>
  6. <td><input type="checkbox" name="pliki[]" value="'.$files[$i].'" /></td>
  7. <td>'.$names[$i].'</td>';
  8. echo '</tr>';
  9. }
  10.  


Z góry dziękuję
nospor
No generując checkboxa musisz sprawdzac, czy odpowiadający mu plik jest już wrzucony czy nie i w zależności od tego robić z tym checkboxem co chcesz.
Sephirus
Przede wszystkim - da się to zrobić wink.gif

Najłatwiej jest pobrać z bazy z tabeli plików pliki które już są dodane i wrzucić do jakiejś tabeli PHP nazwy plików, które już są w bazie (nazwijmy ją $dbFiles).

Następnie wystarczy:

  1.  
  2. $dbFiles; // tablica z nazwami plików istniejącymi w bazie danych
  3.  
  4. for($i = 0, $c = count($files); $i < $c; $i++) {
  5. $names[] = pathinfo($files[$i], PATHINFO_FILENAME);
  6.  
  7. echo '<tr>
  8. <td><input type="checkbox" name="pliki[]" value="'.$files[$i].'" '.(in_array($files[$i],$dbFiles) ? 'disabled="disabled" checked="checked"' : '').'/></td>
  9. <td>'.$names[$i].'</td>';
  10. echo '</tr>';
  11. }
  12.  
felixk
Cytat(nospor @ 3.10.2012, 14:03:38 ) *
No generując checkboxa musisz sprawdzac, czy odpowiadający mu plik jest już wrzucony czy nie i w zależności od tego robić z tym checkboxem co chcesz.


Masz na myśli coś takiego:


  1. for($i = 0, $c = count($files); $i < $c; $i++) {
  2. $dodane = mysql_query("SELECT plik FROM pliki WHERE plik='$files[$i]'") or die(mysql_error());
  3. $names[] = pathinfo($files[$i], PATHINFO_FILENAME);
  4.  
  5. echo '<tr>';
  6. if($dodane == $files[$i])
  7. {
  8. <td><input type="checkbox" checked="checked" name="pliki[]" value="'.$files[$i].'" /></td>
  9. }
  10. else {<td><input type="checkbox" name="pliki[]" value="'.$files[$i].'" /></td>}
  11. <td>'.$names[$i].'</td>';
  12. echo '</tr>';
  13. }
nospor
zapomniałeś o mysql_fetch_array(). Samo mysql_query nie zwraca ci wartosci z tabeli.
felixk
Zrobiłem tak jak kolega Sephirus mi pokazał, ale teraz niby działa, ale za to generuje takie komunikaty. Nie bardzo kumam, która tablica jest pusta.

  1. for($i = 0, $c = count($files); $i < $c; $i++) {
  2. $dodane = mysql_query("SELECT plik FROM $tbl_pliki WHERE plik='$files[$i]'") or die(mysql_error());
  3. $dbfiles = mysql_fetch_array($dodane);
  4. $names[] = pathinfo($files[$i], PATHINFO_FILENAME);
  5.  
  6. echo '<tr>
  7. <td><input type="checkbox" name="pliki[]" value="'.$files[$i].'" '.(in_array($files[$i],$dbfiles) ? 'disabled="disabled" checked="checked"' : '').'/></td> //linijka 45
  8. <td>'.$names[$i].'</td>';
  9. echo '</tr>';
  10. }


Błąd:
Kod
Warning: in_array() expects parameter 2 to be array, boolean given in C:\xampp\htdocs\includes\listowanie.inc on line 45


dołożyłem:
  1. var_dump($dbfiles);
  2. echo $files[$i];


efekt:
dodane pliki do bazy:
Kod
array(2) { [0]=> string(9) "admin.php" ["plik"]=> string(9) "admin.php" }
admin.phparray(2) { [0]=> string(10) "edytor.php" ["plik"]=> string(10) "edytor.php" }
edytor.phparray(2) { [0]=> string(9) "index.php" ["plik"]=> string(9) "index.php" }


Pliki wylistowane:
Kod
index.phpbool(false)
pomoc.php
bool(false)
register.php
bool(false)
sprawdz.php
bool(false)
usermanag.php
bool(false)
wyloguj.php
bool(false)
zapomniane.php
Sephirus
Zamień

  1. $dbfiles = mysql_fetch_array($dodane);


na

  1. $dbfiles = array();
  2. while($dbfile = mysql_fetch_array($dodane))
  3. $dbfiles[]= $dbfile['plik'];


bo mysql_fetch_array() pobiera jeden rekord z bazy a nie całą tabelę rekordów.
felixk
Dziękuję smile.gif. Śmiga
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.