SESI 9 - GET POST (REQUEST METHOD)

November 01, 2018 by

Superglobals → Variabel yang ada di PHP, variabel special. Sebelum membahas ini kita harus tau variabel scope (lingkup sebuah variabel) di dalam PHP. Buat file baru di folder PHPDasar dan buat folder pertemuan ke-...

//variable scope / lingkup variable #kasus 1
<?php
$x = 10;
//menampilkan variabel
echo $x;
?>

akan muncul angka 10 dilayar
artinya $x adalah variabel lokal yang ada di file ini saja dan hanya dapat di akases oleh file ini saja.

#kasus 2
<?php
$x = 10;
function tampilx(){
echo $x;
}
tampilx();
?>
dilayar tampil notice : undefined variabel x. 
Hal ini dikarenakan sistem di PHP. untuk variabel scope /lingkup variabel $x pada fungsi tampilx() berbeda dengan lngku yang ada di luar fungsi. Meskipun nama variabelnya sama tetapi ruang lingkupnya berbeda, karena variabel yang ada di dalam fungsi hanya berlaku di dalam fungsi saja tidak dapat diakses diluar fungsi.

<?php
$x = 10;
function tampilx(){
$x = 20;
echo $x;
}
tampilx();
echo "<br>";
echo $x;
?>
tampil di layar yaitu angka 20 dan 10 untuk hal ini dihasilkan karena nilai $x dieksekusi untuk tampilx(); dan echo $x untuk variabel lokal pada file ini saja.

<?php
$x = 10;
function tampilx(){
global $x;
echo $x;
}
tampilx();
?>
keyword global berfungsi untuk mengakses nilai $x diluar function kemudian ditampilkan ke layar menggunakan echo.

Variabel superglobal ini adalah variabel yang ada di PHP yang bisa di akses di file manapun dan kapanpun. Ada variabel superglobal yang default dimiliki PHP, yaitu:
=> $_GET 
=> $_POST
=> $_REQUEST
=> $_SESSION
=> $_COOKIE
=> $_SERVER
=> $_ENV (environment)

ada 7 variabel superglobal yang disediakan o/ PHP, variabel superglobal ini semuanya yaitu tipenya array associative. Jadi, perlakukanlah sesuai dengan array associative, kenapa ada banyak karena masing-masing superglobal memiliki perilaku dan perlakuan yang berbeda, cara kerjanya yang berbeda.

// Superglobal
// variabel superglobal milik PHP => merupakan array associative dan harus dicetak dengan var_dump() atau print_r

var_dump($_POST);
var_dump($_GET); 

array yang default dihasilkan yaitu array(0){} => array associative yang belum ada isinya.

ada variabel superglobal yang sudah ada isinya yaitu 
var_dump($_SERVER); => isinya informasi mengenai server kita.
echo $_SERVER["SERVER_NAME"];

//$_GET
$_GET ["nama" => "Riventus A",
"nrp" => "1231231"];
var_dump($_GET); 
maka dilayar akan tampil lengkap

Ada cara lain untuk memasukkan data ke dalam $_GET yaitu caranya menggunakan string di dalam URLnya / di alamat websitenya. Untuk memasukkan data ke halaman supaya ditangkap oleh $_GET dihalaman ini yaitu dengan cara:

+) arahkan ke URL kemudian tambahkan diakhir URLnya tanda ? yang bacanya "saya sekarang akan memasukkan data ke halaman ini di dalam variabel $_GET"

+) tulis pasangan key dan value dengan pemisah tanda = artinya saya akan memasukkan data dengan key nama, valuenya Riventus ke dalam $_GET
artinya saya bisa mengirimkan data ke halaman ini menggunakan metode request get. Datanya akan dikirim di URL dan akan ditangkap oleh variabel superglobal $_GET.

+) untuk menambahkan data yaitu caranya menambah tanda & ke URL setelah data sebelumnya diberikan data key dan value dipisahkan tanda = 

+) tanda spasi akan dikonversi oleh URL menjadi %20 secara default di url.

misal: 
http://.......?nama=Riventus%20AHA&nrp=12301923 
maka tampil dilayar
jadi itu cara kita mengirimkan data menggunakan methode request get, data di kirim, menggunakan request get akan ditangkap oleh variabel superglobal $_GET.

kegunaan $_GET?
buat file GET & POST.php ketia diklik namanya akan muncul deskipsi detail nama dengan metode get yang mengarah ke file latihan2.php

caranya: mengirimkan datanya ke halaman latihan2.php  menggunakan url atau metode request get, yaitu dengan menyisipkan data di hrefnya dengan tanda ?

dibagian <a href=".....?"

kemudian di latihan2.php dibuat <?= $_GET("nama"); ?> untuk menangkap value dengan key "nama" dalam di tag <li></li>

code file GET & POST.php 
<?php
$mahasiswa = [
[
"nama" => "Riventus",
"nrp" => "1239812",
"jurusan" => "Teknik Geologi",
"email" => "email1"

],
[
"nama" => "Aritonang",
"nrp" => "161794",
"jurusan" => "Teknik Informatika",
"email" => "email2"
]
];
?>
<!DOCTYPE html>
<html>
<head>
<title>
GET
</title>
<script></script>
<style>
</style>
</head>
<body>
<h1>Daftar Mahasiswa</h1>
<?php foreach($mahasiswa as $mhs):?>
<ul>
<li>
<img src="img/<?= $mhs["gambar"];?>">
</li>
<li>Nama : <a href="latihan2.php?nama=<?= $mhs["nama"];?>&nrp=<?= $mhs["nrp"];?>&email=<?= $mhs["email"];?>&jurusan=<?= $mhs["jurusan"];?>"><?= $mhs["nama"];?></a></li>
<div></div>
</ul>
<?php endforeach;?>
</body>
</html>


code latihan2.php
<?php
if(!isset($_GET["nama"]) ||
!isset($_GET["nrp"]) ||
!isset($_GET["email"]) ||
!isset($_GET["jurusan"]) ||){
//redirect
header("Location: GET and post.php");
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>
Hasil GET
</title>
<script></script>
<style>
</style>
</head>
<body>
<h1>Detail Mahasiswa</h1>
<ul>
<li>
<img src="img/<?= $_GET["gambar"];?>">
</li>
<li>Nama : <?= $_GET["nama"]; ?></li>
<li>NRP : <?= $_GET["nrp"];?></li>
<li>Email : <?= $_GET["email"];?></li>
<li>Jurusan : <?= $_GET["jurusan"];?></li>
<div></div>
</ul>
<a href="GET and post.php">BACK</a>
</body>
</html>

sehingga hasilnya codenya seperti itu dan datanya akan masing-masing sesuai dengan data yang dikirim pada file GET & POST.php 

Methode request get adalah methode pengiriman data melalui url dan data tsb bisa diambil atau ditangkap oleh variabel superglobal $_GET.

Nah jika kita mengakses langsung url di latihan2.php tanpa mengizinkan data apapun maka muncul notice undefined index: ..... hal ini dikarenakan variabel superglobal get langsung mencetak isinya dengan key nama, nrp, dst. tanpa ada data didlmnya dan tidak ada key yang diidentifikasi sehingga muncul notice.

Jika ada orang yang ingin akses url langsung maka bisa dicegat dengan pengkondisian di file latihan2.php

// cek apakah tidak ada data di $_GET
<?php
if (!isset($_GET["nama"])) {
//apakah $_GET["nama"]tidak dibuat ? jika benar maka redirect ke halaman sendiri.
header["Location:get & post.php"];
exit;//supaya script yang dibawahnya tidak dieksekusi
}

?>

artinya ketika $_GET["nama"] tidak di set maka paksa user pindah ke get & post.php menggunakan operator logika OR (||) maka cek juga untuk nrp,jurusan,dll. sehingga menjadi latihan2.php

$_GET => data dikirim lewat url atau form
$_GET => data dikirim lewat form

keunggulan menggunakan post datanya tidak kelihatan di url.

buat file baru latihan_post.php dan buat seperti ini

<!DOCTYPE html>
<html>
<head>
<title>
Post
</title>
<script></script>
<style>
</style>
</head>
<body>
<?php if(isset($_POST["submit"])):?>
<h1>SELAMAT DATANG, <?= $_POST["nama"];?></h1>
<?php endif;?>
<!-- form wajib ada 2 atribut= action dan method, untuk input wajib ada 2 atribut type dan name dan form butuh button dengan atribut wajib yaitu type="submit" dan name-->
<form method="post">
Masukkan Nama: <input type="teks" name="nama">
<br/>
<button type="submit" name="Submit" >KIRIM!</button>
<!-- semua input akan dikirim dengan metode post dengan aksi ke dalam file hasilpost.php -->
</form>
</body>
</html>

jika action="" tidak ada maka secara default form akan mengirimkan data ke halaman itu sendiri jika metode di hapus secara default akan menggunakan method get => maka hal ini harus hati-hati supaya untuk login tidak ada tampil di url.

maka jika post maka menggunakan method="post" dan tanpa atribut form nilai yang dikirimkan ditangkap dengan $_POST yaitu 
<?php if(isset($_POST["submit"])):?>
<h1>SELAMAT DATANG, <?= $_POST["nama"];?></h1>
<?php endif;?>
<!-- form wajib ada 2 atribut= action dan method, untuk input wajib ada 2 atribut type dan name dan form butuh button dengan atribut wajib yaitu type="submit" dan name-->
<form method="post">
buat login sederhana dengan folder login dan 2 file php yaitu login.php dan admin.php 
code login.php
<?php
//cek apakah tombol submit sudah ditekan atau belum
if(isset($_POST["submit"])){
// cek username dan password
if($_POST['username']=="admin" && $_POST["password"]=="123"){
//jika benar, redirect ke halaman admin
header("Location:admin.php");
exit;
}else{
//jika salah, tampilkan pesan kesalahan
$error = true;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>
Post
</title>
<script></script>
<style>
</style>
</head>
<body>
<?php if(isset($error)):?>
<p style="color:red; font-style:italic;">username/password salah!<p>
<?php endif;?>
<!-- ada hubungan antara label dan inputan yaitu ketika user klik label akan terhubung ke teks fieldnya. Hal ini memudahkan user berintaraksi dengan form. Caranya dengan menambahkan atribut for="" pada tag label dan atribut id="" pada tag input dengan isinya harus sama supaya tag label dan input terhubung-->
<form action="admin.php" method="post">
<label for="username">Username: </label><input type="teks" name="nama" id="username">
<br/>
<label for="password">Password: </label><input type="password" name="password" id="password">
<button type="submit" name="Submit" >LOGIN!</button>
<!-- semua input akan dikirim dengan metode post dengan aksi ke dalam file hasilpost.php -->
</form>
</body>
</html>


code admin.php

<!DOCTYPE html>
<html>
<head>
<title>
HASIL Post
</title>
<script></script>
<style>
</style>
</head>
<body>
<!-- sesuaikan name pada tag input dengan key di dalam variabel superglobal $_POST karena akan menjadi key dalam array associative $_POST -->
<h1>SELAMAT DATANG, <?= $_POST["nama"];?></h1><br/>
<a href="login.php">LOGOUT</a>
</body>
</html>

0 comments:

Post a Comment