PHP + MySQL problemleri: (

5 Cevap php

Bu kod ile sorun havin ediyorum:

if ($_GET['offline']) {$extranet = $_GET['offline'];} else {$extranet = $online;}
$sql = mysqli_query($db,"UPDATE tbl_system SET value = '$extranet' WHERE property = 'extranet'");
echo $_GET['offline'];
echo $extranet;
echo $online;

In the database, the value of the field where the property = extranet is 1. Results of echo:

$_GET['offline'] = 0 
$extranet        = 1
$online          = 1

Şimdi, belli ki, Burada bir terslik var.

?app=admincp&offline=0, yani $_GET['offline'] sorun değildir: Bu GET vermek için URL.

, Sorun varsa açıklamada yalan gerekir, ama ben bunu anlamaya olamaz

Herhangi bir fikir?

5 Cevap

$ _GET ['Offline'], 0, ve 0 false değerlendirir, böylece deyimi doğru gidiyor. çevrimdışı kullanmak zorunda argüman olarak geçirilen olup olmadığını kontrol etmek istiyorsanız isset()

if (!isset($_GET['offline'])) {$extranet = $_GET['offline'];} else {$extranet = $online;}

Eyvah! Karim adlı ek olarak girişleri comment-sterilize! Sen bir URL parametresi alarak ve doğrudan SQL sorgusunun içine koyarak ediyoruz. Bir url

?app=admincp&offline=';DROP table tbl_system;--

Seni mahveder!

if ($_GET['offline'])

Bu dize "0" PHP için yanlış değerlendirir çünkü return false, bu yüzden olacak ifadenin koşul true olarak değerlendirmek asla eğer. isset or array_key_exists kullanmak yerine. örneğin:

if (isset($_GET['offline'])) { ... }

veya:

if (array_key_exists('offline',$_GET)) { ... }

Sizin durumda, değeri tam dize sıfır "0" olup olmadığını bilmek istersiniz. Ben kullanıyorum tavsiye ederim strcmp:

if (strcmp($_GET['offline'],"0") === 0) {
    $extranet = $_GET['offline'];
} else {
    $extranet = $online;
}
$sql = mysqli_query($db,"UPDATE tbl_system SET value = '$extranet' WHERE property = 'extranet'");
echo $_GET['offline'];
echo $extranet;
echo $online;

$_GET['offline'] verdiğiniz URL sıfır, yani if($_GET['offline']) ve bu blokta her şeyin isabet asla. isset() yerine kullanın.

if (strcmp($_GET['offline'],"0") === 0) {
    $extranet = $_GET['offline'];
} else {
    $extranet = $online;
}

Bu, daha iyi kullanmak için, $ _GET ['offline'] ayarlanmamış durumda bir hata atar !isset($_GET['offline'])