Я пытаюсь использовать текстовые поля Xcode для публикации на моем сервере MySQL. Проблема в том, что я не получаю ошибки в XCode или PHP, но сообщение никогда не вставляется в мою таблицу MySQL. Я знаю, что URL-адрес правильный, а также имя пользователя, пароль, имя базы данных и т. Д. Вот мой код, когда кнопка отправки нажимается в 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-файл к моей базе данных?
Это старый код, который мы используем. (С тех пор мы обновили методы предотвращения инъекций SQL, которые я НАСТОЯТЕЛЬНО рекомендую вам сделать!) Они имеют некоторые отличия. Я не уверен на 100%, решит ли это вашу проблему, но этот код работает.
Ваша проблема может быть в вашем соединении, я никогда не подключался к локальному серверу БД. У меня всегда была настройка DNS. Мы проводим хостинг через веб-сайт компании для тестирования нашего веб-сервиса. Так что я никогда не делал http: // localhost: 8888 / прежде, и это может быть, где ваша проблема.
Я бы попробовал это сначала:
Попробуйте подключиться к веб-серверу (не к базе данных) с вашим приложением и убедитесь, что вы действительно можете подключиться. Если вы можете подключиться, я бы попробовал мой код ниже (дважды проверьте, что он правильно обновил вашу информацию в нем). Если это все еще не работает, я бы вручную ввел некоторые данные в вашу базу данных и попытался бы загрузить их с помощью оператора SQL SELECT. Если у вас нет кода для этого сообщения, я и я покажу вам, как загружать данные с синтаксического анализа SQL Server через JSON. (Звучит хуже, чем есть.)
Когда вы его запустите, я загляну в SQL-инъекцию и обновлю ваш PHP, чтобы предотвратить это. Предотвращение SQL-инъекций не является моей областью знаний, но я бы по крайней мере использовал PHP mysqli с подготовленными инструкциями для защиты ваших баз данных. Просто поищите немного о предотвращении SQL-инъекций.
Objective-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());
—Майк
Других решений пока нет …