Sonraki sayfaya PHP Pass değişkeni


196

Oldukça basit görünüyor ama bunu yapmanın iyi bir yolunu bulamıyorum.

Diyelim ki ilk sayfada bir değişken oluşturuyorum

$myVariable = "Some text";

Ve bu sayfa için formun eylemi "Sayfa2.php" dir. Peki Page2.php'de, bu değişkene nasıl erişebilirim? Ben oturumları ile yapabilirim biliyorum ama basit bir dize için çok fazla olduğunu düşünüyorum, ve ben sadece basit bir dize (bir dosya adı) geçmek gerekir.

Bunu nasıl başarabilirim?

Teşekkürler!


Değişkenleri geçmek için en iyi ve en kolay şey, burada nasıl açıkladığımdır: stackoverflow.com/questions/14465464/…
Jaro

Yanıtlar:


450

HTML / HTTP durumsuzdur, başka bir deyişle, önceki sayfada gördükleriniz / gördükleriniz mevcut sayfayla tamamen bağlantısızdır. Dışında Eğer oturumları, çerez veya GET / POST değişkenler gibi bir şey kullanmak faydalı olacaktır. Oturumların ve çerezlerin kullanımı oldukça kolaydır, oturum çerezlerden çok daha güvenlidir. Daha güvenli, ancak tamamen güvenli değil.

Oturum, toplantı, celse:

//On page 1
$_SESSION['varname'] = $var_value;

//On page 2
$var_value = $_SESSION['varname'];

Diziye session_start();erişmeye çalışmadan $_SESSIONönce ve ayrıca tarayıcıya herhangi bir çıktı göndermeden önce ifadeyi her iki sayfada da çalıştırmayı unutmayın .

Kurabiye:

//One page 1
$_COOKIE['varname'] = $var_value;

//On page 2
$var_value = $_COOKIE['varname'];

Oturumlar ve çerezler arasındaki en büyük fark, oturumlar kullanıyorsanız değişkenin değerinin sunucuda ve çerezler kullanıyorsanız istemcide depolanmasıdır. Verilerin oturumlar arasında kalmasını istiyorsanız, oturumlar yerine çerezleri kullanmak için iyi bir neden düşünemiyorum, ancak o zaman bile bir DB'de saklamak ve bir kullanıcı adı veya kimliğe göre almak daha iyidir.

GET ve POST

Değişkeni bir sonraki sayfaya bağlantıya ekleyebilirsiniz:

<a href="page2.php?varname=<?php echo $var_value ?>">Page2</a>

Bu bir GET değişkeni yaratacaktır.

Başka bir yol, ikinci sayfaya gönderilen bir forma gizli bir alan eklemektir:

<form method="get" action="page2.php">
    <input type="hidden" name="varname" value="var_value">
    <input type="submit">
</form>

Ve sonra ikinci sayfada:

//Using GET
$var_value = $_GET['varname'];

//Using POST
$var_value = $_POST['varname'];

//Using GET, POST or COOKIE.
$var_value = $_REQUEST['varname'];

postPosta yoluyla yapmak istiyorsanız formun yöntemini değiştirmeniz yeterlidir . Her ikisi de eşit derecede güvensizdir, ancak GET'in hacklenmesi daha kolaydır.

Her yeni isteğin, oturum verileri dışında, PHP'de kodlamaya ilk başladığımda tamamen yeni bir komut dosyası örneği olması beni yakaladı. Buna alıştıktan sonra, oldukça basit.


2
Bu yardımcı oldu, sorun, ben ilk sayfada değişkenler bir grup vardı, bu yüzden yaptığım tüm bu değişkenler ile bir dizi oluşturmak ve oturumları kullanarak sonraki sayfaya göndermek oldu.
Carlo

Schweet :) Yardım edebileceğim için mutluyum.
Jrgns

5
Nitpick: PHP'deki oturumlar genellikle çerezlerle de yapılır. Oturum çerezi kalıcı bir çerez değildir ve genellikle yalnızca oturum kimliğini tutar. Ama yine de bir çerez.
Terbiyeli Dabbler

Kendi yorumumu hazırlamak için. Çünkü söylediğiniz gibi HTTP vatansızdır. Bunun için PHP'nin oturumu tanımlamak için hala bir yola ihtiyacı vardır. Bu, istemcide bir oturum kimliğine sahip bir çerez depolanarak yapılır. Çerezler istemci tarafında devre dışı bırakılırsa, PHP bazen oturum kimliğini sayfalar arasındaki bağlantılara eklemek için $ _GET vars kullanır. Ancak bu genellikle güvensiz olarak kabul edilir ve bu nedenle çoğu web sunucusunun (php.ini) genellikle devre dışıdır.
Terbiyeli Dabbler

@fireeyedboy PHP oturumları GET ve POST değişkenleri kullanılarak da yayılabilir. Günün sonunda, oturum aktarılacak yalnızca bir veri parçasına sahip olarak oturum değişkenlerini bir sayfadan diğerine geçirmeyi kolaylaştırır. Bu oturum kimliği daha sonra önceden kaydedilmiş verileri almak için kullanılır.
Jrgns

30

Yukarıdaki cevaplar için teşekkürler. İşte böyle yaptım, umarım takip edenlere yardımcı olur. Bir kayıt numarasını bir sayfadan diğerine, dolayısıyla regName ve regValue geçmek için arıyorum :

İlk sayfanızı oluşturun, set_reg.php olarak adlandırın :

<?php

session_start();

$_SESSION['regName'] = $regValue;

?>

<form method="get" action="get_reg.php">
    <input type="text" name="regName" value="">
    <input type="submit">
</form>

İkinci sayfanızı oluşturun, get_reg.php olarak adlandırın :

<?php

session_start();

$regValue = $_GET['regName'];

echo "Your registration is: ".$regValue.".";

?>

<p><a href="set_reg.php">Back to set_reg.php</a>

Yukarıdaki cevap kadar kapsamlı olmasa da, benim amacım için bu, çeşitli unsurlar arasındaki ilişkiyi basit bir şekilde göstermektedir.


13
Örneğiniz oturumlar olmadan da çalışır ve aslında verileri sessions mekanizması (get_reg.php içinde) yoluyla almaz. RegName'i Jrgns tarafından açıklandığı gibi get-method'lu bir form aracılığıyla gönderiyorsunuz. Değişken böylece get_reg.php sayfasında $ _GET dizisi üzerinden erişilebilir.
12'de metatron

16

İstekte veri iletme

Formunuza gizli bir alan olarak yerleştirebilir veya formlar eylem URL'nizi ekleyebilirsiniz.

 echo '<input type="hidden" name="myVariable" value="'.
     htmlentities($myVariable).'">';

veya

echo '<form method="POST" action="Page2.php?myVariable='.
    urlencode($myVariable).'">";

Bunun, verileri iletirken htmlentities ve urlencode kullanımını da gösterdiğini unutmayın .

Oturumda veri iletme

Verilerin istemci tarafına geçirilmesi gerekmiyorsa, oturumlar daha uygun olabilir. Her sayfanın başlangıcında session_start () öğesini çağırmanız yeterlidir ve $ _SESSION dizisine veri alıp ayarlayabilirsiniz.

Güvenlik

Değerinizin aslında bir dosya adı olduğunu belirttiğiniz için, güvenlik sonuçlarının farkında olmanız gerekir. Dosya adı istemci tarafından gelmişse, kullanıcının bu değeri değiştirdiğini varsayın. Geçerlilik için kontrol edin! Kullanıcı önemli bir sistem dosyasının veya denetimindeki bir dosyanın yolunu geçtiğinde ne olur? Komut dosyanız, var olan veya olmayan dosyalar için sunucuyu "sorgulamak" için kullanılabilir mi?

Burada yeni başladığınız için, bunun $ _GET, $ _POST veya $ _COOKIE'ye gelen herhangi bir veri için geçerli olduğunu hatırlatmaya değer - en kötü düşmanın bu dizilerin içeriğini hazırladığını ve buna göre kodlandığını varsayın!


9

Php değeri geçmek için üç yöntem vardır.

  • Posta ile
  • Get tarafından
  • Oturum değişkeni yaparak

Bu üç yöntem farklı amaçlarla kullanılır.Örneğin, bir sonraki sayfada değerimizi almak istiyorsak 'post' ($ _POST) yöntemini şu şekilde kullanabiliriz: -

$a=$_POST['field-name'];

Birden fazla sayfada değişkenin değerini gerekirse, oturum değişkenini şu şekilde kullanabiliriz: -

$a=$_SESSION['field-name];

Bu sözdizimini SESSION değişkeni oluşturmak için kullanmadan önce php sayfamızın en başına bu etiketi eklemeliyiz

session_start(); 

GET yöntemi genellikle, kullanıcıdan giriş almak için kullanılan aynı sayfaya veri yazdırmak için kullanılır. Sözdizimi şöyledir:

$a=$_GET['field-name'];

POST yöntemi genellikle GET'ten daha güvenli tüketilir çünkü Get yöntemini kullandığımızda verileri URL çubuğunda görüntüleyebilir. Veriler şifre gibi daha hassas verilerse inggeris olabilir.


7

Oturumlar tek iyi yol olurdu, GET / POST da kullanabilirsiniz, ancak bu potansiyel olarak güvensiz olacaktır.


6

bu kodu dene

gizli alan kullanarak php değişkenini başka bir sayfaya geçirebiliriz

sayfa1.php

<?php $myVariable = "Some text";?>
<form method="post" action="page2.php">
 <input type="hidden" name="text" value="<?php echo $myVariable; ?>">
 <button type="submit">Submit</button>
</form>

php değişkenini gizli alan değerine geçirin, böylece bu değişkene başka bir sayfaya erişebilirsiniz

sayfa2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>

1
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

sayfa 2

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}

1

Oturumlar tek iyi yol olurdu, GET / POST da kullanabilirsiniz, ancak bu potansiyel olarak güvensiz olacaktır.

Oturumda veri iletme Verilerin istemci tarafına geçirilmesi gerekmiyorsa, oturumlar daha uygun olabilir. Her sayfanın başlangıcında session_start () öğesini çağırmanız yeterlidir ve $ _SESSION dizisine veri alıp ayarlayabilirsiniz.

Güvenlik Değerinizin gerçekte bir dosya adı olduğunu belirttiğiniz için, güvenlik sonuçlarının farkında olmanız gerekir. Dosya adı istemci tarafından gelmişse, kullanıcının bu değeri değiştirdiğini varsayın. Geçerlilik için kontrol edin! Kullanıcı önemli bir sistem dosyasının veya denetimindeki bir dosyanın yolunu geçtiğinde ne olur? Komut dosyanız, var olan veya olmayan dosyalar için sunucuyu "sorgulamak" için kullanılabilir mi?

Burada yeni başladığınız için, bunun $ _GET, $ _POST veya $ _COOKIE'ye gelen herhangi bir veri için geçerli olduğunu hatırlatmaya değer - en kötü düşmanın bu dizilerin içeriğini hazırladığını varsayalım ve buna göre kod yaz!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.