Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] gdzie umieścić skrypty?
Forum PHP.pl > Forum > Przedszkole
przemo78
Witam

Jestem tu nowy ale mam małe pytanko tj. jak w tytule. Załóżmy że mamy plik index.html w którym jest formularz oraz w tym samym katalogu jest skrypt zapisz.php który zapisuje dane z formularza do bazy. Po wywołaniu http://127.0.0.1 ( na localu) pokaże się index.html i formularz. Następnie pod przyciskiem jest akcja która wywołuje ten skrypt. (wcześniej jeszcze walidacja danych JS). Tylko że w polu adresu przeglądarki pojawia się http://127.0.0.1/wpisz.php

Generalnie uważam że coś jest nie tak. Bo równie dobrze można wpisać http://127.0.0.1/wpisz.php i ile się chce wykonać ten skrypt. Jak zrobić żeby w polu adresu nie pokazywała się nazwa pliku skryptu?questionmark.gif?
revyag
No to w pliku wpisz.php na początku sprawdzaj czy zmienne z formularza ustawione, jak nie to przekierwanie na formularz.

---
prznoszę
php->przedszkole
Wykrywacz
Cytat
Generalnie uważam że coś jest nie tak. Bo równie dobrze można wpisać http://127.0.0.1/wpisz.php i ile się chce wykonać ten skrypt. Jak zrobić żeby w polu adresu nie pokazywała się nazwa pliku skryptu?questionmark.gif?


Wydaje mi się, że włanczając maskowanie na serverze dns.
A żeby nie przechodził na następną stronę.
Napisz to wszystko w jednej stronie. najpierw formularz potem skrypt
jak się to robi żeby wykonywało wszystko w tym samym oknie szukaj TAM.
Albo użyj manuala bądz opcji szukaj
Vogel
no to co ze bedzie znal nazwe pliku? uzyj sesji i generuj tokeny ktore dolaczysz do wysylanego formularza. brak tokena, lub niewlasciwy token - akcja zostaje zatrzymana.
poprawny token - wykonujemy akcje i kasujemy token.
proste


np.

formularz.php:
  1. <?php
  2.  
  3. $_SESSION['token'] = rand(1,100000);
  4. echo '<form action="przetwarzacz.php"> ... <input type="hidden" name="token" value="'.$_SESSION['token'].'"> ... </form>';
  5.  
  6. ?>


przetwarzacz.php:
  1. <?php
  2.  
  3. if (isset($_POST['token']) && $_POST['token']==$_SESSION['token']) {
  4. echo 'gotowe. wszystko ok.';
  5. unset($_SESSION['token']);
  6. }
  7. else {
  8. unset($_SESSION['token']);
  9. header('Location: formularz.php');
  10. }
  11.  
  12. ?>
przemo78
no niby działa z tym tokenem.... ale według mnie nie do końca :-( jak wysyłam formularz uruchamioa się skrypt wpisz.php i krótkie info wygenerowane przez niego typu... dane ok. ale kiedy koleś naciśnie F5 (odśwież) to dane wpisują się do bazy raz jeszcze i tak w kółko mogę F5 wciskać. Kiedy wywołam skrypt bez wypełnienia formularza to faktycznie token zadziała, ale jak się zabezpieczyć przed odświeżąniem strony?questionmark.gif?
Vogel
eee? pisalem z lapki i bez testowania, ale to musi byc odporne na odswiezanie.

  1. <?php
  2. unset($_SESSION['token']);
  3. ?>

usuwa zmienna sesyjna i odswiezanie nic a nic nie pomoze. bo warunek if() bedzie falszywy...

ew. zmien warunek na:
  1. <?php
  2. if (isset($_POST['token']) && isset($_SESSION['token']) && $_POST['token']==$_SESSION['token'])
  3. ?>
przemo78
To jest formularz............

  1. <?php
  2. ?>
  3. <html>
  4. <head>
  5. <link rel="stylesheet" type="text/css" href="style.css" /> 
  6. <script Language="JavaScript" >
  7. function waliduj(t)
  8. {
  9. var temp = t.imie.value;
  10. if (temp == '')
  11. {
  12. alert('Brak danych');
  13. return false;
  14. }
  15.  
  16. }
  17. </script>
  18.  
  19. </head>
  20.  
  21. <Body class="p"> 
  22. <?php
  23. $_SESSION['token'] = rand(1,1000);
  24. echo '<form name="form1" method = "post" id="form1" action = "lacz.php" onSubmit="return waliduj(this);" >
  25. imie<input TYPE="text" name="imie"><br><td>nazwisko<input TYPE="text" name="nazwisko"><input TYPE="Submit" Value="Ustaw"">';
  26. echo '<input type="hidden" name="token" value="'.$_SESSION['token'].'"> </form>';
  27. ?>
  28. </Body>
  29. </html>


a to skrypt.....

  1.  
  2. <?php
  3.  
  4. if (isset($_POST['token']) && isset($_SESSION['token']) && $_POST['token']==$_SESSION['token']) 
  5. {
  6. mssql_connect ("LAPTOP", "xx", "xx") or
  7.         die ("Nie można poł&plusmn;czyć się z MySQL");
  8.       mssql_select_db ("Oracle") or 
  9.         die ("Nie można poł&plusmn;czyć się z baz&plusmn; ");
  10.  
  11. if ($_POST['imie']!='')
  12. {
  13. $imie = $_POST['imie'];
  14. $query= "INSERT INTO kontakt (imie,nazwisko) values('$imie','$nazwisko');";
  15. $wynik=mssql_query($query);
  16. echo 'OK';
  17. print $_SESSION['token'];
  18. unset($_SESSION['token']);
  19. unset ($_POST['token']);
  20. }
  21. else
  22. {
  23. echo 'Brak danych';
  24. }
  25. }
  26. if (!isset($_POST['token']) || $_POST['token']!=$_SESSION['token'])
  27. {
  28. unset($_SESSION['token']);
  29. unset ($_POST['token']);
  30. }
  31. ?>


poprawiam
---
nospor


i po wysłaniu formularza pojawia się OK i wtedy poprzez F5 po raz kolejny zapisuje dane do tabeli :-(
Vogel
eee... skopiowalem twoje skrypty i odpalilem bonie chcialemwierzyc. no i widze ze wszystko dziala tak jak trzeba...
przemo78
u mnie już też działa... :-) wywaliłem tylko
  1. <?php
  2.  
  3. isset($_POST['token']) z pierwszego warunku i biega
  4.  
  5. ?>



w każdym razie dopasowałem i działa

a i jeszcze jedna sprawa... według mnie trzeba dopisać w warunku
  1. <?php
  2.  
  3. if (isset($_POST['token']) && $_POST['token']==$_SESSION['token'])
  4.  
  5. ?>


żeby po wykonaniu zapytania poleciał do jakiejś strony np.

  1. <?php
  2.  
  3. header('Location: formularz.php')
  4.  
  5. ?>


bo inaczej nie jest odporny na F5

pozdrawiam
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.