У меня есть приложение iOS с помощью Swift 3 с использованием файла PHP для получения объектов, но теперь мы работаем над обновлением объектов в базе данных.Правильный код PHP? - Вставить в MySQL
Я новичок в PHP, так что мой вопрос в том, является ли код php ниже правильным? Он должен вставить переменную из моего приложения, которая составляет +1 очко от кнопки, чтобы пройти через php и UPDATE в моей таблице «тесты» в базе данных mysql. У меня уже есть столбец в базе данных testPop, и переменная также называется testPop, которая получена в массиве объектов json, но я просто пытаюсь обновить таблицу.
Так что если row1 = id:1 testName:test1 testPop:0
Я хочу testPop обновлять свое значение каждый раз, когда кому-то добавляет точку +1
Текущий PHP код:
<?php
$host = "host";
$db = "db";
$user = "user";
$pass = "pass";
$connection = mysql_connect($host,$user,$pass);
// Guessing: Posting into MySQL Object
$id = $_POST["id"];
// Checking if connection can be established
if(!$connection){
die("Connection Failed");
}
else
{
// Selecting Database
$dbconnect = mysql_select_db($db, $connection);
// Check if it can connect to Database
if(!$dbconnect){
die("Unable to connect to Database");
}
else
{
$query = sprintf("UPDATE tests SET testPop=testPop+1 WHERE id = %d", $id);
$resultset = mysql_query($query, $connection);
echo "Successfully added";
echo $query;
}
}
?>
Swift 3 Код: Передача данных в базу данных:
func sendData() {
let postDataURL = "http://exampleip.com/Send.php"
let url: NSURL = NSURL(string: postDataURL)!
let request: NSMutableURLRequest = NSMutableURLRequest(url:url as URL)
let bodyData = String(1)
request.httpMethod = "POST"
request.httpBody = bodyData.data(using: String.Encoding.utf8)
NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: OperationQueue.main)
{
(response, data, error) in
print(response!)
if let httpResponse = response as? HTTPURLResponse {
let statusCode = httpResponse.statusCode
if statusCode==200 {
print("Connection Successful")
} else {
print("Connection Failed (!200)")
}
}
}
}
----- Добавлен Дополнительный код для улучшения понимание -----
Новое: MySQL код
CREATE TABLE IF NOT EXISTS `tests` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`testName` varchar(255) DEFAULT NULL,
`testPop` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
INSERT INTO `tests` (`id`, `testName`, `testPop`) VALUES
(1, 'Test 1', '0'),
(2, 'Test 2', '0'),
(3, 'Test 3', '0'),
(4, 'Test 4', '0'),
(5, 'Test 5', '0'),
(6, 'Test 6', '0'),
(7, 'Test 7', '0'),
(8, 'Test 8', '0'),
(9, 'Test 9', '0'),
(10, 'Test 10', '0'),
(11, 'Test 11', '0'),
(12, 'Test 12', '0');
Пример: О том, как я получаю из базы данных, используя JSON. Не знаю, помогает ли это. Swift 3
func retrieveData() {
let getDataURL = "http://exampleip.org/tests.php"
let url: NSURL = NSURL(string: getDataURL)!
do {
let data: Data = try Data(contentsOf: url as URL)
jsonArray = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! NSMutableArray
// Looping through jsonArray
for i in 0..<jsonArray.count {
// Create Test Object
let tID: String = (jsonArray[i] as AnyObject).object(forKey: "id") as! String
let tName: String = (jsonArray[i] as AnyObject).object(forKey: "testName") as! String
let tPop: String = (jsonArray[i] as AnyObject).object(forKey: "testPop") as! String
// Add Test Objects to Test Array
testArray.append(Test(testName: tName, andTestPop: tPop, andTestID: tID))
}
}
catch {
print("Error: (Retrieving Data)")
}
myTableView.reloadData()
}
что такое '$ _POST [" a "]' предполагается равным? – bugfroggy
Если вы пишете новый код, ** _ пожалуйста, не используйте 'mysql_ *' функции **. Они старые и сломанные, устарели в PHP 5.5 (который настолько старый, что он даже не получает обновлений безопасности), и полностью удалены в PHP 7. Кроме того, ваш код широко открыт для [SQL injection] (https: // en .wikipedia.org/wiki/SQL_injection). Используйте ['PDO'] (https://secure.php.net/manual/en/book.pdo.php) или [' mysqli_ * '] (https://secure.php.net/manual/en/book .mysqli.php) вместо _prepared statements_ и _parameter binding_. Подробнее см. Http://stackoverflow.com/q/12859942/354577. – Chris
@bugfroggy thats, когда я использовал INSERT INTO VALUES, а не ОБНОВЛЕНИЕ – BroSimple