[英]Integrate a PHP script and an IPhone application?
I'm developing an application for a School project.So i'll try to explain in a properly way: 我正在为School项目开发应用程序。因此,我将尝试以适当的方式进行解释:
I have a php script that allow the user to search in a MYSQL table for some keywords,the code is bellow: 我有一个PHP脚本,允许用户在MYSQL表中搜索一些关键字,代码如下:
<?php
//get data
$button = $_GET['submit'];
$search = $_GET['search'];
$s = $_GET['s'];
if (!$s)
$s = 0;
$e = 10; // Just change to how many results you want per page
$next = $s + $e;
$prev = $s - $e;
if (strlen($search)<=2)
echo "Must be greater then 3 chars";
else
{
echo "<br /><table><tr><td><img src='juzzy.jpg' /></td><td><form action='search.php' method='GET'><input type='text' onclick=value='' size='50' name='search' value='$search'> <input type='submit' name='submit' value='Search'></form></td></tr></table>";
//connect to database
mysql_connect("localhost","root","root");
mysql_select_db("content");
//explode out search term
$search_exploded = explode(" ",$search);
foreach($search_exploded as $search_each)
{
//construct query
$x++;
if ($x==1)
$construct .= "keywords LIKE '%$search_each%'";
else
$construct .= " OR keywords LIKE '%$search_each%'";
}
//echo outconstruct
$constructx = "SELECT * FROM searchengine WHERE $construct";
$construct = "SELECT * FROM searchengine WHERE $construct LIMIT $s,$e";
$run = mysql_query($constructx);
$foundnum = mysql_num_rows($run);
$run_two = mysql_query("$construct");
if ($foundnum==0)
echo "No results found for <b>$search</b>";
else
{
echo "<table bgcolor='#0000FF' width='100%' height='1px'><br /></table><table bgcolor='#f0f7f9' width='100%' height='10px'><tr><td><div align='right'>Showing 1-10 of <b>$foundnum</b> results found for <b>$search.</b></div></td></tr></table><p>";
while ($runrows = mysql_fetch_assoc($run_two))
{
//get data
$title = $runrows['title'];
$desc = $runrows['description'];
$url = $runrows['url'];
echo "<table width='300px'>
<h4><a href='http://$url'><b>$title</b></a><br />
$desc<br>
<font color='00CC00'>$url</font></table></h4>
";
}
?>
<table width='100%'>
<tr>
<td>
<div align="center">
<?php
if (!$s<=0)
echo "<a href='search.php?search=$search&s=$prev'>Prev</a>";
$i =1;
for ($x=0;$x<$foundnum;$x=$x+$e)
{
echo " <a href='search.php?search=$search&s=$x'>$i</a> ";
$i++;
}
if ($s<$foundnum-$e)
echo "<a href='search.php?search=$search&s=$next'>Next</a>";
}
}
?>
</div>
</td>
</tr>
</table>
So i need to integrate this code and an iPhone app,i've already build the for execute the query,its bellow: 所以我需要将这段代码和一个iPhone应用程序集成起来,我已经构建了执行查询的程序,如下所示:
-(IBAction)executeQuery:(id)sender{
NSString *encodedValue = [queryValue.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *cont11 = [NSString stringWithFormat:@"http://localhost:8888/searchengine/searchengine/search.php?search=%@",encodedValue];
NSData *cont12 = [NSData dataWithContentsOfURL:[NSURL URLWithString:cont11]];
NSString *cont13 = [[[NSString alloc] initWithData:cont12 encoding:NSUTF8StringEncoding]autorelease];
NSLog(@"%@", cont13);
[queryValue resignFirstResponder];
}
So how the app is suppose to work, 因此,该应用程序应该如何工作,
My question is: 我的问题是:
How can i execute the query and display the results(on a IOS app)? 如何执行查询并显示结果(在IOS应用程序上)?
You should probably not send the data as HTML using tables and links etc. but in a different format that is easy to process for a program, eg JSON or XML. 您可能不应该使用表和链接等将数据作为HTML发送,而应采用易于处理的其他格式,例如JSON或XML。
I'd go for JSON. 我会选择JSON。 Using json_encode()
you can encode the entire query resultset. 使用json_encode()
可以对整个查询结果集进行编码。 The iPhone app downloads it and decodes it. iPhone应用程序将其下载并解码。
Regarding what now has to happen on the iOS side of things: someone else needs to chime in here, I'm not into iOS development. 关于现在iOS方面必须发生的事情:这里需要有人打扰,我不喜欢iOS开发。
To build on middus' (and I agree with JSON)...you'll need to add some JSON parser to your project, I use SBJSON. 为了建立在middus的基础上(我同意JSON)...您需要在项目中添加一些JSON解析器,我使用SBJSON。 So, you'll format your output as JSON (json.org if you need guidance) and it'll either be (at the highest level) an array or the equivalent of a dictionary. 因此,您可以将输出格式设置为JSON(如果需要指导,请格式化为json.org),并且该输出将(在最高级别上)为数组或等同于字典。 To convert it, you'll do 要进行转换,您需要
self.myReturnedData = [cont13 JSONValue];
I'm assuming here you've set up myReturnedData as a property, it'll either be NSDictionary or NSArray 我假设您已经将myReturnedData设置为属性,它将是NSDictionary或NSArray
Then, you can set the text of whatever UI element you want...since it's numerous, I'd vote for a UITableView, something like: 然后,您可以设置所需的任何UI元素的文本...由于数量众多,我将投票给UITableView,如下所示:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return 10;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexpath{
return 52;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *TaskCellIdentifier = @"ResultCellIdentifier";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:ResultCellIdentifier];
if(cell==nil){
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:ResultCellIdentifier]autorelease];
UILabel *label;
//you'll need to adjust the following numbers to position as you wish
label = [[UILabel alloc] initWithFrame:CGRectMake(50, 5, 200, 23)];
label.textAlignment = UITextAlignmentLeft;
label.tag=999;
label.font=[UIFont systemFontOfSize:20];
[cell.contentView addSubview:label];
[label release];
}
UILabel *label = (UILabel *)[cell viewWithTag:999];
label.text=[NSString stringWithFormat:@"%@",[self.myReturnedData objectAtIndex:indexPath.row]];
return cell;
}
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
return NO;
}
But, you'll probably also want to add some buttons or something for pagination 但是,您可能还需要添加一些按钮或用于分页的内容
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.