รับพารามิเตอร์ URL ใน PHP


190

ฉันพยายามส่ง URL เป็นพารามิเตอร์ url ใน php แต่เมื่อฉันพยายามรับพารามิเตอร์นี้ฉันก็ไม่ได้อะไรเลย

ฉันใช้รูปแบบ URL ต่อไปนี้:

http://localhost/dispatch.php?link=www.google.com

ฉันพยายามที่จะทำให้มันผ่าน:

$_GET['link'];

แต่ไม่มีอะไรกลับมา อะไรคือปัญหา?


15
แสดงรหัสเต็มของคุณ
Pekka

3
ทำvar_dumpจาก$_GETparam มันควรจะมี
Naftali aka Neal

1
ไม่$_REQUEST['link']ทำงานหรือไม่ โปรดทราบว่าคีย์ดัชนีlinkจะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่กับสิ่งที่อยู่ใน URL
Dutchie432

คุณไม่ได้ลอง$_GETแต่เกิดขึ้นเพื่อโพสต์เป็นคุณ?
James

แล้วทางแก้ปัญหานี้คืออะไร? มีปัญหาเดียวกัน
Ixx

คำตอบ:


283

$_GETไม่ใช่ฟังก์ชั่นหรือโครงสร้างภาษา - เป็นเพียงตัวแปร (อาเรย์) ลอง:

<?php
echo $_GET['link'];

โดยเฉพาะอย่างยิ่งมันเป็นsuperglobal : ตัวแปรในตัวที่บรรจุโดย PHP และมีให้บริการในทุกขอบเขต (คุณสามารถใช้งานได้จากภายในฟังก์ชั่นโดยไม่มีคำหลักสากล )

เนื่องจากตัวแปรอาจไม่มีอยู่คุณสามารถ (และควร) ตรวจสอบให้แน่ใจว่ารหัสของคุณไม่ทำให้เกิดการแจ้งเตือนด้วย:

<?php
if (isset($_GET['link'])) {
    echo $_GET['link'];
} else {
    // Fallback behaviour goes here
}

อีกวิธีหนึ่งหากคุณต้องการข้ามการตรวจสอบดัชนีด้วยตนเองและอาจเพิ่มการตรวจสอบเพิ่มเติมคุณสามารถใช้ส่วนขยายตัวกรอง :

<?php
echo filter_input(INPUT_GET, 'link', FILTER_SANITIZE_URL);

สุดท้าย แต่ไม่ท้ายสุดคุณสามารถใช้ตัวดำเนินการรวมศูนย์ (พร้อมใช้งานตั้งแต่PHP / 7.0 ) เพื่อจัดการพารามิเตอร์ที่ขาดหายไป:

echo $_GET['link'] ?? 'Fallback value';

14
หากคุณไม่ได้สิ่งนี้อย่างฉันอย่างที่คุณควรจะรู้ว่า 'ลิงก์' เป็นชื่อของตัวแปรในที่อยู่ URL! ดังนั้นด้วย $ _GET ['link']; คุณต้องป้อน URL ดังนี้: localhost /? link = test
Firzen

ฉันใช้ WAMP อยู่localhostและวิธีนี้ไม่ได้ผล http://localhost/station?type=2 echo $_GET['type'];คือnull
NineCattoRules

parse_str(parse_url($actual_link)['query'], $params);ในที่สุดผมก็ใช้ ข้อมูลเพิ่มเติมstackoverflow.com/a/11480852/4458531
NineCattoRules

คุณพูดว่า "$ _GET ไม่ใช่ฟังก์ชั่นหรือโครงสร้างภาษา - เป็นเพียงตัวแปร (อาเรย์)" แต่เราไม่ได้เข้าถึงค่าผ่านดัชนี แต่คุณเข้าถึงค่าผ่านทางสตริง นี่เป็นพจนานุกรมมากกว่าอาร์เรย์หรือไม่
ScottyBlades

1
@ScottyBlades ฉันกำลังพูดในบริบทของโครงสร้างข้อมูล PHP ใน PHP อาร์เรย์คือรายการที่เรียงลำดับของคีย์ / ค่าผสม ซึ่งแตกต่างจากภาษาอื่น ๆ (เช่น C หรือ JavaScript) เรียกว่า "อาร์เรย์"
ÁlvaroGonzález


19

เพื่อให้แน่ใจว่าคุณจะปลอดภัยอยู่เสมอโดยไม่ต้องใช้ตัวกรองรหัสที่ไม่พึงประสงค์ทุกชนิดใช้ตัวกรอง:

echo filter_input(INPUT_GET,"link",FILTER_SANITIZE_STRING);

อ่านเพิ่มเติมเกี่ยวกับฟังก์ชั่น php.net filter_inputหรือดูคำอธิบายของตัวกรองต่างๆ



10

คำตอบที่ยอมรับได้ดี แต่ถ้าคุณมีสถานการณ์เช่นนี้:

http://www.mydomain.me/index.php?state=California.php#Berkeley

คุณสามารถปฏิบัติต่อสมอชื่อเป็นสตริงแบบสอบถามเช่นนี้

http://www.mydomain.me/index.php?state=California.php&city=Berkeley

จากนั้นเข้าถึงแบบนี้:

$Url = $_GET['state']."#".$_GET['city'];

3

ฉันไม่ได้รับอะไรเลย$_GET["..."](เช่นprint_r($_GET)ให้อาร์เรย์ที่ว่างเปล่า) แต่ก็$_SERVER['REQUEST_URI']แสดงให้เห็นว่าสิ่งนั้นควรอยู่ที่นั่น ในที่สุดมันกลับกลายเป็นว่าฉันเพิ่งเข้าสู่หน้าเว็บเพราะ. htaccess ของฉันเปลี่ยนเส้นทางไปที่นั่น (ตัวจัดการ 404 ของฉันเป็นไฟล์. php เดียวกันและฉันได้พิมพ์ผิดในเบราว์เซอร์เมื่อทำการทดสอบ)

เพียงแค่เปลี่ยนชื่อหมายความว่ารหัส php เดียวกันทำงานเมื่อการเปลี่ยนเส้นทาง 404 ไม่เริ่มขึ้น!

ดังนั้นจึงมีวิธีที่ $_GETไม่สามารถคืนสิ่งใดแม้ว่ารหัส php อาจถูกต้อง



0

ใครก็ตามที่ไม่ได้อะไรกลับมาฉันคิดว่าเขาแค่ใส่ผลลัพธ์ไว้ในแท็ก html

แบบนี้:

<html>
<head></head>
<body>
<?php
echo $_GET['link'];
?>
<body>
</html>

5
ไม่จำเป็นต้องใช้แท็ก html เบราว์เซอร์ทั้งหมดแสดงผลข้อความธรรมดา
MarcoS

-1

ตามที่ Alvaro กล่าวว่า $ _GET ไม่ใช่ฟังก์ชัน แต่เป็นอาร์เรย์ที่มีพารามิเตอร์เพื่อให้คุณสามารถดึงองค์ประกอบหนึ่งจากอาร์เรย์นั้นโดยใช้

<?php
$link = $_GET['link'];
echo $link;
?>

OP ที่คาดหวัง:

www.google.com
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.