2013-05-22 2 views
-2

Я пытаюсь создать сценарий, который извлекает информацию из URL-адреса, такого как index.php?picid=33409, и использовать этот номер (в этом случае 33409), чтобы вытащить изображение, которое сохраняется в базе данных, как номер изображения 33409.

Однако, когда я использую приведенный ниже код, он работает только при наличии picid в URL-адресе. Если есть только index.php, тогда код показывает все в каждой функции if (что я не хочу делать), и это говорит мне, что "Notice: Undefined index: 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 
    } 
?> 
+0

Вместо того чтобы использовать 'empty' вы можете просто установить' $ set' до 0 над 'isset', то если значение '$ _GET' установлено' $ set' будет изменено на 1.Также вы должны использовать 'else if' - вы уже проверили, пусто ли это значение, поэтому нет необходимости проверять его с помощью' isset'. –

+0

Почему не сумма вашего кода 'if (empty ($ _ GET ['picid'])) {/ * код для чего-то * /} else {$ picid = $ _GET ['picid']; ...} '? В дополнение к очевидной ошибке присваивания вместо сравнения. – AD7six

ответ

3

В ваших операторах if вы используете оператор = присваивания, тогда как вы должны использовать сравнение ==.

1

Вы назначаете значение в виде логического условия вместо булевского выражения.

Вместо

if($set = "1") 

вы должны использовать

if($set == "1") 
1

Вам не нужно делать empty и isset

Вы могли бы сделать это с terniary заявление

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

Это установит $picid на значение из URL, если есть один или null если не

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

Я предлагаю изменить свой код логики на что-то вроде этого:

$picid = 0; 

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

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

Вы предполагаете, что нет picid, исходящих из URL-адреса. Если в параметрах GET есть один, используйте его целочисленную часть (чтобы избежать потенциальных инъекций SQL). Если его нет, его значение остается первоначальным, и вы делаете другое.

1

Попробуйте использовать isset Функция. этого должно быть достаточно.

if(isset($_GET['picid']){ 
    $set=1; 
}else{ 
    $set=0; 
} 
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
if (!empty($_GET['picid'])) { 
    echo "all set"; 
    $picid = $_GET['picid']; 
    // code to do something completely different using the picid 
} else { 
    // code to do something 
} 
1

Уведомление очевидна. Если вы ссылаетесь только на index.php, условие if даст уведомление. Попробуйте некоторые вещи, как

if(isset($_GET['picid'])&&$_GET['picid']!=''){ 
// the other conditions 
} 
0

Это лучше использовать intval()

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

if($picid) 
{ 
    //do something with it 
} 
else 
{ 
    //picid doesn't exists 
}