Variabel PHP Pass ke halaman berikutnya

196

Tampaknya cukup sederhana tetapi saya tidak dapat menemukan cara yang baik untuk melakukannya.

Katakan di halaman pertama saya membuat variabel

$myVariable = "Some text";

Dan tindakan formulir untuk halaman itu adalah "Page2.php". Jadi di Page2.php, bagaimana saya bisa memiliki akses ke variabel itu? Saya tahu saya bisa melakukannya dengan sesi tetapi saya pikir itu terlalu banyak untuk string sederhana, dan saya hanya perlu melewatkan string sederhana (nama file).

Bagaimana saya bisa mencapai ini?

Terima kasih!

Carlo
sumber
Hal terbaik dan termudah untuk lulus variabel adalah bagaimana saya menjelaskannya di sini: stackoverflow.com/questions/14465464/…
Jaro

Jawaban:

450

HTML / HTTP tidak memiliki kewarganegaraan, dengan kata lain, apa yang Anda lakukan / lihat di halaman sebelumnya, sama sekali tidak terhubung dengan halaman saat ini. Kecuali jika Anda menggunakan sesuatu seperti sesi, cookie, atau variabel GET / POST. Sesi dan cookie cukup mudah digunakan, dengan sesi yang jauh lebih aman daripada cookie. Lebih aman, tetapi tidak sepenuhnya aman.

Sidang:

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

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

Ingatlah untuk menjalankan session_start();pernyataan di kedua halaman ini sebelum Anda mencoba mengakses $_SESSIONarray, dan juga sebelum output apa pun dikirim ke browser.

Kue kering:

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

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

Perbedaan besar antara sesi dan cookie adalah bahwa nilai variabel akan disimpan di server jika Anda menggunakan sesi, dan pada klien jika Anda menggunakan cookie. Saya tidak bisa memikirkan alasan bagus untuk menggunakan cookie alih-alih sesi, kecuali jika Anda ingin data tetap ada di antara sesi, tetapi bahkan mungkin lebih baik menyimpannya dalam DB, dan mengambilnya berdasarkan nama pengguna atau id.

DAPATKAN dan POST

Anda dapat menambahkan variabel di tautan ke halaman berikutnya:

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

Ini akan membuat variabel GET.

Cara lain adalah dengan memasukkan bidang tersembunyi dalam formulir yang mengirimkan ke halaman dua:

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

Dan kemudian pada halaman dua:

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

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

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

Ubah saja metode untuk formulir postjika Anda ingin melakukannya melalui pos. Keduanya sama-sama tidak aman, meskipun GET lebih mudah diretas.

Fakta bahwa setiap permintaan baru, kecuali untuk data sesi, contoh skrip yang sama sekali baru menarik perhatian saya ketika saya pertama kali mulai coding dalam PHP. Setelah Anda terbiasa, itu cukup sederhana.

Jrgns
sumber
2
Terima kasih ini membantu, masalahnya adalah saya memiliki banyak variabel di halaman pertama, jadi yang saya lakukan adalah membuat array dengan semua variabel itu dan mengirimkannya ke halaman berikutnya menggunakan sesi.
Carlo
Schweet :) Senang saya bisa membantu.
Jrgns
4
Nitpick: sesi dalam PHP umumnya juga ditangani oleh cookie. Cookie sesi bukan cookie persisten dan biasanya hanya memegang id sesi. Tapi itu masih kue.
Decent Dabbler
Untuk menguraikan komentar saya sendiri. Alasannya adalah, karena, seperti yang Anda katakan, HTTP tidak memiliki kewarganegaraan. Oleh karena itu PHP masih membutuhkan cara untuk mengidentifikasi sesi. Ini dilakukan dengan menyimpan cookie pada klien dengan id sesi. Jika cookie dinonaktifkan di sisi klien, PHP terkadang menggunakan $ _GET vars untuk menambahkan id sesi untuk menghubungkan antar halaman. Tapi ini umumnya dianggap tidak aman, dan karenanya umumnya dinonaktifkan dari sebagian besar webservers (php.ini).
Decent Dabbler
Sesi @fireeyedboy PHP dapat diperbanyak dengan menggunakan variabel GET dan POST juga. Pada akhir hari, sesi menyederhanakan variabel yang lewat dari satu halaman ke halaman berikutnya dengan hanya memiliki satu data untuk ditransfer: id sesi. Id sesi itu kemudian digunakan untuk mengambil data yang disimpan sebelumnya.
Jrgns
30

Terima kasih atas jawaban di atas. Begini cara saya melakukannya, saya harap ini membantu mereka yang mengikuti. Saya ingin meneruskan nomor pendaftaran dari satu halaman ke halaman lain, karenanya regName dan regValue :

Buat halaman pertama Anda, sebut saja set_reg.php :

<?php

session_start();

$_SESSION['regName'] = $regValue;

?>

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

Buat halaman kedua Anda, sebut saja get_reg.php :

<?php

session_start();

$regValue = $_GET['regName'];

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

?>

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

Meskipun tidak selengkap jawaban di atas, untuk tujuan saya ini menggambarkan secara sederhana hubungan antara berbagai elemen.

jujur
sumber
13
Contoh Anda juga berfungsi tanpa sesi dan sebenarnya tidak mendapatkan data melalui mekanisme sesi (di get_reg.php). Anda mengirim regName melalui formulir dengan metode get seperti yang dijelaskan oleh Jrgns. Dengan demikian variabel dapat diakses di halaman get_reg.php melalui array $ _GET.
metatron
16

Melewati data dalam permintaan

Anda bisa menyematkannya sebagai bidang tersembunyi di formulir Anda, atau menambahkannya ke URL tindakan formulir Anda

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

atau

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

Catatan ini juga menggambarkan penggunaan htmlentities dan urlencode saat menyampaikan data.

Melewati data dalam sesi

Jika data tidak perlu diteruskan ke sisi klien, maka sesi mungkin lebih tepat. Cukup panggil session_start () di awal setiap halaman, dan Anda bisa mendapatkan dan mengatur data ke dalam array $ _SESSION.

Keamanan

Karena Anda menyatakan nilai Anda sebenarnya adalah nama file, Anda perlu mengetahui konsekuensi keamanannya. Jika nama file telah tiba dari sisi klien, anggap pengguna telah merusak nilainya. Periksa validitasnya! Apa yang terjadi ketika pengguna melewati jalur ke file sistem penting, atau file di bawah kendali mereka? Bisakah skrip Anda digunakan untuk "menyelidiki" server untuk file yang ada atau tidak ada?

Karena Anda baru saja memulai di sini, ada baiknya mengingatkan bahwa ini berlaku untuk data apa pun yang datang dalam $ _GET, $ _POST atau $ _COOKIE - anggap musuh terburuk Anda membuat konten array tersebut, dan berikan kode yang sesuai!

Paul Dixon
sumber
9

Ada tiga metode untuk meneruskan nilai dalam php.

  • Melalui pos
  • Dengan get
  • Dengan membuat variabel sesi

Ketiga metode ini digunakan untuk tujuan yang berbeda. Misalnya jika kita ingin menerima nilai kita di halaman berikutnya maka kita dapat menggunakan metode 'posting' ($ _POST) sebagai: -

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

Jika kita memerlukan nilai variabel pada lebih dari satu halaman, maka kita dapat menggunakan variabel sesi sebagai: -

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

Sebelum menggunakan Sintaks ini untuk membuat variabel SESI pertama-tama kita harus menambahkan tag ini di awal halaman php kami

session_start(); 

Metode GET umumnya digunakan untuk mencetak data pada halaman yang sama yang digunakan untuk mengambil input dari pengguna. Sintaksnya adalah sebagai:

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

Metode POST umumnya mengkonsumsi lebih aman daripada GET karena ketika kita menggunakan metode Get daripada dapat menampilkan data di URL bar. Jika data tersebut lebih sensitif data seperti kata sandi maka itu bisa menjadi inggeris.

ravi sharma
sumber
7

Sesi akan menjadi satu-satunya cara yang baik, Anda juga bisa menggunakan GET / POST tetapi itu berpotensi tidak aman.

Alo
sumber
6

coba kode ini

menggunakan bidang tersembunyi kita bisa meneruskan php varibale ke halaman lain

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

lulus variabel php ke nilai bidang tersembunyi sehingga Anda dapat mengakses variabel ini ke halaman lain

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>
Bhargav Chudasama
sumber
1
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

halaman 2

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}
V Kash Singh
sumber
1

Sesi akan menjadi satu-satunya cara yang baik, Anda juga bisa menggunakan GET / POST tetapi itu berpotensi tidak aman.

Melewati data dalam sesi Jika data tidak perlu diteruskan ke sisi klien, maka sesi mungkin lebih tepat. Cukup panggil session_start () di awal setiap halaman, dan Anda bisa mendapatkan dan mengatur data ke dalam array $ _SESSION.

Keamanan Karena Anda menyatakan nilai Anda sebenarnya adalah nama file, Anda perlu mengetahui konsekuensi keamanannya. Jika nama file telah tiba dari sisi klien, anggap pengguna telah merusak nilainya. Periksa validitasnya! Apa yang terjadi ketika pengguna melewati jalur ke file sistem penting atau file di bawah kendali mereka? Bisakah skrip Anda digunakan untuk "menyelidiki" server untuk file yang ada atau tidak ada?

Karena Anda baru saja memulai di sini, perlu diingatkan bahwa ini berlaku untuk data apa pun yang datang dalam $ _GET, $ _POST atau $ _COOKIE - anggap musuh terburuk Anda membuat konten dari array tersebut, dan kode sesuai!

Kaushik Kothiya
sumber