ios — корректен ли этот код для отправки строк из Xcode и публикации их в базе данных mysql с помощью переполнения стека

Я пытаюсь использовать текстовые поля 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-файл к моей базе данных?

0

Решение

Это старый код, который мы используем. (С тех пор мы обновили методы предотвращения инъекций 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());

—Майк

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]