Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przekierowanie strony
Forum PHP.pl > Forum > Przedszkole
Durkane
Witam... Mam taki problem (szukam i szukam i nic nie mogę znaleźć, aby odpowiadało temu co chce).

Mam kod php
  1. if (!isset $id)
  2. {
  3. $id = time (7 * 24 * 60 * 60);
  4. header('Location: <a href="http://localhost/~cos/gra.php'.$id);" target="_blank">http://localhost/~cos/gra.php'.$id);</a>
  5. }


Teraz chce zrobić tak żeby moja strona gra tworzyła się np. tak "http://localhost/~cos/gra.php?id=481812731". Z tego co wiem muszę sprawdzić czy moja strona zawiera to "?id=481812731" tyle,że nie wiem jak dokładnie to sprawdzić... I jak zadeklarować to $id przed IF.

Czy to będzie coś w stylu
if (isset header('Location: http://localhost/~cos/gra.php'.$id)
{
}

questionmark.gif
Dziękuje za pomoc smile.gif
bobek358
  1. if (isset($_GET['id']) && !empty($_GET['id']))
  2. {
  3. // kod
  4. }
Durkane
Ahh.. no tak zapomniałem o $_GET biggrin.gif Ale mimo to i tak generuje się tylko "http://localhost/~cos/gra.php". I teraz jeszcze muszę poradzić sobie z błędem, który wytwarza wstawienie tego tongue.gif
bobek358
Ponieważ masz zapis:

  1. $id = time (7 * 24 * 60 * 60);
  2. header('Location: <a href="http://localhost/~cos/gra.php'.$id);" target="_blank">http://localhost/~cos/gra.php'.$id);</a>


a winno być

  1. $id = time (7 * 24 * 60 * 60);
  2. header('Location: http : / / localhost/~cos/gra.php?id='.$id);


Celowo dodałem spacje w http:// bo bbcode forum zamianiał to na link.
Durkane
O to właśnie chodzi, że jak zrobię
  1. $id = time (7 * 24 * 60 * 60);
  2. header('Location: http : / / localhost/~cos/gra.php?id='.$id');


To po prostu jest http : / / localhost/~cos/gra.php, a jak zmienię bez "?id=" to generuje mi liczby tylko nie znajduję strony.
I time zmieniłem na rand() bo przy time ciągle te same liczby są.
nospor
Cytat
bo przy time ciągle te same liczby są.
Bo jak ktos nie potrafi skopiowac kodu z manuala to co sie dziwic....
time() + (7 * 24 * 60 * 60);
Durkane
Cytat(nospor @ 6.08.2015, 08:46:42 ) *
Bo jak ktos nie potrafi skopiowac kodu z manuala to co sie dziwic....
time() + (7 * 24 * 60 * 60);


Niestety nie kopiowałem, a pisałem z głowy, a jestem na poziomie podstawowym z tego, więc zdarzają się błędy tego typu smile.gif I w dalszym ciągu nie wstawia "?id=".
Bo zamysł ogólnie jest tego taki żeby generować właśnie takie id strony, które potem wstawiane jest do ciasteczka(tzn. np. $_COOKIES(Random_$id)), które przechowuje liczbę oraz próby, żeby po wyłączeniu strony i włączeniu próby były na 0, a liczba jakaś nowa smile.gif


Dobra zrobiłem, że dodaje "?id=" tylko nie wykonuje mi reszty kodu niestety : /
nospor
Cytat
I w dalszym ciągu nie wstawia "?id=".
Gdyż moja poprawka nie robila nic z ?id. Ja tylko ci napisalem jak pisac by time "dzialalo"

Cytat
Niestety nie kopiowałem, a pisałem z głowy,
Kod był bardzo podobny do tego co w manualu, nawet odstepy, wiec tak jakos mi sie skojarzylo... wink.gif
Durkane
Staram się tak robić biggrin.gif Już wstawianie ?id= działa poprawnie smile.gif Jednak teraz mam inny problem smile.gif Otóż po wpisaniu liczby i zatwierdzeniu przyciskiem generuje mi nowe id dla strony... A ma pozostać niezmienione, aż do wyłączenia strony. I po zatwierdzeniu przyciskiem pojawia mi się takie coś "<br%20/><b>Notice</b>:%20%20Undefined%20variable:%20hash%20in%20<b>C:\WebServ\httpd-users\cos\gra.php</b>%20on%20line%20<b>80</b><br%20/>" przy "?id=" zamiast numeru normalnego.

Wstawiam pełny kod

  1. <?php
  2. error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
  3.  
  4.  
  5.  
  6. if (!isset($_GET['id']))
  7. {
  8. $hash = time() + (7 * 24 * 60 * 60);
  9. }
  10. else
  11. {
  12.  
  13. $Number = (string)$_POST["text"];
  14.  
  15. if(isset($_POST["submit"]))
  16. {
  17. if ($Number == null)
  18. {
  19. $Num3 = "Wprowadz liczbe! ";
  20. }
  21. else
  22. {
  23. if(isset($_SESSION["Trials"]))
  24. {
  25. $_SESSION["Trials"]+=1;
  26. }
  27. else
  28. {
  29. $_SESSION["Trials"] = 1;
  30. }
  31. }
  32. }
  33.  
  34. if(!isset($_SESSION["Trials"]))
  35. {
  36. $_SESSION["Trials"] = 0;
  37. }
  38. if(isset($_COOKIE["Random_$hash"]))
  39. {
  40. if(isset($_POST["submit"]))
  41. {
  42. if ($_COOKIE["Random_$hash"] > $Number)
  43. {
  44. $Kom1 = "Podana liczba jest za mala. Sprobuj jeszcze raz!";
  45. $Ses1 = "Liczba, ktora podales :".$Number;
  46. $Ses2 = "Proby : ".$_SESSION["Trials"];
  47. }
  48. elseif ($_COOKIE["Random_$hash"] < $Number)
  49. {
  50. $Kom1 = "Podana liczba jest za duza. Sprobuj jeszcze raz!";
  51. $Ses1 = "Liczba, ktora podales :".$Number;
  52. $Ses2 = "Proby : ".$_SESSION["Trials"];
  53. }
  54. elseif ($_COOKIE["Random_$hash"] == $Number)
  55. {
  56. $Kom1 = " Gratulacje odgadles liczbe ! ";
  57. $Kom1 .= " Zagraj jeszcze raz ! ";
  58. $Ses2 = "Proby : ".$_SESSION["Trials"];
  59. session_destroy();
  60. setcookie("Random_$hash","");
  61. $Guess = 1;
  62. }
  63. }
  64. }
  65. else
  66. {
  67. $Draw= rand(1,100);
  68. setcookie("Random_$hash",$Draw);
  69. }
  70. }
  71. ?>
  72.  
  73. <html>
  74. <head></head>
  75. <body>
  76. <div style="text-align:center; width:100%; border: 2px black solid">
  77. <h3>Odgadnij Liczbe od 1 do 100</h3>
  78. <form action ="gra.php?id=<?php echo $hash ?>" method ="POST">
  79.  
  80. <div style ="color:green">
  81. <?php if(isset($Ses1)): ?>
  82. <p><?= $Ses1; ?></p>
  83. <?php endif ?>
  84. <?php if(isset($Ses2)): ?>
  85. <p><?= $Ses2; ?></p>
  86. <?php endif ?>
  87. <?php if(isset($Kom1)): ?>
  88. <p><?= $Kom1; ?></p>
  89. <?php endif ?>
  90. </div>
  91.  
  92. <?php if(isset($Num3)): ?>
  93. <p style ="color:red;"><?= $Num3; ?></p>
  94. <?php endif ?>
  95.  
  96. <br>
  97. <input type="text" name="text">
  98. <br><br>
  99. <?php if (!isset($Guess)): ?>
  100. <input type="submit" value="Wyslij" id="submit" name="submit">
  101. <?php else: ?>
  102. <input type="submit" action ="gra.php?id=<?php echo $hash ?>" value="Zagraj jeszcze raz!" id="submit" name="submit"
  103. <?php endif ?>
  104. <br><br>
  105. </form>
  106. </div>
  107. </body>
  108. </html>
bobek358
Jeśli wchodzisz na stronę z id=jakies_id to pomijasz
  1. if (!isset($_GET['id']))
  2. {
  3. $hash = time() + (7 * 24 * 60 * 60);
  4. header('Location: http:// localhost/~cos/gra.php?id='.$hash);
  5. }


później już nigdzie tej zmiennej nie generujesz i przez to wywala że nie przypisałeś wartości do zmiennej hash.

Powinno być tak:

  1. if (!isset($_GET['id']))
  2. {
  3. $hash = time() + (7 * 24 * 60 * 60);
  4. header('Location: http:// localhost/~cos/gra.php?id='.$hash);
  5. }
  6. else
  7. {
  8. $hash = $_GET['id'];
Durkane
Bardzo dziękuję za pomoc smile.gif Sądziłem, że jak doda już liczbę do "?id=" to będzie ją pamiętał i przypisywał, a tu takie coś ;d No nic człowiek uczy się całe życie smile.gif
Resztę błędów już sam wyeliminowałem tongue.gif

Jeszcze raz dziękuje serdecznie za pomoc. smile.gif
bobek358
PHP to nie C# czy C++ - dane musisz jakoś przekazywać między wywołaniami stron do tego masz właśnie post, get session itp.
grzes999
Cytat(bobek358 @ 6.08.2015, 11:29:45 ) *
PHP to nie C# czy C++ - dane musisz jakoś przekazywać między wywołaniami stron do tego masz właśnie post, get session itp.

Troszkę odgrzebię temat; ale co miałeś na myśli formując to stwierdzenie?
bobek358
Z tego co pamiętam (ale może mnie pamięć mylić bo lata już w C# nic nie robiłem), to jak deklarowałeś zmienną w programie to istniała dopóki działał program.
W PHP zmienna istnieje tylko w trakcie przetwarzania żądania, aby ją mieć na innej podstronie trzeba ją przekazać w jakiś sposób.
grzes999
Cytat(bobek358 @ 14.08.2015, 11:34:02 ) *
Z tego co pamiętam (ale może mnie pamięć mylić bo lata już w C# nic nie robiłem), to jak deklarowałeś zmienną w programie to istniała dopóki działał program.
W PHP zmienna istnieje tylko w trakcie przetwarzania żądania, aby ją mieć na innej podstronie trzeba ją przekazać w jakiś sposób.


No nie do końca, sesje stosuje się dlatego, że protokół HTTP jest protokołem bezstanowym i nie ma możliwości sprawdzenia co było wcześniej, sam język nie ma nic do tego
bobek358
Ok jedno wynika z drugiego tongue.gif
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.