【问题标题】:How to append to json_encode array如何附加到 json_encode 数组
【发布时间】:2017-10-17 19:12:31
【问题描述】:

我有一个验证检查器,它检查数据库以查看是否正在使用“电子邮件和用户名”,如果是,则将电子邮件和用户名回显为“假”。如果它不在数据库中,则回显为“true”。我正在返回用户电子邮件和用户名在 sql 服务器中的结果。所以我想像这样将“$json1 or $json2”附加到“$first or $second”

 {"Email":false, "Username":true};

PHP 代码:

<?php

if(isset($_GET['submit'])){

    //Connect to database
    $link = mysqli_connect("localhost", "root", "");
    mysqli_select_db($link, "magicsever");

    if(mysqli_connect_error()){

        die ("Database connection error");
    }

    //Find the email in the database
    $query = "SELECT * FROM app_signup WHERE email = '".mysqli_real_escape_string($link, $_GET['email'])."'";
    $query2 = "SELECT * FROM app_signup WHERE username = '".mysqli_real_escape_string($link, $_GET['username'])."'";

    $result = mysqli_query($link, $query);
    $result2 = mysqli_query($link, $query2);

    $email_checker1 = json_encode(array("Email"=>false));
    $email_checker2 = json_encode(array("Email"=>true));

    $username_checker1 = json_encode(array("Username"=>false));
    $username_checker2 = json_encode(array("Username"=>true));

    if(mysqli_num_rows($result)>0){

        echo $email_checker1;


    }

}
?>

【问题讨论】:

    标签: php sql arrays json string


    【解决方案1】:

    为电子邮件和用户名结果创建新数组

    //Find the email in the database
    $query = "SELECT * FROM app_signup WHERE email = '".mysqli_real_escape_string($link, $_GET['email'])."'";
    $query2 = "SELECT * FROM app_signup WHERE username = '".mysqli_real_escape_string($link, $_GET['username'])."'";
    
    $result = mysqli_query($link, $query);
    $result2 = mysqli_query($link, $query2);
    
    $dataResult = array();
    $dataResult['Email'] = (mysqli_num_rows($result)>0)? false: true;
    $dataResult['Username'] = (mysqli_num_rows($result2)>0)? false: true;
    
    echo json_encode($dataResult );
    

    【讨论】:

    • $dataResult = new array(); 出现错误行。
    • 或者直接使用$dataResult = [];
    • 或者只是删除新的数组。对不起。语法错误
    • D:我正在返回用户电子邮件和用户名在 sql 服务器中的结果。所以设置的布尔值不会是结果
    • 但是如果没有结果呢?
    【解决方案2】:

    JSON 只是一种数据格式,一种呈现数据结构的方式。在您拥有可以呈现的数据结构之前,您不希望将其转换为 JSON。

    你应该做的是构建一个包含验证错误的数组:

    // I'm assuming that the true/false means that there was an error with validating that value
    // You can initialize the validation array with false values for all fields and change them to true in case of validation error
    $errors = ['Email' => false, 'Username' => false];
    
    // Then, change the values in case of an error
    if (... /* invalid email */) {
        $errors[] = ['Email' => true];
    }
    if (... /* invalid username */) {
        $errors[] = ['Username' => true];
    }
    

    然后仅在显示时将数组转换为 JSON:

    echo json_encode($errors);
    

    【讨论】:

    • true 表示“输入的邮箱和用户名可以使用”,false 表示“已经被使用”
    • 这不会以任何方式改变我的答案。但也许您想以描述性的方式编写代码,这样您就不必用额外的注释来解释您刚刚做了什么。将数组中的键命名为email_availableusername_available 怎么样?
    • 我知道你在做什么,但我希望它们在同一个大括号中,而不是分开。
    【解决方案3】:
     $first = json_encode(array("Email"=>false));
        $second = json_encode(array("Email"=>true));
    
        $json1 = json_encode(array("Username"=>false));
        $json2 = json_encode(array("Username"=>true));
    

    这样使用

    $first = json_encode(array("Email"=>false)+array("Username"=>true));
    $second = json_encode(array("Email"=>true)+array("Username"=>false));
    

    【讨论】:

    • 关闭我构建代码的方式是我检查是否先使用电子邮件,如果是,然后检查是否使用用户名,然后从用户名端将消息从用户名附加到在第一个 if 语句中发送电子邮件。所以你的方式有点工作
    【解决方案4】:

    如果您真的想将它们合并在一起,请查看此引用

    好的方法就像

    $resData1['email']=false;
    $resData2['email']=true;
    
    $resData1['Username']=false;
    $resData2['Username']=true;
    
    $json1 = json_encode($resData1);
    $json2 = json_encode($resData2);
    

    【讨论】:

    • 嗯,问题是我得到了相同的结果“假和假”或“真假”。是否可以使用不同的变量名更改为 false 和 true ?
    • 因为代码是这样写的......你可能需要使用 if 条件......就像如果电子邮件返回为 false 设置为 false 或给出 true。类似的东西会起作用
    • 是的,我想到了这一点,但我必须为不同的场景创建 if 语句,我正试图找到一种不那么疯狂的方法。
    【解决方案5】:

    数组追加后为什么不做json_encode。

    $first = json_encode(array("Email"=>false, "Username"=>false));
    

    已添加。

    $data['Email'] = false;
    if('''')
    {
      $data['Username'] = false;
    }
    $result = json_encode($data);
    

    【讨论】:

    • 如果用户名为真而电子邮件为假,这将起作用。我不想在我输入的地方简单地回显,我想在任何一个或发生时追加。
    • 所以您创建了一个数据变量并将“电子邮件”传递给它并将其设置为 false?但问题是我正在返回用户电子邮件和用户名在 sql 服务器中的结果。
    • 你只是将json字符串存储到你的sql server中,哪个变量存储这个值没有区别。
    • 它没有存储在 sql server 中。我从服务器获取信息,然后将 json 文件发送到读取信息并向用户显示某些内容的应用程序。对不起,如果我在编程中看起来“愚蠢” D:我还在学习
    • $variable 只是存储值,变量名是什么没有区别。
    猜你喜欢
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多