SQL с HTTP / 1.1 Get

Это было перенесено из dba.stackexchange.

Извините за такой любительский вопрос, но я понятия не имею, почему это не работает.
У меня есть «add.php» для подключения к серверу MySQL.

/add.php

<?php
include("connect.php");

$link=Connection();

$ID1=$_POST["ID1"];
$ID2=$_POST["ID2"];
$ID3=$_POST["ID3"];
$ID4=$_POST["ID4"];
$ID5=$_POST["ID5"];

$query = "INSERT INTO Battery (ID01, ID02, ID03, ID04, ID05)
VALUES ('".$ID1."','".$ID2.",'".$ID3.",'".$ID4."','".$ID5."')";

mysql_query($query,$link);
mysql_close($link);

header("Location: index.php");
?>

connect.php

<?php

function Connection(){
$server="mysql.randomserver.com";
$user="random";
$pass="1234";
$db="random_1234";

$connection = mysql_connect($server, $user, $pass);

if (!$connection) {
die('MySQL ERROR: ' . mysql_error());
}

mysql_select_db($db) or die( 'MySQL ERROR: '. mysql_error() );

return $connection;
}
?>

Я использую простой протокол HTTP 1.1:

GET /add.php?ID1=1int&ID2 = 2char&ID3 = 3char&ID4 = 4int&ID5 = 2015-04-13
01:00:00 HTTP / 1.1 \ r \ nmyhost \ r \ nContent-Type:
применение / х-WWW-форм-urlencoded \ г \ nConnection: закрыть \ г \ п \ г \ п \ г \ п

где ID1, ID4 — это int; ID2, ID3 char; ID5 Datetime (SQL)

Хозяин кинет мне эту ошибку:

+IPD,168:<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>hosting</center>
</body>
</html>

Если у кого-нибудь есть идея попробовать, я был бы благодарен! Я действительно невежественен …

Исправлена:
(Moskito-х) « » $ ID3.», в ‘ «$ ID3.»‘,

Хорошо, я попробовал это, и это работает на моей главной странице: Index.php (просто скопируйте весь код /add.php в /index.php)

$query= "INSERT INTO  Battery (ID01,ID02,ID03,ID04,ID05)
VALUES ('1int','2char','3char','4int','2015-04-22 17:20:28')";
$result = mysqli_query($link, $query)

Но если я заменю его в add.php, строка не будет вставлена.

Я изменил add.php, как другие предложили:

add.php

<?php
$link=Connection();
$server="mysql.myhost.com";
$user="randomUser";
$pass="randomPwd";
$db="radomdb";

$link=mysqli_connect($server, $user, $pass, $db);$query = "INSERT INTO  Battery (ID01,ID02,ID03,ID04,ID05)
VALUES ('1int','2char','3char','4int','2015-04-22 17:20:28')";
mysqli_query($link, $query)
mysqli_close($link);
header("Location: index.php");
?>

1

Решение

Важная часть $link=Connection();

  • Мы не можем видеть код Connection();
  • Ваш запрос неверен
  • упоминается в комментариях -> вы используете http GET так $ID1=$_POST["ID1"]; неправильно

'".$ID1."','".$ID2.",'".$ID3.",'".$ID4."','".$ID5."')";
//                  |         |
//                  |_________|____ here forget '

$query = "INSERT INTO Battery (ID01, ID02, ID03, ID04, ID05)
VALUES ('".$ID1."','".$ID2."','".$ID3."','".$ID4."','".$ID5."')";

РЕДАКТИРОВАТЬ

Теперь мы можем видеть в вашем отредактированном вопросе

где ID1, ID4 — это int; ID2, ID3 char; ID5 TimeStamp

Запрос должен быть (предположим, TimeStamp = «20150421225300») в формате строки.

$query = "INSERT INTO Battery (ID01, ID02, ID03, ID04, ID05)
VALUES (".$ID1.",'".$ID2."','".$ID3."',".$ID4.",'".$ID5."')";
1

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

Ваш запрос http, как вы показали в своем сообщении (_ обозначает пустую строку):

GET /add.php?ID1=1int&ID2=2char&ID3=3char&ID4=4int&ID5=2015-04-13 01:00:00 HTTP/1.1
myhost
Content-Type: application/x-www-form-urlencoded
Connection:close
_
_
_

Это действительно bad request потому что (а) у вас есть неэкранированные пробельные символы в URI и (б) вторая строка читается просто myhost когда вы, вероятно, имели в виду Host: myhost (с) у вас есть дополнительные \r\n (вряд ли вызовет проблемы, хотя), так что-то вроде этого:

POST /add.php?ID1=1int&ID2=2char&ID3=3char&ID4=4int&ID5=2015-04-13+01:00:00 HTTP/1.1
Host: myhost
Content-Type: application/x-www-form-urlencoded
Connection:close
_
_

И, конечно, то, что говорят другие о SQL-инъекциях.

1

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