Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果MySQL/PHP中的字段为空,则隐藏该字段_Php_Mysql - Fatal编程技术网

如果MySQL/PHP中的字段为空,则隐藏该字段

如果MySQL/PHP中的字段为空,则隐藏该字段,php,mysql,Php,Mysql,我的数据库中有一个名为urlOne的字段。我希望它只回显html,如果它有一个URL作为一个值。这是我的密码: $id = $_REQUEST['id']; $query = "SELECT * FROM sites WHERE id = $id LIMIT 1"; $result = mysql_query($query); $url = $row['urlOne']; while($row = mysql_fetch_assoc($result)){ echo "<sectio

我的数据库中有一个名为
urlOne
的字段。我希望它只回显html,如果它有一个URL作为一个值。这是我的密码:

$id = $_REQUEST['id'];
$query = "SELECT * FROM sites WHERE id = $id LIMIT 1";
$result = mysql_query($query);
$url = $row['urlOne'];
while($row = mysql_fetch_assoc($result)){
    echo "<section class='prop-desc'>";
    echo $desc;
    echo "</section>";
    $result = mysql_query("SELECT * FROM sites WHERE $id LIMIT 1");
    if(!empty($row['urlOne'])){
        echo "<h4 class='cta'><a href='$url'>Launch Site</a></h4>"
    }
}
$id=$\u请求['id'];
$query=“从id=$id LIMIT 1的站点选择*”;
$result=mysql\u query($query);
$url=$row['urlOne'];
while($row=mysql\u fetch\u assoc($result)){
回声“;
echo$desc;
回声“;
$result=mysql_查询(“从$id限制为1的站点中选择*);
如果(!empty($row['urlOne'])){
回声“”
}
}

首先。你错过了
位于echo语句末尾。我不确定,这是否是复制粘贴问题

第二。为什么不检查$url呢。如果全部都是关于$url打印

if(!empty($url)){
echo "<h4 class='cta'><a href='$url'>Launch Site</a></h4>";
}
if(!empty($url)){
回声“;
}
在工作时,它实际上并不正确

mysql.*
函数不再维护,社区已开始恢复。相反,你应该学习并使用或

如果你不能决定,应该帮助你选择。不过,您应该知道,PDO能够与不同类型的RDBMS一起工作,而MySQLi是为特定的RDBMS而设计的。如果您决定使用PDO,建议您遵循

对于您的特定情况,您的代码应该更像这样:-

$dsn = 'mysql:dbname=dbname;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $db = new PDO($dsn, $user, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$id = someMethodOfValidation($_POST['id']);
注意:-您应该详细说明$u POST或$u GET;因为$u请求可能来自其中任何一个,您应该始终知道您的输入来自何处

应该始终验证用户输入,您的方法会让您完全接受SQL注入,因此需要编写
someMethodOfValidation()
位来满足您的预期输入。在您的例子中,看起来您需要一个整数值,因此您的验证可以像
$id=(int)$\u POST['id']一样简单

在谈论SQL注入时,传统的做法是讲述小Bobby表的故事,因此:-

要继续您的代码,请执行以下操作:-

$stmt = $db->prepare("SELECT * FROM sites WHERE id=:id");
$stmt->execute(array(':id' => $id));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($rows as $row){
    if(!empty($row['urlone']){
        echo "<h4 class='cta'><a href='{$row['urlone']}'>Launch Site</a></h4>";
}
$stmt=$db->prepare(“从id=:id的站点选择*);
$stmt->execute(数组(':id'=>$id));
$rows=$stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($行作为$行){
如果(!empty($row['urlone'])){
回声“;
}

我再怎么强调也不为过,你上面的代码是不安全的,不应该在实时服务器上使用。不要费心学习使用mysql_*函数,你将浪费时间。PDO并不难学,事实上,一旦你掌握了窍门,它就相当简单了。上面链接的教程将帮助你很好地使用PDO成功。

为什么不“从urlOne不为null的站点中选择*”?@ReyGonzales说了什么。或者添加一个if块来检查$url变量的值。为您发布一个新答案