gpt4 book ai didi

php - 在 UITextField 中显示结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:01:04 26 4
gpt4 key购买 nike

我遇到了填充(文本字段)的问题,结果是通过 PHP 文件从 MySql 请求的。我确实将 PHP 文件更改为不同的方式,但我仍然遇到同样的问题。

她是我的 PHP 文件:

<?php

$host="localhost"; // Host name
$username="UserName"; // Mysql username
$password="PassWord"; // Mysql password
$db_name="DataBase"; // Database name
$tbl_name="Table"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

mysql_set_charset('utf8');

// To protect MySQL injection (more detail about MySQL injection)
$userName = $_REQUEST['userName'];
$userName = stripslashes($userName);
$userName = mysql_real_escape_string($userName);
$userName = html_entity_decode($_REQUEST['userName'], ENT_QUOTES, "UTF-8");

$sql="SELECT * FROM $tbl_name WHERE userName = '$userName'";

mysql_query("SET NAMES 'utf8'"); //5
$result = mysql_query($sql);

// Mysql_num_row is counting table row
$count = mysql_num_rows($result);


$count = 1;
$items;

while($row = mysql_fetch_array($result)) {
$item['userName'] = $row['userName'];
$item['emailAddress'] = $row['emailAddress'];

$items[$count] = $item;
}

//echo json_encode($items);
echo json_encode($items, JSON_UNESCAPED_UNICODE);
?>

她是 Objective-c 代码(在 Xcode 中):

- (id)makeURLRequestWithString:(NSString *)url {
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:10];

NSURLResponse *response;
NSError *error;

// Make synchronous request
NSData *urlData = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
if (urlData) {
NSDictionary *dict = [NSJSONSerialization
JSONObjectWithData:urlData
options:kNilOptions
error:&error];
return dict;
} else return error;
}

她是我按下按钮时的代码:

- (IBAction)callJson:(id)sender {

dispatch_queue_t jsonParsingQueue = dispatch_queue_create("jsonParsingQueue", NULL);
dispatch_async(jsonParsingQueue, ^{ //Do request on another queue to prevent it from blocking UI
id result = [self makeURLRequestWithString:@"http:/MyWebSite.com/PHPFile.php?userName=123"];
NSLog(@"%@", result);

// Her where I need to fill my text with info from the above url
// self.emailAddress.text = ...............What to do her?


});
}

她是 Xcode 的结果:

{
1 = {
emailAddress = "123@hotmail.com";
userName = "123";
};
}

请求显示数据,但我不知道如何用它填充文本。我希望我的问题很清楚。谢谢

最佳答案

您可以使用 NSJSONSerialization 将结果解析为 NSDictionary/NSArray。如果你的结果是一个数据对象,你可以调用

NSError *err;
NSDictionary *results = [NSJSONSerialization JSONObjectWithData:data options:0 error:&err];
NSString *email = [[results objectForKey:@"1"] objectForKey:@"emailAddress"];

然后将其粘贴到文本框中,您只需使用普通代码

textbox.text = email;

编辑:

好的,我现在看到你已经在上面的方法中抛出了解析 JSON。因此,当您调用 self.emailAddress.text 时,您仍然处于调用 dispatch_async() 的后台线程中。因此,为了使其真正更新文本框,您将在获得 id result =... 后立即执行以下操作

dispatch_async(dispatch_get_main_queue(), $^{
self.emailAddress.text = [[result objectForKey:@"1"] objectForKey:@"emailAddress"];
});

另一个提示,您的 JSON 数据从索引 1 开始有点奇怪,如果它是一个有序列表(例如 1、2、3、4..),您应该将其格式化为数组。我想我在您的 PHP 中看到了问题,它看起来应该更像这样(假设我了解您正在尝试做什么):

...
while($row = mysql_fetch_array($result)) {
var $tmp = [];
$tmp['userName'] = $row['userName'];
$tmp['emailAddress'] = $row['emailAddress'];
$items[] = $tmp;
}
...

这将从数据库中输出一组项目,其中包含包含电子邮件和用户名的字典,如下所示[ {'email1', 'user1'}, {'email2', 'user2'}]

但是如果你那样做,你必须在 makeUrlrequestwithstring 方法中更改上面的代码以返回如下数组:

if (urlData) {
NSArray *arr = [NSJSONSerialization
JSONObjectWithData:urlData
options:kNilOptions
error:&error];
return arr;
} else return error;

那么您的输出代码将如下所示(假设您想要查询结果中的第一项)

dispatch_async(dispatch_get_main_queue(), $^{
self.emailAddress.text = [result[0] objectForKey:@"emailAddress"];
});

关于php - 在 UITextField 中显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30420274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com