[JS] Działanie skryptu PHP(wysyłanie plików na serwer)

0

Witam wszystkich ponownie :)

Otóż mam problem nie koniecznie ze skryptem, co z pomysłem jak go napisać. Chodzi o takie coś:

W panelu administratora mam funkcje dodawania do oferty produktów. Więc tak: Wchodzę w ten plik i chcę dodać doniczkę. Wpisuje nazwę, kategorie i teraz mam problem. Chodzi o to, że jedna doniczka może być w kilku kolorach. Przy wyświetlaniu danej doniczki chciałbym zawrzeć wszystkie kolory. Np. dana doniczka jest w 5 kolorach. No to dodaje obrazek doniczki 5 razy: w czerwonym, żółtym, niebieskim, różowym i zielonym. I problem jest w tym skąd skrypt ma wiedzieć ile ma wyświetlić pól input type="file"? Raz przecież będzie doniczka w 5 kolorach, a raz w 35.

Wiem, że trochę to zakręciłem, ale prościej nie potrafię.

Proszę o pomoc :)
Z góry dziękuje :)

Pozdrawiam,
nansss

PS. Jest jeszcze jeden problem. Przy wyświetlania chciałbym jeszcze dać takie kolorowe małe kółka(w kolorze danej doniczki) i po kliknięciu w dane kółko np. żółte w miejscu domyślnej doniczki pojawi się żółta doniczka, później gdy kliknę w niebieskie kółko w miejscu żółtej doniczki pojawi się niebieska itd...

0

możesz na przykład wrzucać po jednej, albo możesz dynamicznie (javascript) dodawać sobie kolejne inputy do strony

0

Właśnie maiłem na myśli dynamicznie coś jak jest na imageshack.us

0

nie zauważyłem PSa w pytaniu, więc odpowiedź na obydwa pytania javascriptem ;D

a z czym jest problem, bo nie za bardzo rozumiem?

0

Dodaj przycisk "wrzuć dodatkowy obrazek" który utworzy dynamicznie dodatkowego inputa...

0

Problem jest z JS. Nie mam pojęcia jak się za to zabrać. Trochę umiem JS, ale nie na tyle żeby poradzić sobie z tym samemu.

0

Mam taki mały skrypt, lecz problem jest w tym, że

Po pierwsze kolejne pole input type file pokazuje mi się pod przyciskiem dodaj kolejne zdjęcie

Po drugie po kliknięciu w przycisk dodaj kolejne zdjęcie pokazuje się ale nagle strona się odświeża to nowe pole znika, a zawartość tego pierwszego co jest na sztywno się czyści. Po prostu strona się przeładowywuje, a ja tego nie chcę w danym momencie

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function() 
{
	$('button').click(function() 
	{
		var ilosc=$('input[type=file]').size();
		var ilosc=ilosc+1;
		$(this).after('<br /><input type="file" name="produkt'+ilosc+'"/>'); 
	});
});
</script> 
<div align="center"><br /><br /><form method="post" action="#">
<input type="file" name="produkt1"/><br />
<button>Dodaj kolejny obrazek</button><br /><br />
<input type="submit" /><input type="reset" />
</form></div>
0

Nie używaj:
<input type="file" name="produkt1"/>
Wykorzystaj tablice.
<input type="file" name="produkt[]"/>
Takich pól z nazwą "produkt[]" (nawias kwadratowy oznacza tablicę) możesz se wstawić ile chcesz, a potem z $_FILE będzie można to obsłużyć.

0

Dobra return false; zablokował odświeżanie. Dobra. Napisałem teraz do tego usuwanie i wszystko działa, tylko pytanie teraz jak tym zarządzać przez PHP? :P

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function() 
{
    $('button').click(function() 
    {
        var ilosc=$('input[type=file]').size();
        var ilosc=ilosc+1;
        $(this).after('<label><br />Doniczka: <input type="file" name="produkt['+ilosc+']" />Kolor: <input type="file" name="kolor['+ilosc+']" /><a href="#">X</a></label>'); 
        return false;
    });
	$('a').live('click', function()
	{
		$(this).parent('label').remove();
    });
});
</script> 
<?php
echo '<div align="center"><br /><br /><label><form action="index.php?page=cpadmin_oferta_dodaj" enctype="multipart/form-data" method="post">
<button>Dodaj kolejny obrazek</button><br />
Doniczka: <input type="file" name="produkt[]"/> Kolor: <input type="file" name="kolor[]"/><br /><br />
<input name="dodaj" type="submit" value="Dodaj">
<input name="wyczysc" type="reset" value="Wyczyść">
</form></label></div>';
?>
0
var_dump($_FILES);

A dalej powinieneś dojść do tego co i gdzie.

0

Po kolejnych przeróbkach, myślę że z jQuery już wystarczy problem został głównie z PHP.

Otóż otrzymuje błąd w liniach:

$ext1 = substr( $plik_nazwa, strrpos($plik_nazwa, '.' ) +1 );
		if(is_uploaded_file($plik_tmp))

są to błędy treści:

Notice: Array to string conversion in cpadmin_oferta_dodaj.php on line 44

Notice: Array to string conversion in cpadmin_oferta_dodaj.php on line 44

Notice: Array to string conversion in cpadmin_oferta_dodaj.php on line 45

Mój kod:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function() 
{
    $('a.add').click(function() 
    {
		var ilosc=$('input[type=file]').size();
        $(this).after('<label><br />Doniczka: <input type="file" name="produkt['+ilosc+']" />Kolor: <input type="file" name="kolor['+ilosc+']" /><a href="#del" class="del">X</a></label>'); 
        return false;
    });
	$('a.del').live('click', function()
	{
		$(this).parent('label').remove();
    });
});
</script> 
<?php
if($_SESSION['access']<'1500100900' or !$_SESSION['login'] or !$_SESSION['access'])
{
	header('Location: index.php');
}
echo '<div align="center"><br /><br /><label><form action="index.php?page=cpadmin_oferta_dodaj" enctype="multipart/form-data" method="post">
<input type="hidden" name="send" value="1">
<br />Nazwa:<br /><input type="text" name="nazwa" value="Nazwa" /><br />
<br />Kategoria:<br /><input type="text" name="kategoria" value="Kategoria" /><br /><br /><br />
Obrazek doniczki oraz jej kolor:<br />
<a href="#add" class="add">Dodaj kolejny obrazek</a><br />
Doniczka: <input type="file" name="produkt[]"/><br />Kolor: <input type="file" name="kolor[]"/><br /><br />
<input name="dodaj" type="submit" value="Dodaj">
<input name="wyczysc" type="reset" value="Wyczyść">
</form></label></div>';
if(isset($_POST['dodaj']))
{
	if(empty($_POST["nazwa"]) or empty($_POST["kategoria"]) and isset($_POST['nazwa']))
	{
		echo '<div align="center">Nie wypełniono wszystkich pól.<br /></div>';
	}
	else
	{
		$plik_tmp = $_FILES['produkt']['tmp_name'];
		$plik_nazwa = $_FILES['produkt']['name'];
		$plik_rozmiar = $_FILES['produkt']['size'];
		$plik_type = $_FILES['produkt']['type'];
		$ext1 = substr( $plik_nazwa, strrpos($plik_nazwa, '.' ) +1 );
		if(is_uploaded_file($plik_tmp)) 
		{
			if(($ext1 == 'zip') || ($ext1 == 'ZIP') || ($ext1 == 'rar') || ($ext1 == 'RAR') || ($ext1 == 'pdf') || ($ext1 == 'PDF') || ($ext1 == 'xlsx') || ($ext1 == 'XLSX'))
			{
				move_uploaded_file($plik_tmp, "pliki/$plik_nazwa");
				echo '<div align="center">Plik: <strong>'.$plik_nazwa.'</strong> o rozmiarze 
				<strong>'.$plik_rozmiar.' bajtów</strong> został przesłany na serwer!<br /><br /></div>';
				$zapytanie = "INSERT INTO `offer` (`nazwa`, `adres`) VALUES ('".$nazwa."', 'pliki/".$plik_nazwa."')";
				$idzapytania = mysql_query($zapytanie);
			}
			else
			{
				echo '<div align="center"><font color="red">Zły format pliku!</font></div><br />';
			}
		}
	}
	if($_POST['send'])
	{
		if(isset($idzapytania))
		{
			if($idzapytania)
			{
				echo '<div align="center"><font color="green"><b>Plik został dodany.</b></font></div><br />';
			}
			else
			{
				echo '<div style="text-align:center;"><font color="red"><b>Nie udało się dodać pliku. Proszę spróbować za jakiś czas!</b></font></div><br />';
			}
		}
	}
}
?>

Proszę o pomoc, bo w google kiepsko z tym tematem :)

0

Albowiem używasz tablic... Pisałem ci, walnij var_dump($_FILE) i zobaczysz jak wygląda struktura tego po użyciu tablic.

Zgaduje że po prostu powinieneś użyć:

                $plik_tmp = $_FILES['produkt']['tmp_name'][0];
                $plik_nazwa = $_FILES['produkt']['name'][0];
                $plik_rozmiar = $_FILES['produkt']['size'][0];
                $plik_type = $_FILES['produkt']['type'][0];

Gdzie [0] oznacza indeks tablicy - w końcu robisz upload z wieloma polami file, więc po prostu trzeba to puścić w pętli.

0

Witam. Potrzebuje w tym skrypcie przesłać wartość zmiennej JavaScript do PHP. Jak to można zrobić?

0
 <input type="hidden" name="zmienna" value="tu wprowadź wartość przez js"/>
0

A tak jakoś bez przeładowania strony?

0

AJAX

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