Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]kategorie galerii [poziom podstawowy]
Forum PHP.pl > Forum > Przedszkole
brychu
Witam. Jestem nowy zarówno na forum jak i w tematyce języka PHP. Chcę tu i tu osiedlić się na stałe.

Stworzyłem bardzo prosty panel dodawania zdjęć. Z wyświetlaniem ich w tabelce nie będę miał problemu. Problem jest inny.
Zdjęcia wrzucam na serwer do folderu "zdjecia" nadając im nazwy np. 1, 2, 3 itd.
Panel po prostu dodaje do tabeli (mysql) do kolumny "nazwa_zdjecia" wpisaną przez usera nazwę (przykładowo "1").
Zdjęcie wyświetlam w ten sposób: (na razie całkowicie mi to wystarczy)

Kod
$zapytanie = 'SELECT nazwa_zdjecia FROM galeria_zdjec';
$wynik = mysql_query($zapytanie, $polaczenie);

while ($rekord = @mysql_fetch_assoc($wynik)) {
        echo '<img src="zdjecia/'.$rekord['zdjecie'].'.jpg" width="200px" height="200px">';
}


Chciałbym pójść krok na przód i dopisać do panelu możliwość dodawania kategorii, ale nie wiem, jak wtedy w danej kategorii miałyby się wyświetlać dane zdjęcia, bez mojej ingerencji w kod. Nie chce ściągać galerii. Chcę się uczyć. Myślę już drugi dzień nad rozwiązaniem tego problemu.

Każda kategoria (stworzona z odsyłacza obrazkowego do pliku (kategoria1.php, kategoria2.php itp. i opisu) musiałaby mieć przyporządkowaną osobną tabelę mysql, ale ani plik "kategoria1.php) sam się nie utworzy a jeśli nawet po prostu user skopiuje plik i nada mu nazwę "katrgoria2.php" to plik ten nie będzie zawierał kodu wyświetlającego odpowiednie zdjęcia.

Nie wiem. Proszę mniej nakierować na rozwiązanie.

Oto mój kod dodawania zdjęcia:
Kod
if (@$_POST['dodaj']) {

    $nowe_zdjecie =($_POST['zdjecie']);
    
    // sprawdź, czy taka nazwa produktu jest już w bazie
    $zapytanie = "SELECT zdjecie FROM galeria_zdjec WHERE zdjecie='$nowe_zdjecie'";
    $produkt = mysql_query($zapytanie);

    if (mysql_num_rows($produkt) > 0)
        echo "<p>Zdjęcie o takiej nazwie już istnieje. Podaj inną nazwę.</p>";
    
    else {
        $zapytanie = "INSERT INTO galeria_zdjec (zdjecie) VALUES ('$nowe_zdjecie')";
      $wstaw = mysql_query($zapytanie);
        
        if ($wstaw)
            echo "<p>Dodano nowe zdjęcie</p>";
        else
            echo "<p>Dodanie nowego zdjęcia nie powiodło się</p>";
    }
}

?>

<p><b>Dodaj zdjęcie</b></p>
<p>Dodawane zdjęcie musi znajdować się na serwerze w folderze "zdjecia"!</p>

<!-- formularz Dodaj nowe zdjęcie -->

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
    Nazwa zdjęcia:     <input name="zdjecie" />
    <input type="submit" name="dodaj" value="Dodaj" />
    <input type="reset" value="Resetuj" />
</form>
<p />
markuz
Twój kod jest błędny ponieważ nie dodaje zdjęć tylko zapisuje ich lokalizacje w bazie danych.
Poczytaj o upload`zie w PHP.
Nazwe pliku zdjęcia twórz sobie sam za pomocą np. $name = time().(rand(0,1000)).'.jpg'); (poczytaj co oznacza time oraz rand)
Nazwe samego zdjęcia (tą którą wpisuje użytkownik) wrzucaj jako name, adres jako src.

tbl_photos
- id
- category_id
- name
- src

tbl_categories
- id
- name

Na początku do tbl_categories dodajesz przykładowe kategorie.
Następnie przy dodawaniu zdjęcia tworzysz sobie <select> w którym możemy wybrać kategorie (<option value="{id z tabeli tbl_categories}">{name z tabeli tbl_categories}</option>).
Po wrzuceniu zdjęcia na serwer zapisujesz identyfikator kategorii w tabeli wraz z nazwą zdjęcia i src.

Teraz żeby wyświetlić zdjęcia w danej kategorii tworzysz sobie plik np. kategoria.php który w parametrze GET będzie zawierał identyfikator wyświetlanej kategorii np. /kategoria.php?id=1
Potem tworzysz zapytanie które znajdzie wszystkie zdjęcia z tabeli tbl_photos gdzie category_id = $_GET['id'] (Pamiętaj żeby to ID rzutować na int - poczytaj jak to się robi).
Zapytanie powinno Ci zwrócić X rekordów i za pomocą pętli foreach sobie je wyświetlasz.

brychu
Widziałem, że jakiś nocnik (nocny marek) będzie na forum. Dzięki. Zaczynam czytać o upload. Poleciało "pomógł". ; ]

link do strony

1. Nie umiem wyświetlić wszystkich kategorii w rozwijanej liście przy dodawaniu zdjęcia.
2. Nadal nie wiem jak przy wrzucaniu zdjęcia dodać dane "id_kategorii", "name" oraz "src" do tabeli "zdjecia".


upload.php
Kod
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head></head>
<body>
<?php include ('naglowek_polaczenie.php');
$zapytanie = 'SELECT * FROM kategorie';
$wynik = mysql_query($zapytanie, $polaczenie);
$rekord = mysql_fetch_assoc($wynik);
?>

<form method="post" action="upload3.php" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="550000">

Wybierz plik który chcesz umieścić na serwerze:<br>
<select name="id_kategorii">
<option value="<?php echo $rekord['id'] ?>"><?php echo $rekord['name'] ?></option>
</select>
<input type="submit" value="Wgraj plik">
<input type="file" name="pliczek" size="40">
</body>
</html>


upload3.php
Kod
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head></head>
<body>
<?php
   $name = time().(rand(0,1000));
   move_uploaded_file($_FILES['pliczek']['tmp_name'],"foto/".$name.'.jpg');

echo 'typu pliku: ';
echo $_FILES['pliczek']['type'] . '<br>';

echo 'rozmiar: ';
echo $_FILES['pliczek']['size'] . '<br>';

echo 'nazwa: ';
echo $_FILES['pliczek']['name'] . '<br>';

echo 'nazwa tymczasowa: ';
echo $_FILES['pliczek']['tmp_name'] . '<br>';

echo 'błędy: ';
echo $_FILES['pliczek']['error'] . '<br>';
?>
</body>
</html>


tabela "kategorie"
id
name

tabela "zdjecia"
id
id_kategorii
name
src
markuz
Ad. 1

W twoim przypadku zapytanie zwraca kilka kategorii a ty wyświetlasz tylko 1. Poszukaj sobie w dokumentacji (w komentarzach) jak się dostać do wszystkich rekordów:
mysql_fetch_assoc

Ad. 2
  1. $id_kategorii = (int) $_POST['id_kategorii'];

nie masz pola (input type text) name - może warto najpierw je dodać i potem:
  1. $name = $_POST['name'];

src to nic innego jak ścieżka do pliku, jak już go wgrasz na serwer za pomocą move_uploaded_file to zapisz jego ścieżkę w twoim przypadku będzie to:
  1. $src = 'foto/'.$name.'.jpg';




brychu
Wielkie dzięki, ale mam jeszcze jeden problem. Niby już tłumaczyłeś na samym początku, ale nie rozumiem.

STRONA PANEL

Chcę, żeby po wybraniu odpowiedniej kategorii wyświetliły się wszystkie zdjęcia z danej kategorii.
Kategorię mogę wyświetlić. To nie problem. Problemem jest to, że nie wiem jak dodać parametr GET w odsyłacz oraz jakie napisać zapytanie.

Coś takiego bym kombinował, ale skąd miałbym wziąć GET['id'] i jak go później użyć.
Kod
<?php
$id_kategorii = $_GET['id'];
$zapytanie ="SELECT * FROM kategorie WHERE id=$id_kategorii";
$wynik = mysql_query($zapytanie) or die ('Błąd: ' . mysql_error());
?>


Od razu zapytam jeszcze o jedno. Gdy wyświetlam sobie tabelkę ze zdjęciami, to jak to zrobić, żeby zdjęcia wyświetlały się np. 4 w rzędzie a nie każde jedno pod drugim? Napisałem zwykłą tabelkę no i wyświetla tak jak się spodziewać można, a chciałbym, żeby było inaczej.
Kod
<table>
<?php
while ($rekord = mysql_fetch_assoc($zdjecia)) {
?>
    <tr>
            <td><?php echo $rekord['id']; ?></td>
            <td><?php echo $rekord['zdjecie']?></td>
    </tr>
<?php
}
?>
<table>
markuz
Ad. 1

$_GET['id'] to parametr GET przekazywany w linku np. kategoria.php?id=1
Wtedy gdy:
$id = (int) $_GET['id'];
To $id = 1;

Tworzysz linki tam gdzie wyświetlasz kategorie dodając na końcu ?id={ID KATEGORII}

Co do zapytania nie szukasz kategorii tylko zdjęć a więc - SELECT * FROM zdjecia WHERE kategoria_id=$id_kategorii"

Ad. 2

To zwykły HTML/CSS - Poczytaj jakiś kurs i dopiero zadawaj pytania.
brychu
Działa już mi wszystko. Serdeczne dzięki! Daje Ci 3 x "pomógł".
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.