Інфармацыя пра PHP $ _GET URL

Я спрабую зрабіць скрыпт, які выцягвае інфармацыю з URL, напрыклад, index.php? Picid = 33409 , і выкарыстоўваць гэты лік (у дадзеным выпадку 33409), каб пацягнуць малюнак, захаванае ў база дадзеных як нумар малюнка 33409.

Аднак, калі я выкарыстоўваю гэты код, ён працуе толькі правільна, калі ёсць picid ў URL. Калі ёсць толькі index.php, то код паказвае ўсе, што ў кожным, калі функцыі (якія я не хачу гэта рабіць), і ён кажа мне, што «Заўвага: Undefined індэкс: picid» прыкрую памылку ,

Любая дапамога будзе прынятая з удзячнасьцю!

<?php
if(empty($_GET['picid']))
    {
    $set="0";
    }
if(isset($_GET['picid'])) 
    {
    $set="1";
    }
if($set="0")
    {
   //code to do something
    }
if($set="1")
    {
    echo "all set";
    $picid = $_GET['picid'];
   //code to do something completely different using the picid
    }
?>
2
Замест таго каб выкарыстоўваць пусты вы можаце проста ўсталяваць $ набор 0, вышэй Исеть , то, калі $ _ GET значэнне усталяваны $ набор будзе зменены на 1. Акрамя таго, вы павінны выкарыстоўваць інакш, калі - вы ўжо праверылі, калі значэнне пуста, так што няма ніякай неабходнасці затым праверыць з Исеть .
дададзена аўтар James Donnelly, крыніца
чаму не сума вашага кода калі (пуста ($ _ GET [ 'picid'])) {/ * код, каб зрабіць што-то * /} яшчэ {$ picid = $ _GET [ 'picid']; ...} ? У дадатку да відавочнай памылцы прысвойвання замест параўнання.
дададзена аўтар AD7six, крыніца

10 адказы

У вашым калі заявы вы карыстаецеся аператар прысвойвання = о, тады вы павінны выкарыстоўваць параўнання ==.

3
дададзена

Вы прысвойванне значэння як лагічнае ўмова, замест таго, каб мець лагічнае выраз.

Замест

if($set = "1")

Вы павінны выкарыстоўваць

if($set == "1")
1
дададзена

You don't need to do empty and isset

Вы можаце зрабіць гэта з terniary заяву

$picid = (isset($_GET['picid')) ? $_GET['picid'] : null;

Гэта ўсталюе $ picid на значэнне з URL, калі ёсць адзін, або нулявым калі не

1
дададзена

Апавяшчэнне відавочна. Калі вы маеце на ўвазе толькі index.php, то калі ўмова будзе даваць апавяшчэнне. Паспрабуйце некаторыя рэчы, як

if(isset($_GET['picid'])&&$_GET['picid']!=''){
// the other conditions
}
1
дададзена

Паспрабуйце выкарыстоўваць Исеть функцыі. гэта hould быць дастаткова.

if(isset($_GET['picid']){
   $set=1;
}else{
   $set=0;
}
1
дададзена

Я хацеў бы прапанаваць змяніць свой код логікі на нешта накшталт гэтага:

$picid = 0;

if (isset($_GET['picid']) {
 $picid = intval($_GET['picid']);
}

if ($picid > 0) {
  //fetch it from the database
} else {
  //
}

Вы мяркуеце, што няма picid прыходзіць з URL. Калі ёсць адзін у GET Params, выкарыстоўвайце цэлую частку яго (каб пазбегнуць магчымых ін'екцыі SQL). Калі яго няма, то яго значэнне застаецца першапачатковы адзін, і вы робіце іншыя рэчы.

0
дададзена

Выкарыстоўвайце array_key_exists :

<?php

    if (array_key_exists('picid', $_GET)) {
         $picid = $_GET['picid']
        //code to do stuff with picid
    } else {
        //code to do stuff when no picid is provided
    }
?>
0
дададзена

It's better to use intval()

$picid = isset($_GET['picid']) ? intval($_GET['picid'],0) : 0;

if($picid)
{
  //do something with it
}
else
{
  //picid doesn't exists
}
0
дададзена
if (!empty($_GET['picid'])) {
    echo "all set";
    $picid = $_GET['picid'];
   //code to do something completely different using the picid
} else {
   //code to do something
}
0
дададзена
if($set="0") <-- problem
{
// code to do something
}
if($set="1") <-- probelem 
{
echo "all set";
$picid = $_GET['picid'];
// code to do something completely different using the picid
}

тыя павінны быць == ня =

0
дададзена