Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

[php] Przenoszenie zmiennych

Zdecydowałeś się na tworzenie interaktywnych stron przy pomocy PHP? Chcesz w łatwy i szybki sposób zarządzać danymi na swojej stronie? Tutaj znajdziesz pomoc w napotkanych przy tym trudnościach.

[php] Przenoszenie zmiennych

Post 23.09.2008, 23:15:39

W jednym formularzu powiedzmu na xxx.php wpisuje zmienna. Gdy w dalszej częsci chce wyswietlisc jej wartosć poprawnie mi pokazuje ją. Natomiast gdy w yyy.php chce ja wywołac wyswietla mi sie tylko $zmienna. Co zrobic by w innym pliku widząl ta zmienna?
Ravne87
Posty: 46
Dołączył(a): 20.09.2008

Re: [php] Przenoszenie zmiennych

Post 24.09.2008, 00:11:19

Podaj treść pliku xxx.php i yyy.php, co chcesz przekazać i w jaki sposób, a także z którego pliku do którego.

Pozdrawiam
BIMAS = BioInformatics and Molecular Analysis Section
Avatar użytkownikabimas
Maciej Bimek

Posty: 5974
Dołączył(a): 22.01.2005
Lokalizacja: Poznań

Post 24.09.2008, 00:30:58

xxx.php: formularz którzy odbiera plik oraz nazwe jaka bedzie odpowiedzialan za ten plik w tabeli
Kod: Zaznacz cały

<div>
<form enctype="multipart/form-data" action="dodaj.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="5000000" />
Wskaż plik do wysłania:<input name="plik" type="file" />
Nazwa pliku na serwerze: <input type="text" name="tabela" size="43"><br>
<input type="submit" value="Wyślij dane" />

</form>
</div>


dalej znajduje sie po porstu skrypt na dodanie

yyy.php

Kod: Zaznacz cały
<?
$kat = dir($katalog);
$i=1;
while($poz = $kat->read()) {
if (preg_match("/^.+..+$/i", $poz)) {
print '<tr>
<td style="border: 2px solid black;" height="15" align="left" valign="middle">'.$i.'</td>
<td style="border: 2px solid black;" height="15" align="left" valign="middle"><a href="'.$katalog.'/'.$poz.'" target="_new">'.$poz.'</a></td> /* wyświetla nazwe pliku i jak widać robi z niej linka
, chce by zamiast tego bylo to co w formularzu NAZWA PLIKU... w pierwszym pliku wpisujemy, bez linka.*/
<td style="border: 2px solid black;" height="15" align="center" valign="middle"><input type="checkbox" name="co[]" value="'.$poz.'"></td>
</tr>';
$i++;
}
}
$kat->close();

?>


wiec xxx.php --> yyy.php
Ostatnio edytowano 24.09.2008, 01:19:24 przez Ravne87, łącznie edytowano 2 razy
Ravne87
Posty: 46
Dołączył(a): 20.09.2008

Post 24.09.2008, 01:04:41

Kod: Zaznacz cały
action="dodaj.php"

oczywiście zakładamy, że plik yyy.php nazywa się dodaj.php.
Nigdzie nie widać zmiennej $_POST['nazwa'].
Generalnie chyba słabo opisałeś swój problem.
pamiętaj error_reporting(E_ALL) to droga do sukcesu
Jeśli usunąłem Twój temat z działu WebBazar zanim napiszesz PW przeczytaj regulamin działu WB.
Kuternoga
Witold Gałka

dissolved boy

Posty: 6058
Dołączył(a): 13.07.2003
Lokalizacja: Łódź

Post 24.09.2008, 01:15:41

dodaj.php to plik pierwszy. czyli xxx. W nim tez (nieżej, nie skopiowalem) wstawilem zmienna:

Kod: Zaznacz cały
$zmienna = $_POST['tabela']


gdy posługuje sie tą zmienna w pliku yyy- chce jej uzyc w tabeli nie działa, działa natomiast w pliku w ktorym ja zdefiniowałem-czyli dodaj.php - wyswietla mi poprawnie nazwę która sie wprowadza.
Ravne87
Posty: 46
Dołączył(a): 20.09.2008

Post 24.09.2008, 01:29:01

Ja nie wiem czy ja Cię dobrze rozumiem ale jeśli wysyłasz formularz żądając aby został obsłużony przez plik a.php (co zawarte jest w action="") to nie zostanie on obsłużony przez plik b.php chyba, że włączysz plik b.php do a.php.

1. xxx.php = dodaj.php
2. w dodaj.php masz w action dodaj.php

czy włączasz plik yyy.php do pliku dodaj.php lub masz w action co innego niż piszesz?

Myślę, że najlepiej dla Ciebie abyś podał oryginalne źródła bez zbędnego maskowania nazw plików i zmiennych.
pamiętaj error_reporting(E_ALL) to droga do sukcesu
Jeśli usunąłem Twój temat z działu WebBazar zanim napiszesz PW przeczytaj regulamin działu WB.
Kuternoga
Witold Gałka

dissolved boy

Posty: 6058
Dołączył(a): 13.07.2003
Lokalizacja: Łódź

Post 24.09.2008, 01:40:56

Masz racje, z tym ze potrzebuje tego odniesienia do dodaj.php gdyż dlaje jest skrypt uploadujący..


pokaz.php - plik w ktorym jest tabelka dodajaca wiersze gdy dodawana sa pliki. Zamiast nazwy pliku chce by tabela czytala $tabelka

Kod: Zaznacz cały
Aby usunšć plik należy zaznaczyć znajdujšce się przy nim pole 'checkbox' a następnie wcisnšć przycisk 'usuń'. Na raz można usunšć jeden lub więcej plików<br><br>
<div align="center">
<form method="POST">
<input type="hidden" name="do" value="usun">
<table style="border: 2px solid black;" bgcolor="lightgray" cellpadding="8" cellspacing="5">
<tr>
<th width="30" height="5" align="center" valign="middle">Lp.</th>
<th width="180" height="5" align="center" valign="middle">Nazwa pliku</th>
<th width="40" height=1" align="center" valign="middle">Zaznacz</th>
</tr>
<?


$kat = dir($katalog);
$i=1;
while($poz = $kat->read()) {
if (preg_match("/^.+..+$/i", $poz)) {
print '<tr>
<td style="border: 2px solid black;" height="15" align="left" valign="middle">'.$i.'</td>
<td style="border: 2px solid black;" height="15" align="left" valign="middle"><a href="'.$katalog.'/'.$poz.'" target="_new">'.$poz.'</a></td>
<td style="border: 2px solid black;" height="15" align="center" valign="middle"><input type="checkbox" name="co[]" value="'.$poz.'"></td>
</tr>';
$i++;
}
}
$kat->close();

?>

</tr>
</table>
<br>
<input type="submit" value="usuń zaznaczone">
</form>
</div>



dodaj.php - czyli plik uploadujący
Kod: Zaznacz cały

<?php
echo '<?xml version="1.0" encoding="iso-8859-2"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
<title>Upload</title>
</head>
<body>

<div>
<form enctype="multipart/form-data" action="dodaj.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="5000000" />

Wskaż plik do wysłania:<input name="plik" type="file" />
Nazwa pliku na serwerze: <input type="text" name="tabelka" size="43"><br>

<input type="submit" value="Wyślij dane" />

</form>
</div>

<?php
$tabelka = $_POST ['tabelka'];

$plik_tmp = $_FILES['plik']['tmp_name'];
$plik_nazwa = $_FILES['plik']['name'];
$plik_rozmiar = $_FILES['plik']['size'];

if(is_uploaded_file($plik_tmp)) {
     move_uploaded_file($plik_tmp, "materialy/$plik_nazwa".  pathinfo($_FILES['abc']['name'], PATHINFO_EXTENSION));
    echo "Plik: <strong>$tabelka</strong> o rozmiarze
    <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
}
?>
</body>
</html>
[/b]
Ravne87
Posty: 46
Dołączył(a): 20.09.2008

Post 24.09.2008, 02:25:17

Jest mi przykro ale pomijając Twoje pytanie ja nie widzę gdzie w pliku pokaz.php wywołujesz tę zmienną - to po pierwsze.

2. Nigdzie nie widzę przekazania zmiennej "tabelka" czy też "tabela" do pliku pokaz.php - fakt wysyłasz taką ale do pliku dodaj.php

Także chyba musisz przemyśleć swój kod bo na razie nie masz podstaw do narzekania, że nie działa jak powinien.
Na przyszłość jednak zadawaj pytania bardziej wprost ;)
pamiętaj error_reporting(E_ALL) to droga do sukcesu
Jeśli usunąłem Twój temat z działu WebBazar zanim napiszesz PW przeczytaj regulamin działu WB.
Kuternoga
Witold Gałka

dissolved boy

Posty: 6058
Dołączył(a): 13.07.2003
Lokalizacja: Łódź

Post 24.09.2008, 03:07:16

ekhm.. zgadza się, chcialem zapytac JAK wysłać w takim przypadku do 2go pliku. dlatego zadałem pytanie...
Ravne87
Posty: 46
Dołączył(a): 20.09.2008

Post 24.09.2008, 13:24:58

Jeśli wywołania obu plików nie pozostają w żadnej ścisłej zależności to pozostaje Ci zapisanie zmiennej( nie analizuje po co Ci to ). Skrypt mógłby przekazać zmienną drugiemu ale skoro nie jest wywoływany to nie możesz tego osiągnąć.
Zostaje w zależności od potrzeb sesja(albo samo cookie), baza danych, plik.
Mogę zaryzykować stwierdzenie, że powinieneś zastanowić się nad bazą danych. Myślę tak ponieważ przekazujesz zmienną "tabelka" poprzez formularz do skryptu dodaj.php ale ta zmienna nie jest właściwie wykorzystywana. Faktycznie ją wyświetlasz ale później ślad po niej ginie, więc sądzę że chcesz ją zachować, jeśli tak, zrób to w bazie danych.
pamiętaj error_reporting(E_ALL) to droga do sukcesu
Jeśli usunąłem Twój temat z działu WebBazar zanim napiszesz PW przeczytaj regulamin działu WB.
Kuternoga
Witold Gałka

dissolved boy

Posty: 6058
Dołączył(a): 13.07.2003
Lokalizacja: Łódź

Post 24.09.2008, 15:55:36

Polaczyłem te 2 pliki.

Kod: Zaznacz cały
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
<title>Upload</title>
</head>
<body>

<div>
<form enctype="multipart/form-data" action="index.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="5000000" />

Wskaż plik do wysłania:<input name="plik" type="file" />
Nazwa pliku na serwerze: <input type="text" name="tabelka" size="43"><br>

<input type="submit" value="Wyślij dane" />

</form>
</div>

<?php
$tabelka = $_POST ['tabelka'];

$plik_tmp = $_FILES['plik']['tmp_name'];
$plik_nazwa = $_FILES['plik']['name'];
$plik_rozmiar = $_FILES['plik']['size'];

if(is_uploaded_file($plik_tmp)) {
     move_uploaded_file($plik_tmp, "materialy/$plik_nazwa".  pathinfo($_FILES['abc']['name'], PATHINFO_EXTENSION));
    echo "Plik: <strong>$tabelka</strong> o rozmiarze
    <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
}
?>

<div align="center">
<table style="border: 2px solid black;" bgcolor="lightgray" cellpadding="8" cellspacing="5">
<tr>
<th width="30" height="5" align="center" valign="middle">Lp.</th>
<th width="180" height="5" align="center" valign="middle">Nazwa pliku</th>
<th width="40" height=1" align="center" valign="middle">Zaznacz</th>
</tr>

<?
$tabelka = $_POST ['tabelka'];

$kat = dir(materialy);
$i=1;
while($poz = $kat->read()) {
if (preg_match("/^.+..+$/i", $poz)) {
print '<tr>
<td style="border: 2px solid black;" height="15" align="left" valign="middle">'.$i.'</td>
<td style="border: 2px solid black;" height="15" align="left" valign="middle"><a href="'.materialy.'/'.$poz.'" target="_new">'.$tabelka.'</a></td>
<td style="border: 2px solid black;" height="15" align="center" valign="middle"><input type="checkbox" name="co[]" value="'.$poz.'"></td>
</tr>';
$i++;

}
}
$kat->close();

?>

</tr>
</table>
<br>

</div>

</body>
</html>


i nawet w tej kolumnie mi wyswietla zmienną &tabelka z tym ze po kazdorazowym wpisaniu w formularzu zmienia mi dla wszysktich plikow czyli:

dodaje pierwszy plik, w formularzu nazywam go AAA , wyswietla w tabeli AAA
dodaje drugi plik, w formularzu nazywam go BBB, wyswietla mi I PIERWSZY I DRUGI PLIK Z NAZWA BBB. jak dodam 3ci z nazwa CCC to mi 3 pokazuje z ta nazwa. Czyli jesli sie nie myle to trzeba zpaisywac np do pliku wartosci tych zmiennych dla kazdej dadanej pozycji? innego wyjscia nie ma? Myslalem o uzyciu fwrite(), czy w tej sytuacji bedzie to mialo powodzneie?
Ravne87
Posty: 46
Dołączył(a): 20.09.2008

Post 24.09.2008, 16:17:01

Jak rozumiem organizujesz wgrywanie plików na serwer, chcąc jednocześnie zasłonić ich prawdziwe nazwy podawanymi w formularzu?

1. plik pokaz.php nie powinien otrzymywać żadnej zmiennej nazwy zastępcze powinien pobierać z bazy danych lub pliku.
2. plik dodaj.php powinien oprócz ulokowania pliku z zachowaniem oryginalnej nazwy zapisać w bazie/pliku informację o tym jakie istnieją nazwy zastępcze oraz jakie pliki są im przypisane. Dzięki temu plik pokaz.php nie musi nawet odwoływać się do systemu plików aby wyświetlić dane ponieważ wystarczy odczyt informacji z bazy gdzie znajdzie i nazwy zastępcze i nazwy oryginalne.

Więc masz:
plik pokaz.php
1. odczyt informacji o plikach z bazy danych
2. wypisanie tego wraz z checkbox-ami

plik dodaj.php
1. obsługa upload-u
2. Zapis informacji, które później przydadzą się w pliku pokaz.php

Czyli masz gotowy schemat i wybór: zapis informacji do pliku tekstowego lub do bazy danych. Oczywiście polecam bazę.
pamiętaj error_reporting(E_ALL) to droga do sukcesu
Jeśli usunąłem Twój temat z działu WebBazar zanim napiszesz PW przeczytaj regulamin działu WB.
Kuternoga
Witold Gałka

dissolved boy

Posty: 6058
Dołączył(a): 13.07.2003
Lokalizacja: Łódź

Post 24.09.2008, 20:38:18

Kuternoga napisał(a):Oczywiście polecam bazę.
wypadłem z wątku, ale dopowiem: jeśli to pliki tekstowe to ewentualnie trzymaj je w bazie, jeśli jakikolwiek inny plik binarny radzę przenieść to na dysk.

Pozdrawiam
BIMAS = BioInformatics and Molecular Analysis Section
Avatar użytkownikabimas
Maciej Bimek

Posty: 5974
Dołączył(a): 22.01.2005
Lokalizacja: Poznań

Post 24.09.2008, 20:53:34

bimas napisał(a):
Kuternoga napisał(a):Oczywiście polecam bazę.
wypadłem z wątku, ale dopowiem: jeśli to pliki tekstowe to ewentualnie trzymaj je w bazie, jeśli jakikolwiek inny plik binarny radzę przenieść to na dysk.

Pozdrawiam

Niestety nie o to mi chodziło, bimas ;). Miałem na myśli gromadzenie informacji o wgranych plikach w pliku tekstowym lub bazie danych. Myślę, że kolega musi się najpierw uporać z tym co ma, aby(jeśli starczy mu cierpliwości) skorzystać z takich rad jakimi chciałbyś go obdarzyć.
pamiętaj error_reporting(E_ALL) to droga do sukcesu
Jeśli usunąłem Twój temat z działu WebBazar zanim napiszesz PW przeczytaj regulamin działu WB.
Kuternoga
Witold Gałka

dissolved boy

Posty: 6058
Dołączył(a): 13.07.2003
Lokalizacja: Łódź

Post 25.09.2008, 23:56:39

Uff.. prawie się uporałem z tym co mam:)
Wybrałem opcję zapisu do pliku txt, zapis działa, kolejne opisy ładnie się ładują do baza.txt po kolei jeden pod drugim (w opcji pokaz na moim ftp maja numerki, w opcji edytuj juzsa tylko jeden pod drugim). Prosilbym o ostatnia podpowiedz ( a raczej tym razem o konkrenty kod), jak to co mam w pliku baza.txt przeniesc do tabeli, tak by to co jest w pliku txt np

opis_pierwszego_pliku
jakis opis drugiego
jeszcze jeden opis

było w tabeli (miejsce "????") i co oczywiste odpowiadalo kolejnosci dodawanych plików. Nie mam pomyslu jak podejsc do tego tematu, mam na mysli owa kolejność...

(PS przy każdym odswieżeniu dodaja mi sie puste wpisy do pliku;/..albo plik laduje sie jeszcze raz...)

Kod: Zaznacz cały
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
<title>Upload</title>
</head>
<body>


<form enctype="multipart/form-data" action="index.php" method="POST">

    </html>Wskaż plik do wysłania:<input name="plik" type="file" />

    <input type="hidden" name="MAX_FILE_SIZE" value="5000000" />

    Nazwa pliku na serwerze: <input type="text" name="pole2" size="43"><br>

    <input type="submit" value="Wyślij dane" />

</form>

<?php

$file = 'baza.txt';
$data = file_get_contents( $file );

$newText = $_POST['pole2']."\n"  . $data;

$o    = fopen( $file, "a+" );
$save = fwrite(  $o, $newText );
fclose( $o );

?>

<?php

$plik_tmp = $_FILES['plik']['tmp_name'];
$plik_nazwa = $_FILES['plik']['name'];
$plik_rozmiar = $_FILES['plik']['size'];

if(is_uploaded_file($plik_tmp)) {
     move_uploaded_file($plik_tmp, "materialy/$plik_nazwa".  pathinfo($_FILES['abc']['name'], PATHINFO_EXTENSION));
    echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
    <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
}


?>

<div align="center">
<table style="border: 2px solid black;" bgcolor="lightgray" cellpadding="8" cellspacing="5">
<tr>
<th width="30" height="5" align="center" valign="middle">Lp.</th>
<th width="180" height="5" align="center" valign="middle">Nazwa pliku</th>
<th width="40" height=1" align="center" valign="middle">Zaznacz</th>
</tr>

<?

$kat = dir(materialy);
$i=1;

while($poz = $kat->read()) {
if (preg_match("/^.+..+$/i", $poz)) {
print '<tr>
<td style="border: 2px solid black;" height="15" align="left" valign="middle">'.$i.'</td>
<td style="border: 2px solid black;" height="15" align="left" valign="middle"> ????????????</td>
<td style="border: 2px solid black;" height="15" align="center" valign="middle"><input type="checkbox" name="co[]" value="'.$poz.'"></td>
</tr>';
$i++;


}
}
$kat->close();

?>

</tr>
</table>
<br>

</div>

</body>
Ravne87
Posty: 46
Dołączył(a): 20.09.2008

Post 26.09.2008, 23:57:11

Kod: Zaznacz cały
$plk      = file('baza.txt');
$tmpcount = count($plk);
for ($i = 0; $i < $tmpcount; $i++) {
    echo $i;
    echo ' ';
    echo trim($plk[$i]);
    echo '<br />';
    echo "\n";
}



mam taki oto skrypt, spelnia swoja role poza tabla znakomicie, czy mozna go przerobic tak by wyswietlal w kolejnych wierszach (coraz nizszych komorkach tab) kolejne wpisy w baza.txt? jeśli nie, prosze o pomoc.
Ravne87
Posty: 46
Dołączył(a): 20.09.2008

Post 27.09.2008, 03:44:41

Gotowca Ci nie napiszę mogę Ci tylko pomóc.
Zapisujesz dane w postaci:
Kod: Zaznacz cały
<?
$nazwa_zastepcza.chr(15).$nazwa_oryginalna.chr(15).chr(15)
?>


a odczytujesz:
np.: file_get_contents
Kod: Zaznacz cały
<?
$rekordy = explode(chr(15).chr(15) , $to_co_odczytales );
for($i=0 ; $i<count($rekordy)-1 ; $i++  )
{
$rekord = explode(chr(15),$rekordy[$i]);
// $rekord to tablica - dalej sobie jak sądzę powinieneś poradzić.
}
?>

to taka wskazówka "z palca"
pamiętaj error_reporting(E_ALL) to droga do sukcesu
Jeśli usunąłem Twój temat z działu WebBazar zanim napiszesz PW przeczytaj regulamin działu WB.
Kuternoga
Witold Gałka

dissolved boy

Posty: 6058
Dołączył(a): 13.07.2003
Lokalizacja: Łódź

Post 28.09.2008, 00:43:13

dzieki wielkie, poszedłem po rozum do głowy, nie wiem czy moge ale wrzuce rozwiazanie, może komus sie kiedys przyda, przerobilem ten skrytp i teraz dodaje po kolei w komorkach w kolumnie opisu z formularza:

Kod: Zaznacz cały
<?php
$plk = file('baza.txt');
$tmpcount = count($plk);
echo '<table style="border: 2px solid black;">';
for ($i = 0; $i < $tmpcount; $i++) {
   echo '<tr>';
 
   echo '<td>';

   echo trim($plk[$i]);
   echo '</td></tr>';
   echo "\n";
}
echo '</table>'


?>
Ravne87
Posty: 46
Dołączył(a): 20.09.2008


Powrót do PHP i bazy danych


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 gości

Subskrypcja

Mamy 43458 zarejestrowanych użytkowników.
Najnowszy użytkownik: twistet


Nasi użytkownicy napisali:

  • 909713 wiadomości
  • w 236499 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)