Envio de variáveis ??para php de Cocoa Touch no iPhone SDK
Pergunta
Oi estou tentando passar variáveis ??para php de dentro de um aplicativo.
<?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';
?>
E código do aplicativo SDK:
-(IBAction)sendEmail:(id)sender{
//NSpicFile = picFile;
//NScharName = charName;
//NSemail = emailField.text;
NSString *urlstr = [[NSString alloc] initWithFormat:@"http://XXX URL HERE XXX/ringtone_send.php?email=%d&character=%d&charname=%d", emailField.text, picFile, charName];
NSURL *url = [[NSURL alloc] initWithString:urlstr];
NSString *ans = [NSString stringWithContentsOfURL:url];
// here in ans you'll have what the PHP side returned. Do whatever you want
[urlstr release];
[url release];
NSLog(@"email sent to = %@", emailField.text);
NSLog(@"data sent = %@ - %@", picFile, charName);
NSLog(@"url string = %d", urlstr);
}
Tudo parece funcionar, o usuário entra lá e-mail e bate enviar, a seqüência de e-mail e 2 outras cadeias de dados são adicionados e parece se conectar com o PHP, o PHP parece funcionar quando testado diretamente de uma linha de endereço do navegador .
Ele ainda aparece os dados em uma nova linha no banco de dados (se um novo e-mail, se não acrescenta uma corda se existir uma linha de corrente para esse e-mail) para que tudo é grande.
É que os dados são passados ??como números, não uma string.
por exemplo. os e-mail voltas para:
15968112
e os dados para algo como:
70560
em vez das cordas originais! O que está acontecendo? Como isso pode ser remediado?
Agradecemos antecipadamente ..
Solução
A sua máscara de formato para initWithFormat
está errado.
Você está usando %d
que é usado para formatar o parâmetro como um valor decimal, quando você precisa para uso %@
, para formatar o parâmetro como um objeto Obj-C (como a propriedade de texto, que é um NSString
.
A linha correta ficaria assim:
NSString *urlstr = [[NSString alloc] initWithFormat:@"http://url/ringtone_send.php?email=%@&character=%@&charname=%@",
emailField.text, picFile, charName];
Além disso, você pode querer ter cuidado e escapar dos caracteres para URL, chamando o método de NSString
stringByAddingPercentEscapesUsingEncoding:
, assim que a corda está devidamente codificado para uso URL
Outras dicas
tentando trocar o% d para% s em sua chamada para initWithFormat
NSString *urlstr = [[NSString alloc] initWithFormat:@"http://XXX URL HERE XXX/ringtone_send.php?email=%s&character=%s&charname=%s", emailField.text, picFile, charName];