Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Zatrzymanie zmiennej z formularza
Forum PHP.pl > Forum > Przedszkole
slawekdw
Witam

Mam prosty formularz do zarzadzania plikami, download, upload, Kasowanie) chodzi o to zeby byla możliwośc wyboru z listy katalogu do zarządzania. Niestety na zwyklej liscie to nie dziala, owszem pkazuja sie dane wybrane ale po kliknieci na plik z wyswietlonej listy skrypt wraca do pozycji sprzed wyboru katalogu
prosze o podpowiedz i pomoc jak to zrobic.

CODE
<?php

$readpath = "$kat";
$hide = array( 'resources',
'index.php',
'.htaccess',
'.htpasswd',
'.DS_Store');

error_reporting(E_ALL);
if ($_GET['download']) {
$file = str_replace('/', '', $_GET['download']);
$file = str_replace('..', '', $file);
$file = $readpath.$file;


if (file_exists($file)) {
header("Content-type: application/x-download");
header("Content-Length: ".filesize($file));
header('Content-Disposition: attachment; filename="'.$file.'"');
readfile($file);
die();
}
}
$handle = opendir($readpath);

// If deleting
if (isset($_GET['rmfile'])) {
unlink($readpath . $_GET['rmfile']);
}

// If uploading
if ($_FILES['file']) {
$success = move_uploaded_file($_FILES['file']['tmp_name'], $readpath. $_FILES['file']['name']);
}
$key=0;
while ($file = readdir($handle)) {

if ($file == "." || $file == ".." || in_array($file, $hide)) continue;

$key++;
$files[$key] = $file;
}

closedir($handle);

// ksort($files, SORT_NUMERIC);
$files = array_reverse($files);

?>

<!DOCTYPE html>
<html>

<head>


</head>

<body>

<table border="0" cellspacing="5" cellpadding="5">

<?php

for ($i=0; $i<count($files); $i++) {

$filename = $files[$i];
?>

<tr>
<td><img src="resources/zip.gif"></td>
<td><a href="managerplikow.php?download=<?php echo $filename; ?>"><?php echo $filename; ?></a></td>
<td><a href="managerplikow.php?rmfile=<?php echo $filename; ?>">Delete</a></td>
</tr>

<?php } ?>

</table>

<div id="upload">

<form method="post" action="managerplikow.php" enctype="multipart/form-data">
<p><input type="file" name="file"></p>
<p><input type="submit" value="Upload"></p>
</form>

</div>
<form method="post">
<select name="kat" >
<option value="Dane">Dane</option>
<option value="Download">Download</option>
</select>
<input type="submit" value="Zatwierdz">
</form>
</body>

</html>
darko
Jeśli dobrze zrozumiałem, to po odebraniu danych z formularza zapisz wybór użytkownika w sesji i zaznacz sobie odpowiednią pozycję na ponownie wyświetlanym formularzu-liście wyboru pliku, poczytaj o sesjach w php.
slawekdw
probowalem tak robic, ale nic mi to nie daje, ponizej fragmenty kodów:
CODE
<?php
session_start();
$_SESSION['katalog']= 'kat'
$readpath = "$katalog";
(.......)
<form method="post">
<select name="kat" >
<option value="Dane">Dane</option>
<option value="Download">Download</option>
</select>
<input type="submit" value="Zatwierdz">
</form>



Dane z formularza (post) trafiaja do sesji katalog, następnie są z niej ładowane do zmiennej $readpath, niestaty tylko na chwile, bo znow wraca do formularza
darko
może zamień

  1. $_SESSION['katalog']= 'kat'


na

  1. if(!is_null($_POST["kat"]) && $_POST["kat"] != "") {
  2. $_SESSION['katalog']= $_POST["kat"];
  3. }


poza tym dodałbym jeszcze atrybut ACTION do formularza:

  1. <!--
  2. (...)
  3. -->
  4. <form action="skrypt.php" method="post">
  5. <!--
  6. (...)
  7. -->
slawekdw
Super exclamation.gif! dzieki za pomoc
Mam jeszcze jedno pytanie, w skrypcie tym po nacisnieciu pliku jaki wyswietla sie na liscie następuje download, nie wiem dlaczego, ale plik chce sie zapisywac nie pod pierwotna nazwą tylko zawsze ma przedrostek ze scieżką z jkaiej zostaje pobrany np. home_jozek_Download_nazwapliku.txt. Kombinuje juz spporo czasu nad tym i nie potrafie znalezc bledu
darko
no tak, bo dajesz:

  1. $readpath = "$kat";


i tu jesz ścieżka, a potem jeszcze jest:

  1. $file = $readpath.$file;


Zostaw $file albo zapisuj $file jako samo $file i nie dodawaj ścieżki.

ps. na tym forum chyba jeszcze obowiązuje zasada, że jeśli Ci ktoś pomógł, to klikamy pod jego postem w przycisk pomógł smile.gif To takie punkty, które można później wymienić na stacji benzynowej na talony na papierosy smile.gif (żart)



slawekdw
Kombinowalemk juz tak, ale jak zostawie samo $file to nie dziala upload
darko
To tuż przed zapisaniem (uploadem) pliku usuń ścieżkę z nazwy:

  1. $file_to_download = str_replace($_SESSION['katalog'], "", $file);


czyli zmodyfikuj swój kod podmieniając fragment na poniższy:

  1. // If uploading
  2. if ($_FILES['file']) {
  3. $success = move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name']);
  4. }
slawekdw
Troche dziwny jest ten skrypt i ten zabieg wogole nie pomaga, skrypt poprostu przestaje dzialac jak nalezy
darko
Nie wiem... u mnie normalnie uploaduje, dokonałem zmian w dwóch istotnych miejscach

  1. // If uploading
  2. if ($_FILES['file']) {
  3. $success = move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name']);
  4. }


oraz

  1. if (file_exists($file)) {
  2. header("Content-type: application/x-download");
  3. header("Content-Length: ".filesize($file));
  4. header("Content-Disposition: attachment; filename='$file'");
  5. readfile($file);
  6. die();
  7. }
  8. }


i zapisuje się plik pod normalną nazwą bez ścieżki dostępu... także coś musisz źle robić, bo u mnie działa smile.gif
slawekdw
a sproboj kliknac na plik i go zapisac do siebie na kompa, u mnie zapisuje sie z nazwa sciezki
Upload, owszem dziala dobrze, u mnie tez, gorzej z downloadem
darko
zamień

  1. header('Content-Disposition: attachment; filename="'.$file.'"');

na

  1. header("Content-Disposition: attachment; filename=$file");


oraz

  1. // If uploading
  2. if ($_FILES['file']) {
  3. $success = move_uploaded_file($_FILES['file']['tmp_name'], $readpath. $_FILES['file']['name']);
  4. }


na
  1. // If uploading
  2. if ($_FILES['file']) {
  3. $success = move_uploaded_file($_FILES['file']['tmp_name'], str_replace(" ","_",$_FILES['file']['name']));
  4. }
slawekdw
Upload dziala dobrze, dzieje sie to z downloadem, jak klikniesz na plik z listy

Dałem rade, w dobrym miejscu szukalismy, rozwiązanie było
header('Content-Disposition: attachment; filename="' . str_replace($readpath, '', $file) . '"');
poprostu usunolem sciezke z nazwy pliku i po sprawie.
Tak jak wczoraj pisałem potrzebuje jeszcze by w nazwi pliku przyjmował mi skrypt znak &. Jest to dosc istotne poniewaz skrypt ten bedzie obslugiwal pliki jakie ma klient na swojej stronie, a nazwa scisle wiaze sie z zawartośią pliku jest to P&L

Cytat(darko @ 16.11.2009, 12:19:02 ) *
zamień

  1. header('Content-Disposition: attachment; filename="'.$file.'"');

na

  1. header("Content-Disposition: attachment; filename=$file");


oraz

  1. // If uploading
  2. if ($_FILES['file']) {
  3. $success = move_uploaded_file($_FILES['file']['tmp_name'], $readpath. $_FILES['file']['name']);
  4. }


na
  1. // If uploading
  2. if ($_FILES['file']) {
  3. $success = move_uploaded_file($_FILES['file']['tmp_name'], str_replace(" ","_",$_FILES['file']['name']));
  4. }

darko
Cytat
skrypt ten bedzie obslugiwal pliki jakie ma klient na swojej stronie


W zależności od tego, w jaki sposób chcesz obsługiwać pliki z serwerów zewnętrznych warto rozważyć curl, jednak pamiętaj, że nie będziesz mógł takiego pliku usunąć, a jedynie podejrzeć (pobrać).
slawekdw
Piszac "na swojej stronie" mialem na mysli jego serwis u mnie na serwerze
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-2024 Invision Power Services, Inc.