Интегрировать PHP-скрипт и приложение для iPhone?

#php #iphone #ios

#php #iPhone #iOS

Вопрос:

Я разрабатываю приложение для школьного проекта.Поэтому я постараюсь объяснить должным образом:

У меня есть 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=$searchamp;s=$prev'>Prev</a>";

$i =1; 
for ($x=0;$x<$foundnum;$x=$x $e)
{


 echo " <a href='search.php?search=$searchamp;s=$x'>$i</a> ";


$i  ;


}

if ($s<$foundnum-$e)
  echo "<a href='search.php?search=$searchamp;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 или любом другом пользовательском интерфейсе (может быть UILabels) [ЭТА ЧАСТЬ НЕ РАБОТАЕТ].

Мой вопрос:

Как я могу выполнить запрос и отобразить результаты (в приложении для IOS)?

Комментарии:

1. Что webarto хочет вам сказать: ваш код уязвим для SQL-инъекций. Используйте mysql_real_escape_string, чтобы защитить себя: php.net/mysql_real_escape_string

Ответ №1:

Вероятно, вам следует отправлять данные не в виде HTML с использованием таблиц, ссылок и т. Д., А В другом формате, который легко обрабатывать для программы, например, JSON или XML.

Я бы выбрал JSON. Используя json_encode() вы можете закодировать весь набор результатов запроса. Приложение для iPhone загружает его и декодирует.

Что касается того, что теперь должно произойти на стороне iOS: кто-то еще должен вмешаться здесь, я не занимаюсь разработкой iOS.

Ответ №2:

Строить на middus (и я согласен с JSON)…вам нужно будет добавить в свой проект какой-нибудь анализатор JSON, я использую SBJSON. Итак, вы будете форматировать свои выходные данные в формате JSON (json.org если вам нужно руководство), и это будет либо (на самом высоком уровне) массив, либо эквивалент словаря. Чтобы преобразовать его, вам нужно сделать

 self.myReturnedData = [cont13 JSONValue];
  

Я предполагаю, что здесь вы настроили myReturnedData как свойство, это будет либо NSDictionary, либо NSArray

Затем вы можете задать текст любого элемента пользовательского интерфейса, который вы хотите … поскольку его много, я бы проголосовал за 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;
}
  

Но вы, вероятно, также захотите добавить несколько кнопок или что-то еще для разбивки на страницы