2010-12-29 11 views
0

私はiphone開発を初めて利用しています。 > PHP - - >データベース/ MySQLの - > PHP - 私は、ユーザー名を渡すとき、私は問題があるiphoneObjectiveC-PHP:文字列とセキュリティの問題を渡す

へ>リターン

iphone/OBJ-C:私はから渡すユーザ名をテストしています。

NSString *hostStr =[NSString stringWithFormat:@"localhost/username.php?username=%@", tf_username.text]; 

NSData *dataURL = [NSData dataWithContentsOfURL: [ NSURL URLWithString: hostStr ]];  
NSString *serverOutput = [[NSString alloc] initWithData:dataURL encoding: NSUTF8StringEncoding]; 
NSLog(@"Server output: %@", serverOutput); 

私のPHPファイル(username.php)ここで

<?php 
// for testing, i simply output what i received 
if(!empty($_GET['username'])){ 
echo $_GET['username']; 
} else { 
echo "No parameters"; 
} 
?> 

は、私が入力したときの結果である:ここでは、コードです

Enter  I Result 
============================================= 
test   I Server Output: test 
test test I Server Output: 
  1. 私は "持っていますスペース 'を入力すると、空白に戻ります。 PHPでは、このURLEncodeがあります。最初にobj-cで文字列をエンコードする必要がありますか?

  2. 私のメソッドのセキュリティ上の欠陥は何ですか? (私はたくさんあることを知っています)

  3. Webサーバーデータベースからデータを取得する場合、より良いアプローチ/方法はありますか? (私の方法のようなものです:OBJ-C - > PHP - > OBJ-C)

おかげで正常に動作します

答えて

0
  1. 参照NSStringさんstringByAddingPercentEscapesUsingEncoding:、。唯一の例外は、+の代わりにスペースを%20に変えますが、エンコード後に簡単に文字列置換を行うことができます。
  2. 本当に私たちに多くのことを話したことがないとすれば、それは言うのが難しいです。 "username"は検索パラメータでありログイン認証ではないと仮定すると、何も欠陥がありません。多分HTTP RESTful APIsを読んでみる必要があります。デスクトップアプリケーションがリモートAPIを呼び出すのはかなり普通です。私は、あなたの入力と出力を正式化したいと思います。たとえば、要求/応答の本文に何かが必要な場合は、JSONまたはXMLを使用します。
  3. もう一度、あなたがやっていることは正常です。あなたはAPIを作成しています。何かを読む必要がある場合は、WebサービスAPI(特にREST ...を読んでください。SOAPに陥ることは避けてください。恐ろしく複雑すぎるIMHOです)。

PS:+URLWithStringには実際に完全なURL(「http://」を含む)が必要です。