从iPhone sdk上的Cocoa Touch向php发送变量

从iPhone sdk上的Cocoa Touch向php发送变量,php,cocoa,string,url,encode,Php,Cocoa,String,Url,Encode,嗨,我正在尝试从应用程序内部向php传递变量 <?php // get email address $email = $_GET['email']; // get character name $character = $_GET['character']; // get password $charname = $_GET['charname']; // set up variables $id = 0; $idtest="no"; // set up database connecti

嗨,我正在尝试从应用程序内部向php传递变量

<?php
// get email address
$email = $_GET['email'];
// get character name
$character = $_GET['character'];
// get password
$charname = $_GET['charname'];
// set up variables
$id = 0;
$idtest="no";
// set up database connection
$link = mysql_connect("localhost", "xxx username xx","xxx password xxx") or die ("Unable to connect to database.");
mysql_select_db("xxx db xxx") or die ("Unable to select database.");
// contact and check if an email already exists
$sqlstatement= "SELECT id, ringtones FROM users WHERE email = '$email'";
$newquery = mysql_query($sqlstatement, $link);
while (list($id, $ringtones) = mysql_fetch_row($newquery)) {
    echo"&id=$id&ringtones=$ringtones";
    $ringtoneString=$ringtones;
    if ($id <> 0) { 
        $idtest="yes";
    }
}
// if idtest flag = no then add new user
if ($idtest == "no") {
    // add a space to the end of character and store in new string
    $character2 = $character . ' ';
    $sqlstatement= "INSERT INTO users (email, ringtones) VALUES ('$email', '$character2')";
    $newquery = mysql_query($sqlstatement, $link);
    echo ' registered new email address '; 
    echo $email;
// else update the ringtone field
} else {
    //$sqlstatement= "INSERT INTO users (email) VALUES ('$email') WHERE email = '$email'";
    //$newquery = mysql_query($sqlstatement, $link);
    echo ' Updated email address'; 
    echo $email;
    echo ' current ringtones = '; 
    echo $ringtoneString;
    // add new character to ringtone string
    $ringtoneString = $ringtoneString . $character . ' ';
    echo ' updated ringtone string = '; 
    echo $ringtoneString;
    // add new rintone string back in to user
    $query = "UPDATE users SET ringtones = '$ringtoneString' WHERE email = '$email'";
    $success=mysql_query($query);
    if ($success) echo "The insert query was successful. '$loadconnect'";
     else echo "Error: insert query failed. '$loadfailed'";
}
// email with attachment
// turn character 3 into a proper name
$character3 = $character;


// email with attachment script goes here

//create short variable names
$fromname = 'FROM';
$fromemail='FROM EMAIL';
$subject="SUBJECT";
$message="MESSAGE HERE";

$email=trim($email);
$subject=StripSlashes($subject);
$message=StripSlashes($message);

    mail($email,$subject,$message,"From: FROM EMAIL");
     //clear the variables
     $name='';
     $email='';
     $subject='';
     $message='';
     echo 'response=passed';


?>
这一切似乎都能正常工作,用户在那里输入电子邮件并点击send,添加了电子邮件字符串和2个其他数据字符串,它似乎与PHP连接,当直接从浏览器地址行测试时,PHP似乎能正常工作

它甚至将数据弹出到数据库的新行中(如果有新的电子邮件,如果没有,则在该电子邮件的当前行中添加字符串),因此一切都很好

只是数据以数字而不是字符串的形式传递

e、 g.电子邮件转到:

15968112

将数据转换为如下内容:

70560

而不是原来的字符串!发生了什么事?如何补救


提前感谢..

尝试在调用initWithFormat时将%d替换为%s

NSString *urlstr = [[NSString alloc] initWithFormat:@"http://XXX URL HERE XXX/ringtone_send.php?email=%s&character=%s&charname=%s", emailField.text, picFile, charName];

initWithFormat
的格式掩码错误

当需要使用
%@
将参数格式化为Obj-C对象时,使用
%d
将参数格式化为十进制值(如文本属性,即
NSString

正确的行如下所示:

    NSString *urlstr = [[NSString alloc] initWithFormat:@"http://url/ringtone_send.php?email=%@&character=%@&charname=%@",
       emailField.text, picFile, charName];
另外,您可能需要小心,通过调用
NSString
的方法来转义URL的字符,以便对字符串进行正确编码以供URL使用

    NSString *urlstr = [[NSString alloc] initWithFormat:@"http://url/ringtone_send.php?email=%@&character=%@&charname=%@",
       emailField.text, picFile, charName];