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

时间:2012-07-09 18:58:48

标签: php mysql

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

$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>"
    }
}

2 个答案:

答案 0 :(得分:2)

虽然Rab Nawaz's answer有效,但这并不正确。

mysql_*功能已不再维护,社区已开始deprecation process。相反,您应该了解prepared statements并使用PDOMySQLi

如果您无法决定,this article应该可以帮助您选择。虽然,您应该知道,PDO能够使用不同类型的RDBMS,而MySQLi是针对特定的RDBMS而制作的。如果您决定使用PDO,建议您按照this tutorial

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

$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']);

注意: - 您应该具体说明$ _POST或$ _GET;因为$ _REQUEST可能来自任何一个,你应该总是知道你的输入来自哪里。

应始终验证用户输入,您的方法会让您对SQL注入保持开放状态,因此您需要编写someMethodOfValidation()位以符合您的预期输入。在您的情况下,您似乎期望一个整数值,因此您的验证可能就像$id = (int)$_POST['id'];一样简单。

在谈论SQL注入来讲述Little Bobby Tables的故事时,这是传统的,所以这里是: -

enter image description here

继续使用您的代码: -

$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>";
}

我无法强调您上面的代码是不安全的,不应该在实时服务器上使用。不要费心学习使用mysql_ *函数,你会浪费你的时间。 PDO并不难学,事实上,一旦掌握了它,它就非常简单。上面链接的教程将帮助您顺利完成PDO的使用。

答案 1 :(得分:0)

第一。你在echo语句结束时错过了;。我不确定,是否是复制粘贴问题。

秒。为什么不检查$ url。如果它全部是关于$ url打印

if(!empty($url)){
echo "<h4 class='cta'><a href='$url'>Launch Site</a></h4>";
}