2012-07-09 51 views
0

我在我的数据库中有一个名为urlOne的字段。如果它有一个URL作为值,我希望它只能回显HTML。这里是我的代码:隐藏一个字段,如果它在MySQL/PHP中为空

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

你为什么不“从urlOne不为空的地方选择*”? – 2012-07-09 19:00:43

+0

@ReyGonzales说什么。或者添加一个if块来检查你的$ url变量的值。 – 2012-07-09 19:01:32

+0

为你发布一个新的答案http://stackoverflow.com/a/11409311/212940 – vascowhite 2012-07-10 08:22:56

回答

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

注: -你应该specificy $ _POST或$ _GET;因为$ _REQUEST可能来自任何一方,您应该始终知道您的输入来自哪里。

用户输入应该总是被验证,你的方法让你开放SQL注入,因此你需要编写someMethodOfValidation()位,以适应你的预期输入。在你的情况,它看起来像你期待一个整数值,所以你的验证可以像$id = (int)$_POST['id'];一样简单。

当谈论SQL注入告诉小博表的故事,所以这里是它的传统: -

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。

+0

+1这是迄今为止最好的答案 – ManseUK 2012-07-10 08:24:52

0

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

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

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

谢谢,这工作。 – Yahreen 2012-07-09 19:04:46

相关问题