2011-10-26 10 views
0

私は学校のプロジェクトのためのアプリケーションを開発しています。私は適切な方法で説明しようとします:PHPスクリプトとIPhoneアプリケーションを統合しますか?

私は、ユーザーがMYSQLテーブルでいくつかのキーワード、コードを検索できるようにするPHPスクリプトを持っています怒鳴るです:

<?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> 

だから私はすでにクエリを実行するために、そのベローを構築してきた、このコードと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]; 


} 

仕事、

  1. ユーザーがUITextFieldのテキストを数字にしてボタンを押すと、[この部分はうまく機能しています]というクエリが実行されます。
  2. その後、コードはPHPから結果を取得し、それをUITableViewやその他のUI(UILabelsでもかまいません)に表示する必要があります[この部分は動作していません]。

私の質問は:

どのように私は、クエリを実行し、(iOSアプリ上で)結果を表示することができますか?

+1

http://xkcd.com/327/ –

+1

webartoがあなたに伝えたいこと:あなたのコードはSQLインジェクションに対して脆弱です。あなた自身を守るためにmysql_real_escape_stringを使用してください:http://php.net/mysql_real_escape_string – middus

答えて

1

テーブルやリンクなどを使用してデータをHTMLとして送信するのではなく、プログラムの処理が容易な別の形式(例: JSONまたはXML

私はJSONに行くと思います。 json_encode()を使用すると、クエリ結果セット全体をエンコードできます。 iPhoneアプリがそれをダウンロードしてデコードします。

iOS側で何が起こっているかについて、誰かがここでチャイムする必要があります。私はiOS開発に参加していません。

0

middusでビルドするには(JSONに同意します)...プロジェクトにJSONパーサーを追加する必要があります。私はSBJSONを使用します。したがって、出力をJSON(ガイダンスが必要な場合はjson.org)としてフォーマットし、配列(またはそれに相当するもの)のいずれか(最上位レベル)になります。それを変換するには、あなたは私はあなたがプロパティとしてmyReturnedDataを設定して、ここで仮定している

self.myReturnedData = [cont13 JSONValue]; 

をやる、それはNSDictionaryのかNSArrayの

だろうどちらか次に、あなたが設定することができますあなたが好きな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; 
} 

しかし、あなたはおそらくも改ページ

のためにいくつかのボタンか何かを追加したいと思います
関連する問題