0

iPhone アプリでユーザーが入力した文字列 (アドレス) を mysql データベースに保存しようとしています。これを達成するためにphpを使用しています。いくつか問題があります。

これがphpでの私のコードです:

...
$guestadd1 = $_GET["guestadd1"];
$guestadd2 = $_GET["guestadd2"];
$guestcity = $_GET["guestcity"];
...

そして、これがmysqlクエリです:

 mysql_query( "INSERT INTO HMS_GUESTS( GUESTTYPE, GUESTLNAME, GUESTFNAME, GUESTADDRESS1,
               GUESTADDRESS2, GUESTCITY, GUESTSTATE, GUESTPOSTCODE, GUESTWORKPHONE) VALUES 
               ('$guestType', '$guestLname', '$guestFname', '$guestadd1', '$guestadd2', 
               '$guestcity', '$gueststate', '$guestpostal', '$guestWphone') ", $con) or 
               die(mysql_error());

1 しかし、スペースを含むデータを挿入できません。スペースなしで保存しようとすると、挿入できます。スペースを挿入するにはどうすればよいですか?

2 ゲストには、個人用とプロフェッショナル用の 2 種類があります。そのため、複数のエントリが同じゲスト タイプを持つことができます。そのため、1 つのタイプから 2 番目のゲストを挿入しようとすると、キー エラーの値が重複しています。これを克服してエントリを挿入するにはどうすればよいですか?

どんな助けでも感謝します。ありがとうございました :)

EDIT 私の目的のCコードを含む

NSString *strURL = [NSString stringWithFormat:@"http://127.0.0.1/hms.php?guesttype=%@&
guestLname=%@&guestFname=%@&guestadd1=%@&guestadd2=%@&guestcity=%@&
gueststate=%@&guestpostal=%@&guestWphone=%@", guestID, self.name1.text, self.name2.text,
self.address1.text, self.address2.text, self.city.text, self.state.text, self.postal.text,
self.phone.text, self.fax.text];
    // to execute php code
NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];

    // to receive the returned value
NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];

そしてmysqlテーブル構造:

Guest Type  | Guest First Name | Guest Last Name | ADDRESS LINE 1 | ADDRESS LINE 2 | CITY | STATE | POSTAL |  WORKPHONE
----------------------------------------------------------------------------------------------------------------------
Personal    | blah             |  blah           | blah            | blah          | blah | blah  | blah   |  blah
Professional| blah             |  blah           | blah            | blah          | blah | blah  | blah   |  blah

SO、アドレス列またはおそらくどこでも..私は挿入できない引数にスペースを見つけます。

ここで別のゲストをテーブルに追加しようとすると、タイプ Personal と言うと、次のエラーが表示されます: キー 1 の重複エントリ '1-1-PERSONAL-11'

4

1 に答える 1

3

mysql_query 関数を使用しないでください。また、文字列補間 (または連結) を使用してクエリを作成しないでください。この種のソリューションでは、SQL インジェクション攻撃に対して無防備になります。PDOのようなものを使用し、パラメーター バインディングを利用することをお勧めします。そうしないと、ばかが悪用できる重大なセキュリティ ホールができてしまいます。

于 2013-07-31T23:05:53.303 に答える