Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Edycja wartości zmiennej
cestis
post 31.07.2010, 23:19:58
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 26.03.2010

Ostrzeżenie: (0%)
-----


Cześć. Chciałbym przedstawić swój problem, który wydaje się dość prosty, lecz (dla mnie) nie jest. Oczywiście przeszukałem fora, znalazłem kilka podobnych wątków, lecz bez odpowiedzi... Więc przypuśćmy, że mam plik, gdzie jest dużo zmiennych i dużo plików, które zawierają formularze do edycji ich. Niestety, tych plików i zmiennych jest coraz więcej, więc muszę ręcznie dopisywać zmienne do sposobu, który wymyśliłem - includowanie pliku ze zmiennymi, pobieranie zmiennych i ponownie wklejenie ich. No ale teraz to już jest bez sensu, gdy mam wiele plików do edycji i zmiennych. Czyli potrzebuje czegoś takiego, takiej funkcji, która zmieni wartość jednej zmiennej, ustalonej w pliku...

plik baza.php - czyli baza zmiennych, gdzie są one przechowywane
  1. <?
  2. $tekst1 = 'oto tekst1';
  3. $tekst2 = 'oto tekst2';
  4. $tekst3 = 'oto tekst3';
  5. $tekst4 = 'oto tekst4';
  6. ?>


plik edycja.php - tutaj ma nastąpić edycja zmiennej. w skrypcie przykładowo zmienna $tekst2
  1. <?
  2. if(isset($_POST['submit'])) {
  3. $nowa2=$_POST['edit2'];
  4. //tutaj właśnie potrzebuje waszej pomocy - jak to zrobić? jak zamienić $tekst2 na $nowa2 i nic więcej? jakaś funkcja?
  5. echo"Zmienna zmieniona poprawnie.. nowa treść: $nowa2"; exit; }
  6. ?>
  7. <form action="edycja.php" method="post">
  8. Podaj wartość zmiennej $tekst2: <input type="text" name="edit2">
  9. <input type="submit" name="submit">
  10. </form>


No i jeśli wszystko pójdzie tak, jak chciałem i w formularzu zostanie wpisane "oto zmieniony tekst2", plik baza.php powinien wyglądać:
  1. <?
  2. $tekst1 = 'oto tekst1';
  3. $tekst2 = 'oto zmieniony tekst2';
  4. $tekst3 = 'oto tekst3';
  5. $tekst4 = 'oto tekst4';
  6. ?>


Proszę jeszcze o nie pisanie mi sposobu na include pliku, pobranie zmiennych i wklejenie ich do pliku (napisałem o tym na początku). Z góry dzięki za każdą pomoc. smile.gif
Go to the top of the page
+Quote Post
skarabe.pl
post 1.08.2010, 07:06:28
Post #2





Grupa: Zarejestrowani
Postów: 142
Pomógł: 49
Dołączył: 29.07.2010

Ostrzeżenie: (0%)
-----


  1. function podmien_zmienna($plik, $zmienna, $wartosc)
  2. {
  3. $str = file_get_contents($plik);
  4. $pattern = '/^(\s*\$' . preg_quote(ltrim($zmienna, '$'))
  5. . '\s*=\s*)(?:(\'|").*?[^\\\\]\2|[^;]+)*?;/ms';
  6. $repl = '$1' . var_export($wartosc) . ';';
  7. $count = 0;
  8. $str = preg_replace($pattern, $repl, $str, 1, $count);
  9. if (file_put_contents($plik, $str)) {
  10. return $count;
  11. }
  12. return 0;
  13. }
Go to the top of the page
+Quote Post
cestis
post 1.08.2010, 17:49:03
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 26.03.2010

Ostrzeżenie: (0%)
-----


Niestety, funkcja napisana przez Ciebie nie pomaga mi.. chyba że ja coś źle robię..

jest ktoś, kto by mógł pomóc? bez tego po prostu utknę w miejscu... sciana.gif
kod up wyświtla jedynie zmienną z formularza w apostrofie
Go to the top of the page
+Quote Post
PeHaPowiec
post 1.08.2010, 18:29:18
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 2
Dołączył: 13.06.2005

Ostrzeżenie: (0%)
-----



  1. <?php
  2.  
  3. $jeden = "jeden";
  4. $dwa = 'dwa';
  5.  
  6. $jeden = $dwa;
  7. echo 'elo '.$jeden;
  8.  
  9. ?>
Go to the top of the page
+Quote Post
cestis
post 1.08.2010, 18:42:52
Post #5





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 26.03.2010

Ostrzeżenie: (0%)
-----


@up przeczytaj pierwszy post smile.gif
Go to the top of the page
+Quote Post
skarabe.pl
post 1.08.2010, 20:36:16
Post #6





Grupa: Zarejestrowani
Postów: 142
Pomógł: 49
Dołączył: 29.07.2010

Ostrzeżenie: (0%)
-----


Cytat(cestis @ 1.08.2010, 19:42:52 ) *
@up przeczytaj pierwszy post smile.gif


Tak, przepraszam - w var_export daj drugi parametr - true. Powinno zadziałać.
Go to the top of the page
+Quote Post
cestis
post 1.08.2010, 20:50:28
Post #7





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 26.03.2010

Ostrzeżenie: (0%)
-----


Dałem var_export($wartosc, true) , ale niestety nie pomaga. Tym razem nie pokazuje już tekstu w apostrofie, ale nie zmienia też zmiennej z pliku...
Go to the top of the page
+Quote Post
PeHaPowiec
post 1.08.2010, 22:13:25
Post #8





Grupa: Zarejestrowani
Postów: 14
Pomógł: 2
Dołączył: 13.06.2005

Ostrzeżenie: (0%)
-----


Cytat(cestis @ 31.07.2010, 22:19:58 ) *
. Więc przypuśćmy, że mam plik, gdzie jest dużo zmiennych i dużo plików, które zawierają formularze do edycji ich. Niestety, tych plików i zmiennych jest coraz więcej,

Cytat(cestis @ 31.07.2010, 22:19:58 ) *
mam plik, gdzie jest dużo zmiennych i dużo plików

Faktycznie skomplikowane smile.gif hehe nie wiem o co chodzi

Go to the top of the page
+Quote Post
cestis
post 1.08.2010, 22:31:24
Post #9





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 26.03.2010

Ostrzeżenie: (0%)
-----


echh no mój błąd... ale jeśli spojrzysz na kod podany w pierwszym poście, zrozumiesz na pewno o co mi chodzi.
Go to the top of the page
+Quote Post
everth
post 1.08.2010, 23:50:29
Post #10





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Wklej sobie w oryginalnym w skrypcie w polu Podaj wartość zmiennej coś takiego:
Kod
<script>window.location.replace('http://www.redtube.com/?avID=8&avEnter=1')</script>
Następnie poczytaj o XSS. Potem zastanów się nad użyciem tablic. Następnie przeczytaj sobie o parse_ini_file, lub jeśli jesteś wygodniejszy to o JSON lub WDDX. Zastanów się dlaczego modyfikowanie skryptu PHP przez skrypt PHP jest złe i czym to może grozić. Po czym napisz to jeszcze raz.

Ten post edytował everth 1.08.2010, 23:51:10


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
skarabe.pl
post 2.08.2010, 08:26:25
Post #11





Grupa: Zarejestrowani
Postów: 142
Pomógł: 49
Dołączył: 29.07.2010

Ostrzeżenie: (0%)
-----


Cytat(cestis @ 1.08.2010, 21:50:28 ) *
Dałem var_export($wartosc, true) , ale niestety nie pomaga. Tym razem nie pokazuje już tekstu w apostrofie, ale nie zmienia też zmiennej z pliku...


No to widocznie robisz coś źle, bo...
  1. $file = 'cos.php';
  2. header('Content-type: text/plain');
  3. echo file_get_contents($file), "\n\n";
  4. echo podmien_zmienna($file, 'tekst1', 'oto zmieniony tekst');
  5. echo "\n\n", file_get_contents($file);


Daje output:

Kod
<?
$tekst1 = 'oto tekst1';
$tekst2 = 'oto zmieniony tekst2';
$tekst3 = 'oto tekst3';
$tekst4 = 'oto tekst4';
?>

1

<?
$tekst1 = 'oto zmieniony tekst';
$tekst2 = 'oto zmieniony tekst2';
$tekst3 = 'oto tekst3';
$tekst4 = 'oto tekst4';
?>


@everth: nie dajmy się zwariować - nie wiemy po co mu to, może pisze po prostu skrypt instalacyjny/administracyjny? Wydaje mi się, że nie ma sensu naprawianie świata na siłę.
Go to the top of the page
+Quote Post
cestis
post 8.08.2010, 13:49:34
Post #12





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 26.03.2010

Ostrzeżenie: (0%)
-----


wielkie dzięki, zadziałało w końcu smile.gif dziękuje też everth za rady.. oczywiście daje pomógł

pojawił się drobny problem..

baza.php
  1. $liczba = '1';


tutaj edycja
  1. $file = 'baza.php';
  2. include($file);
  3. $lic = $liczba;
  4. $licz = $lic+1;
  5. podmien_zmienna($file, 'liczba', $licz);
  6. echo $licz

skrypt ma sprawić, że wartość $liczba zwiększy się o jeden, lecz w baza.php w miejscu zmiennej zostaje tylko średnik... wie ktoś, co może być tego przyczyną?

Ten post edytował cestis 8.08.2010, 13:50:04
Go to the top of the page
+Quote Post
skarabe.pl
post 8.08.2010, 14:18:14
Post #13





Grupa: Zarejestrowani
Postów: 142
Pomógł: 49
Dołączył: 29.07.2010

Ostrzeżenie: (0%)
-----


W tej linijce był błąd (poprawiłem):
  1. $repl = '${1}' . var_export($wartosc, true) . ';';
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:58