我的php文件的代码如下:
$sql = "SELECT Proizvod.PROIZVODID, Proizvod.NAZIV, Proizvod.SLIKA
FROM PROIZVOD_GRUPE
LEFT JOIN Proizvod ON PROIZVOD_GRUPE.PROIZVODID = Proizvod.PROIZVODID WHERE PROIZVOD_GRUPE.PROIZVOD_GRUPAID = 1 AND AKTIVAN = 1;";
问题是第二行,如果它返回0行,则会使php文件崩溃。当我删除第二行时,我的php正常加载。
该文件的完整代码为:
<?php
require('../Php/ConfigBaza.php');
$sql = "SELECT Proizvod.PROIZVODID, Proizvod.NAZIV, Proizvod.SLIKA
FROM PROIZVOD_GRUPE
LEFT JOIN Proizvod ON PROIZVOD_GRUPE.PROIZVODID = Proizvod.PROIZVODID WHERE PROIZVOD_GRUPE.PROIZVOD_GRUPAID = 1 AND AKTIVAN = 1;";
$result = $mysqli->query($sql);
if($result->num_rows < 1)
{
echo("Doslo je do greske prilikom ucitavanja proizvoda!");
die();
}
else
{
echo("
<div id='overlay' style='display: none; position: fixed; top: 0; bottom: 0; left: 0; right: 0; z-index: 999; background-color: hsla(0, 0%, 50%, 0.39);'>
<div id='kolicina_overlay' style='display: none; position: fixed; width: 500px; height: 110px; margin-top: -55px; margin-left: -150px; top: 50%; left: 50%; text-align: center; background-color: #2196F3; z-index: 1000'>
<p style='font-weight: bolder'>Unesite zeljenu kolicinu!</p>
<input type='number' value='1' style='width: 50px'>
<div id='kolicina_potvrdi_button' style='padding: 10px; color: white;' onclick='UnesiKolicinu()'>Potvrdi</div>
</div>
</div>
");
while($proizvod = mysqli_fetch_assoc($result))
{
$pid = $proizvod['PROIZVODID'];
$naziv = $proizvod['NAZIV'];
$slika = $proizvod['SLIKA'];
$rabat = $proizvod['POPUST'];
if(!isset($slika) || empty($slika))
{
$slika = "https://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/No_image_available.svg/600px-No_image_available.svg.png";
}
echo("
<div class='proizvod_Box' id='$pid' onclick='IdiNaProizvod(id)'>
<div class='proizvod_Naslov'>
<p>$naziv</p>
</div>
<div class='proizvod_Slika'>
<img src='$slika'>
</div>
</div>
");
}
}
?>
那为什么会发生以及如何预防呢?
我遇到的是,假设我的PROIZVODID = 1
和表PROIZVOD_GRUPE
内没有记录,但是在Proizvod
内却有记录,{{1} 1}},然后如果我在AKTIVAN = 1
内有PROIZVODID = 1
的行但仍未与PROIZVOD_GRUPE
的{{1}}相遇,它将显示崩溃
答案 0 :(得分:0)
首先,您的脚本容易受到XSS攻击。我看不到使用htmlentities或htmlspecialchars()函数将输出变量转义的位置。请始终在生产中使用 error_reporting(0); 在屏幕上隐藏您的php错误通知
您的问题似乎是您指定的代码行中的mysqli_connection参数。
根据我的联系,我对此进行了更改
$result = $mysqli->query($sql);
到
$result = mysqli_query($conn, $sql);
要进行测试,请按如下所示创建表并将其插入
create table Proizvod(id int primary key auto_increment, PROIZVODID varchar(100), NAZIV varchar(100), SLIKA varchar(100)
,AKCIJSKI_ARTIKAL varchar(100), AKTIVAN varchar(100),
POPUST varchar(100));
insert into Proizvod(PROIZVODID,NAZIV,SLIKA,AKCIJSKI_ARTIKAL,AKTIVAN,POPUST)values
('pp','naz','sik','1','1','image.png');
<?php
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '';
$dbname = 'angular';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
if(! $conn ) {
die('Could not connect: ' . mysqli_error());
}
echo 'Connected successfully<br>';
$sql = "SELECT PROIZVODID, NAZIV, SLIKA FROM Proizvod WHERE AKCIJSKI_ARTIKAL = 1 AND AKTIVAN = 1;";
//$result = $mysqli->query($sql);
$result = mysqli_query($conn, $sql);
if($result->num_rows < 1)
{
echo("Doslo je do greske prilikom ucitavanja proizvoda!");
die();
}
else
{
echo("
<div id='overlay' style='display: none; position: fixed; top: 0; bottom: 0; left: 0; right: 0; z-index: 999; background-color: hsla(0, 0%, 50%, 0.39);'>
<div id='kolicina_overlay' style='display: none; position: fixed; width: 500px; height: 110px; margin-top: -55px; margin-left: -150px; top: 50%; left: 50%; text-align: center; background-color: #2196F3; z-index: 1000'>
<p style='font-weight: bolder'>Unesite zeljenu kolicinu!</p>
<input type='number' value='1' style='width: 50px'>
<div id='kolicina_potvrdi_button' style='padding: 10px; color: white;' onclick='UnesiKolicinu()'>Potvrdi</div>
</div>
</div>
");
while($proizvod = mysqli_fetch_assoc($result))
{
$pid =htmlentities($proizvod['PROIZVODID'], ENT_QUOTES, "UTF-8");
$naziv = htmlentities($proizvod['NAZIV'], ENT_QUOTES, "UTF-8");
$slika = htmlentities($proizvod['SLIKA'], ENT_QUOTES, "UTF-8");
//$rabat = htmlentities($proizvod['POPUST'], ENT_QUOTES, "UTF-8");
if(!isset($slika) || empty($slika))
{
$slika = "https://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/No_image_available.svg/600px-No_image_available.svg.png";
}
echo("
<div class='proizvod_Box' id='$pid' onclick='IdiNaProizvod(id)'>
<div class='proizvod_Naslov'>
<p>$naziv</p>
</div>
<div class='proizvod_Slika'>
<img src='$slika'>
</div>
</div>
");
}
}
?>