【问题标题】:Using php switch statement to display an image url in an html table from a mysql query使用 php switch 语句在 mysql 查询的 html 表中显示图像 url
【发布时间】:2018-04-21 02:57:43
【问题描述】:

我有一个 MySQL 表字段,其中包含一个指向图像的 URL。我正在使用 php 并希望图像与其他字段一起显示在表格中。

我想我需要使用 PHP Switch 语句并引用 Row('Name') 或 Field Ref Number 来创建代码。我在 classic-asp 中可以正常工作,但需要在 php 中编写代码。

$result = mysql_query("SELECT sometext,urlvalue,somemoretext FROM Table");
if (!$result) {
    die("Query to show fields from table failed");

    // Table fields
    // sometext
    // urlvalue  an http image address such as http://www.example.com/image.jpg"
    // somemoretext

    $fields_num = mysql_num_fields($result);

    echo "<table border='1'>
        <tr bgcolor='yellow' align='left'>";
            for($i=0; $i<$fields_num; $i++) {
                $field = mysql_fetch_field($result);
                echo "<th>{$field->name}</th>";
            }
            echo "\n";

            // printing table rows
            while($row = mysql_fetch_row($result)) {
                echo "<tr>";

                    // $row is array... foreach( .. ) puts every element
                    // of $row to $cell variable
                    foreach($row as $cell)
                        switch $fields_num {
                            case "2":

                            // result cell looks like this ---->
                            // <td><a target='_blank'  href='http://www.example.com/image.jpg'><img src='http://http://www.example.com/image.jpg'></a></td>

                                echo "<td><a target='_blank' href='" . $cell ."'><img src='" . $cell ."'></a></td>";
                                break;
                            default:
                                echo "<td>$cell</td>";
                                echo "</tr>\n";
                        }
                        mysql_free_result($result);

【问题讨论】:

  • 我可以提供三个建议:1.不要回显,而是构建一个字符串,并在最后回显它 2.如果你能清理源代码,提供准确的帮助会更容易 3 . 你能描述一下你遇到的实际问题 - 即你认为你的输出应该是什么,而不是你实际得到的。
  • 请停止使用mysql_函数。
  • switch 的参数必须在括号中:switch ($fields_num) { ... }
  • 请详细说明您的表结构和列名,以便我们为您提供明确的答案。
  • @John 您是否事先知道您在查询中选择了哪些行?还是您在 SELECT 子句中使用 * ?你的项目有多变数?

标签: php html mysql switch-statement


【解决方案1】:

如果您知道将要访问的列并且知道哪一列是 url,那么您可以使用以下基于 mysqli_ 的代码块和内部循环中的条件来检查匹配的列名字。

如果您不知道要处理的列,可以使用filter_var($val, FILTER_VALIDATE_URL),假设您的结果集中只有一个 url 字符串。如果您选择第二个选项,对我的代码块的一个副作用是您将重新设计 &lt;th&gt; 部分。

我拒绝使用mysql_ 函数编写答案,所以请借此机会更新您的代码。为了您的调试方便,我已经包含了连接声明和基本错误检查。 (切勿在您的公共网站上显示错误消息。)

未经测试的代码:

$columns = ['sometext', 'urlvalue', 'somemoretext'];
if (!$mysqli = new mysqli("localhost", "my_user", "my_password", "my_db")) {
    echo "Database Connect Error: " , $mysqli->connect_error;
} elseif (!$result = $mysqli->query("SELECT `" . implode('`, `', $columns) . "` FROM `Table`")) {
    echo "Query Syntax Error: " , $mysqli->error;
    if (!$result->num_rows) {
        echo "No Rows Found";
    } else {
        echo "<table border='1'>";
            echo "<tr bgcolor='yellow' align='left'>";
                echo "<th>" , implode("</th><th>", $columns) , "</th>";
            echo "</tr>";
            while ($row = $result->fetch_assoc()) {
                echo "<tr>";
                    foreach ($row as $col => $val) {
                        echo "<td>";
                            if ($col == 'urlvalue') {  // or if (filter_var($val, FILTER_VALIDATE_URL)) {
                                echo "<a target='_blank' href='$val'><img src='$val'></a>";
                            } else {
                                echo "$val";
                            }
                        echo "</td>";
                    }
                echo "</tr>";
            }
        echo "</table>";
    }
}

【讨论】:

    【解决方案2】:

    我不完全确定您的意思,但不是引用字段编号,而是引用名称。

            if ($result->num_rows > 0) {
                echo "<table border='1'><tr bgcolor='yellow' align='left'>";
                while($row = $result->fetch_assoc()) {
                    echo "<th>".$row['field-name']."</th>";
                    echo "<tr>";
                       echo "<td><a target='_blank' href='" . $row['field-name'] ."'><img src='" . $row['field-name'] ."'> 
                     </a> 
                </td>";
                    echo "</tr>";
                }
               echo "</table>";
            }
    

    【讨论】:

    • if ($result-&gt;num_rows &gt; 0) {的位置没用; while 已经有这个效果了。事实上,您的第一个 &lt;tr&gt; 需要在循环中,因为现在您的代码已损坏。请修复你的标签。你不需要&gt; 0
    • 您绝不会执行 OP 询问的列号检查 (2)。
    • 他没有问看到“我认为我需要使用 PHP Switch 语句并引用 Row('Name') 或 Field Ref Number 来创建代码”我告诉他参考名字。请参阅stackoverflow.com/help/be-nice 考虑您在此处的行为方式并说您是在报告最后一个人。
    • 我告诉他们我标记他们的确切原因——这就是反馈。你的答案不正确。查看&lt;tr&gt; 标签的结构。
    • 我的 TR 在循环中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    相关资源
    最近更新 更多