Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Edycja wartości zmiennej
Forum PHP.pl > Forum > Przedszkole
cestis
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
skarabe.pl
  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. }
cestis
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
PeHaPowiec

  1. <?php
  2.  
  3. $jeden = "jeden";
  4. $dwa = 'dwa';
  5.  
  6. $jeden = $dwa;
  7. echo 'elo '.$jeden;
  8.  
  9. ?>
cestis
@up przeczytaj pierwszy post smile.gif
skarabe.pl
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ć.
cestis
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...
PeHaPowiec
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

cestis
echh no mój błąd... ale jeśli spojrzysz na kod podany w pierwszym poście, zrozumiesz na pewno o co mi chodzi.
everth
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.
skarabe.pl
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łę.
cestis
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ą?
skarabe.pl
W tej linijce był błąd (poprawiłem):
  1. $repl = '${1}' . var_export($wartosc, true) . ';';
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.