2015-03-25 2 views
0

Я столкнулся с вопросом на PHP, который предоставил образец кода, связанный с функциональностью тележки продукта. Когда я просмотрел образец кода, я натолкнулся на определенные условия PHP, если проверяет, была ли указана переменная, которой присвоено значение $ _POST [key], false. Ниже приведены примеры кода, связанные с проблемой, с которой я столкнулся.

nicepage.php

$id=$_GET['previd']; 
$SQL = "select * from pro where prId=".$id; 
$runSQL = mysql_query($SQL) or die(mysql_error()); 
$details = mysql_fetch_array($runSQL); 
echo "<p>Catalogue Item Number: ".$details['prId']; 
echo "<p>". strtoupper($details['prName']); 
echo "<p>".$details['prDescrip']; 
echo "<p><img src=images/".$details['prPicName'].">"; 
echo "<p>£".$details['prPrice']; 
echo "<p>".$details['prQuantity']." items for you to get!" ; 
echo "<form method=post action=greatpage.php>" ; 
echo "<p>Enter how many: "; 
echo "<input type=text name=newqu size=5 maxlength=3>"; 
echo "<input type=submit value='Get them'>"; 
echo "<input type=hidden name=newid value=".$id.">"; 
echo "</form>" ; 
echo "</center>"; 
echo "</body>"; 
echo "</html>"; 

greatpage.php

$theid=$_POST['newid']; 
$thequ=$_POST['newqu']; 
if (!$theid) 
{ 
echo "<p>Nothing new is added, show the stuff from before"; 
} 
else 
{ 
if (!$thequ or $thequ==0) 
{ 
echo "<p>Error!"; 
echo "<p><a href=nicepage.php>Enter correct value!</a>"; 
exit; 
} 
else 
{ 
$theSQL="select prQuantity from pro where prId=".$theid; 
$runtheSQL=mysql_query($theSQL) or die (mysql_error()); 
$info=mySQL_fetch_array($runtheSQL); 
$ourqu=$info['prQuantity']; 
if ($thequ > $ourqu) 
{ 
echo "<p>Not good!"; 
echo "<p><a href=nicepage.php> Do it again!</a>"; 
exit; 
} 
else 
{ 
echo "<p>Great, item added!"; 
$_SESSION['storage'][$theid]=$thequ; 
} 
} 
} 

Приведенные выше примеры кода обеспечивают части РНР-скриптов, связанных с этим вопросом.

Я относительно новый программист на PHP, поэтому прошу прощения за любые ошибки, которые я совершаю.

Я хотел бы узнать, почему $theid и $thequ проверяются, если они равны ложным, а не использовать функцию как isset($_POST['key']), чтобы проверить, если $_POST глобальные переменные установлены перед назначением на два PHP $theid и $thequ переменных.

И в приведенном выше примере кода, какие ситуации могут привести к тому, что !$theid и !$thequ являются истинными?

Я был бы чрезвычайно признателен всем, кто может решить эту головоломку.

+0

Прежде всего, пожалуйста, прочитайте о SQL Injection. –

+0

Те 'if (!$ theid) 'и подобные утверждения не проверяют, является ли значение ложным, а скорее, если это значение ложно, которое включает в себя null, пустую строку, пустой массив, строку, такую ​​как« 0 »и т. д.). Это, честно говоря, не очень хороший способ программирования. –

+0

Спасибо. Я думаю, что это хорошее объяснение некоторых сомнений, которые у меня были. –

ответ

1

Так давайте разберем это вниз

if(!$theid) 

Это плохой способ проверить, если переменная существует. Вы должны сделать что-то больше, как if(isset($_POST['newid'])), который будет окончательно сказать вам поле было представлено

if (!$thequ or $thequ==0) 

Опять же, мы имеем плохую проверку, чтобы увидеть, если значение существует, но второй один небрежный способ увидеть, если поле было опущено. Если вы отправите пустое поле, это будет значение '' или пустая строка. Поскольку пустая строка равна false y, вы можете проверить ее на anything PHP considers to be false. Так что '' == 0 будет правдой. Я бы хотя бы использовал '' или empty() вместо 0 (он обеспечивает лучшую читаемость).

Далее, ваш SQL широко открыт до SQL injection.

Наконец, пожалуйста, не используйте mysql_ функции, как they are deprecated and will soon be removed from PHP

0

Если вы используете isset(), он проверяет, существует ли переменная. так что если вы скажете

$id=""; 

результат будет ИСТИНА, потому что переменная существует. но пуст.

лучший способ;

if(empty($id)) { 

//your code 
} else { 

//your code when NOT empty 
} 
+0

Но когда $ theid или $ the_ становятся ложными, как указано в коде. Поскольку этот код является образцом, который я получил из вопросника, как упоминалось ранее, я хотел бы знать, когда возникает такой экземпляр. Я искал наизнанку для такого случая, но я не смог узнать хотя бы одного. –

+0

Какой экземпляр вы имеете в виду? –

+0

Когда $ theid или $ the становятся ложными ... –

Смежные вопросы