PHP MYSQL每次更改字段名称

时间:2011-02-23 21:46:01

标签: php mysql

我有一个存储人们快速链接的数据库。这是一种非常基本的快速链接存储方法。数据库如下所示:

full_name | 1url | 1name | 2url | 2name | 3url | 3名称| 4url | 4name | 5url | 5name

^这一直持续到10.我知道这是一个糟糕的方式,但这是一个不专业的网站。

我想将结果放入有序列表中。但我不确定如何每次更改数字(1url或2url)?

所以目前我在PHP中设置了这样的

$result = mysql_query(SELECT * FROM `links` WHERE `full_name`='$loggedin')or die (mysql_error());
   while($row = mysql_fetch_array($result)){
     echo '<li><a href="';
     echo $row['1url'];
     echo '"></a></li>';            
   }

但我没有运气!我不确定自己应该做些什么。我希望它显示另一个带有<li>的{​​{1}}以及找到的每一行的链接名称和链接名称。

谢谢!请具体跟我说,因为这是新的事! :d

编辑:

我也遇到了另一个问题。我使用了人们的答案中的代码,其中大部分都有效。但是,如果其中一个字段为空(因此用户只有6个快速链接),则仍会显示<a>。现在我无法看到这个问题。 :/

解决方案:

这是有效的:

<li>

5 个答案:

答案 0 :(得分:1)

$result = mysql_query("SELECT * FROM `links` WHERE `full_name`='$loggedin'")or die (mysql_error());
   while($row = mysql_fetch_array($result)){
     for($i = 1; $i < 10; $i++)
     {
         echo '<li><a href="';
         echo $row[$i . 'url'];
         echo '"></a></li>';
     }            
   }

请注意,这非常hacky ...我会用3列(可能是4个使用自动增量进行排序)实现它,然后根据用户选择行,发出每一行。这将删除10个网址限制。

修改

关于第二个问题,看一下PHP'empty'函数,如果函数返回true,则断开/继续循环。

答案 1 :(得分:1)

稍微更改数据库设置会更清晰,更容易。你可以有两个表:

用户

  • id:每个用户的唯一ID,可能是某种类型的自动增量int
  • full_name:就像您在表格中使用它一样

<强> quick_links

  • id:快速链接ID,可能是自动增量int(或者您可以在user_id + order上执行主索引)
  • user_id:告诉我们此quick_link属于谁的用户ID
  • name:快速链接的名称
  • url:快速链接的网址
  • 订单:在
  • 中显示此链接的顺序

然后你可以简单地做一些像

这样的事情
$userid_result = mysql_query(
    "SELECT `id` from `users` WHERE `full_name` = $loggedin;"
);
$row = mysql_fetch_row($userid_result);
$userid = $row[0];

$links_result = mysql_query(
    "SELECT * from `quick_links` WHERE `user_id` = $userid ORDER BY `order` ASC;"
);

while($quick_link = mysql_fetch_object($links_result))
{
    printf("<li><a href=\"%s\">%s</a></li>", $quick_link->url, $quick_link->$name);
}

当然,您需要在那里进行一些错误检查,但这会让您有所了解。

答案 2 :(得分:0)

您需要将SQL查询作为包含在“...”中的字符串传递:

$result = mysql_query( "SELECT * FROM `links` WHERE `full_name`='$loggedin'" )
             or die (mysql_error());

$i = 0;

while($row = mysql_fetch_array($result)){

     $attributeURL  = $i . 'url';
     $attributeName = $i++ . 'name';

     echo '<li>'
        . '<a href="' .  $row[ $attributeURL ] . '">' .  $row[ $attributeName ] . </a>'
        . '</li>'
        ;            


}

答案 3 :(得分:0)

你需要在select语句周围添加一些双引号:

$result = mysql_query("SELECT * FROM `links` WHERE `full_name`='$loggedin'") or die (mysql_error());
   while($row = mysql_fetch_array($result)){
     echo '<li><a href="';
     echo $row['1url'];
     echo '"></a></li>';            
   }

答案 4 :(得分:0)

while ($row = mysql_fetch_array($result))
{
  $full_name = array_shift($row);
  for ($i = 0; $i < 10; ++$i)
  {
    echo '<li><a href=' . htmlspecialchars(array_shift($row)) . '>';
    echo array_shift($row);
    echo '</a></li>';
  }
}

array_shift返回数组中的第一个元素,同时将其从数组中删除。因此,上面的代码从记录中删除full_name字段,然后迭代记录的其余部分,在每次迭代时删除并打印URL及其相应的名称。

htmlspecialchars用于确保创建有效的a - 标记。根据链接名称的来源,它也应该用在链接名称上。