【问题标题】:Generate a dictionary from mySQL Table in PHP在 PHP 中从 mySQL 表生成字典
【发布时间】:2014-09-03 19:07:51
【问题描述】:

我正在为我的 php 网站开发一个项目,该项目需要从表单中获取用户输入并将其与存储在数据库表中的值进行比较。我是 php 新手,但我的 Objective-C 部分说我应该使用字典。我发现了很多关于数组的教程,没有关于字典的教程,而且它们都破坏了我的代码并且在页面上什么也没有显示。我应该使用数组还是字典,我做错了什么?示例表如下。

+------------------------------+
|            codes             |
+----+--------------+----------+
| id | access_codes | code_used|
+----+--------------+----------+
|  0 |     FS1      |    NO    |
+----+--------------+----------+
|  1 |     FS2      |    NO    |
+----+--------------+----------+

index.php:

<?php
    require_once('../../config.php');
?><!DOCTYPE html>
<html>
    <head>
        <title>Redeem Code</title>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <!--
        <script>
            function SubmitForm() {
                //Javascript needed?
            }
        </script>
        -->
    </head>
    <body>
        <form action="?checkCode" method="Post">
            <p>Access Code: </p><input type="text" name="lname"><br>
            <input type="submit" value="Submit">
        </form>
    </body>
<html>

<?php
    function checkCode() {
        $result = mysqli_query($con,"SELECT access_codes FROM codes");
        while($row = mysql_fetch_array($result)){
            $access_code=$row['access_codes'];
            $code_array[] = $access_code;
        }
        echo $code_array;
        mysqli_close($con);
    }

?>

编辑:

<?php
    require_once('../../config.php');
        $con=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
        if (mysqli_connect_errno()) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }
        $result = mysqli_query($con,"SELECT access_codes FROM codes");
        while($row = mysql_fetch_array($result)){
            $access_code=$row['access_codes'];
            if ( array_key_exists( $access_code, $code_array ) ) {
                $code_array[$access_code] ++;
            }
            else {
                $code_array[$access_code] = 1;
            }
        }
        foreach ($code_array as $access_code => $count) {
            echo sprintf("<tr> <td> %1$s </td><td> %2$d </td></tr>", $access_code, $count);
        }
        mysqli_close($con);

?>

【问题讨论】:

  • 在 PHP 中,数组 字典 - 除非我误解了您对“字典”的定义。

标签: php arrays dictionary mysqli


【解决方案1】:
echo $code_array;  // wrong

你不能“写”一个字段。你可以使用print_r声明:

print_r($code_array);

【讨论】:

    【解决方案2】:

    就像@Qix 所说,php 数组可以用作字典。当您将它们用作数组时,它们是整数索引的。但它们也可以通过键索引。

    例如,此代码将通过创建一个由值索引的数组(字典)来计算 access_codes 值的出现次数,其中每个值都包含一个计数。

        while($row = mysql_fetch_array($result)){
            $access_code=$row['access_codes'];
            if ( array_key_exists( $access_code, $code_array ) ) {
                $code_array[$access_code] ++;
            }
            else {
                $code_array[$access_code] = 1;
            }
         }
    

    您不能只回显一个复杂的数据类型,您必须遍历它。您可以使用foreach 来执行此操作。

     foreach ($code_array as $access_code => $count) {
         echo sprintf("<tr> <td> %1$s </td><td> %2$d </td></tr>", $access_code, $count);
     }
    

    有时在调试 PHP 时,在浏览器中查看源代码会很有帮助,这样您就可以查看正在发生的事情。

    【讨论】:

    • 我创建了编辑,如Edit: 代码部分所示。但是,页面上没有显示任何内容。我删除了 HTML 以减少混乱。
    • 查看源代码...有助于调试。
    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 2014-05-17
    • 2013-07-02
    • 2010-11-24
    • 2014-05-01
    • 1970-01-01
    • 2020-05-25
    • 2020-01-28
    相关资源
    最近更新 更多