这个代码是否正确从Xcode发布字符串并使用php将它们发布到mysql数据库

时间:2014-10-11 20:50:10

标签: php ios mysql xcode

我正在尝试使用Xcode文本字段发布到我的mysql服务器上。问题是我在Xcode或php中没有出错,但帖子永远不会插入到我的mysql表中。我知道url是正确的,还有用户名和密码以及dbname等。这是我在Xcode中按下提交按钮时的代码:

NSString * post = [[NSString alloc] initWithFormat:@"message=test&name=%@", name.text];
NSData * postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init] ;
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://localhost:8888/Upload.php"]]]
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];
NSURLConnection * conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[conn start];

if (conn) NSLog(@"Connection Successful");

我的php看起来像这样:

<?php
/*
Johnny
JUL, 2011
*/
    $DB_HostName = "localhost";
    $DB_Name = "test";
    $DB_User = "root";
    $DB_Pass = "root";
    $DB_Table = "test";

    $con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error()); 
    mysql_select_db($DB_Name) or die(mysql_error()); 

    $name = $_POST["name"];
    $message = $_POST["message"];

    $query = "INSERT INTO Locations('name','message') VALUES('$name','$message')";

    mysql_query($query) or die(mysql_error("error"));

    mysql_close();
?>

有没有办法测试我的php文件是否连接到我的数据库?

1 个答案:

答案 0 :(得分:0)

这是我们使用的一些旧代码。 (我们已经更新了SQL强制推荐您使用的SQL注入预防技术!)它们有一些差异我不能100%确定是否能解决您的问题,但此代码可以正常工作。

您的问题可能是您的连接,我从未连接到本地数据库服务器。我一直有DNS设置。我们通过网站管理公司为我们的测试网络服务。所以我以前从未做过http:// localhost:8888 /,这可能就是你的问题所在。

我先试试这个:

尝试使用您的应用连接到Web服务器(而不是数据库),并确保您可以实际连接。如果你可以连接,那么我会尝试下面的代码(仔细检查它是否正确更新了你的信息)。如果仍然无法工作,我会手动将一些数据输入您的数据库并尝试使用SQL SELECT语句加载它。如果您没有此消息的代码,我可以向您展示如何从通过JSON解析的SQL Server加载数据。 (听起来比实际情况更糟。)

一旦启动并运行,我将研究SQL注入并更新您的PHP以防止它。 SQL注入预防不是我的专业领域,但我至少会使用PHP mysqli和预先准备好的语句来保护您的数据库。只需谷歌一点关于SQL注入预防。

目标-C

NSString *post = [NSString stringWithFormat:@"message=test&name=%@", name.text];
NSString *removeSpaces = [NSString stringWithFormat:@"%@", [post stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
const char *urlUTF8 = [removeSpaces UTF8String];
NSString *postBody = [NSString stringWithUTF8String:urlUTF8];

NSData *postData = [postBody dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

NSString *postDataLength = [NSString stringWithFormat:@"%d", [postData length]];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@“http://localhost:8888/Upload.php“]]];

[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

PHP

$DB_HostName = "localhost";
$DB_Name = "dbname";  //Depending on your server setup you may need to use  'sqlname_dbname'
$DB_User = "username";  //Depending on your server setup you may need to use  'sqlname_username'
$DB_Pass = "password";  //Depending on your server setup you may need to use  'sqlname_password'


$con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error());
if (!$con)
  {
    die('Could not connect: ' . mysql_error());
  } 
mysql_select_db($DB_Name,$con) or die(mysql_error()); 

if (isset ($_POST["name"])) {
    $name = $_POST["name"];
} else {
    $name = "N/A";
}
    //
    if (isset ($_POST["message"])) {
    $message = $_POST["message"];
} else {
    $message = "N/A";
}

$sql = "INSERT INTO Locations ('name','message') VALUES ('$name','$message') ";
$res = mysql_query($sql,$con) or die(mysql_error());

- 麦克