2012-03-17 5 views
0

Я написал простой скрипт php, который будет принимать массив JSON (так я думаю), и он добавит полученный массив в базу данных MySQL. Однако, когда я вызываю скрипт, он только добавляет последний элемент в массив в базу данных. Здесь что-то простое, что мне не хватает?Чтение массива JSON с PHP

Кроме того, мой TRUNCATE TABLE не удаляет что-либо из таблицы.

<?php 
$handle = mysql_connect('localhost','root',''); 
if($handle==false) 
{ 
die('No database connection'); 
} 

$result = mysql_query("TRUNCATE TABLE 'available_ingredients'"); 


$db=mysql_select_db('r2bar2'); 
$query='INSERT INTO available_ingredients (drink_name) VALUES ("'.$_POST["drink_name"].'")'; 
$result=mysql_query($query); 
?> 

EDIT: Ниже приведен код, который генерирует массив JSON

ArrayList<NameValuePair> j2 = new ArrayList<NameValuePair>(); 
j2.add("drink_name", "rootbeer") 
j2.add("drink_name", "pepsi") 

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(my url); 
httppost.setEntity(new UrlEncodedFormEntity(j2)); 
HttpResponse response = httpclient.execute(httppost); 
responseText = EntityUtils.toString(response.getEntity()) 
+5

Широко открытая атака для инъекций SQL. – GordonM

+0

Ваш запрос TRUNCATE неверен. Используйте '(backtick) вместо '(одинарная кавычка), чтобы указать ваши имена таблиц и столбцов MySQL. – Halcyon

+2

Где вы получаете JSON? – Jon

ответ

0
  • TRUNCATE TABLE не нуждается или хотите одинарные кавычки имя таблицы
  • Вы не показывают нам, что $_POST содержит точно, поэтому мы не можем сказать, что именно происходит.
  • Код включает данные, предоставленные пользователем в SQL без санировки, поэтому он уязвим для инъекций SQL

Вы должны войти в привычку проверять все возвращаемые значения из функций, которые вы называете ошибок (так же, как вы уже делаете с mysql_connect); это приведет к тому, что вы обнаружите, почему TRUNCATE TABLE не работает немедленно.

0

Используйте json_decode, чтобы узнать, как PHP получает объект json. На стороне Android вы, вероятно, должны просто сделать одну переменную для отправки с вашими json-данными.

ie data = '... json string идет сюда ..' (псевдокод, поскольку я не уверен, как вы это делаете в android. Идея состоит в том, что вы отправляете 1 ключ/значение в PHP, с ключ представляют собой данные, а значение является все значения в вашей JSon строки)

Тогда в PHP, если вы отправляете через POST, то вы можете получить его, как это:.

Примечание, Удалить запрос таблицы усечений, как упоминалось в других, также уничтожает всю таблицу.

Этот код должен отвечать на ваш основной вопрос.

<?php 
// decode json string 
$data = json_decode($_POST['data']); 

// sanitize your input to avoid sql injection like others have mentioned 
$safe_drink_name = mysql_real_escape_string($data->drink_name); 

.... // your mysql connect code 

$query='INSERT INTO available_ingredients (drink_name) VALUES ("'.$safe_drink_name.'")'; 
?> 
Смежные вопросы