Почему я получаю синтаксическую ошибку при встраивании элементов массива в строку? - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь вставить некоторые данные в базу данных. Я могу сделать это на одном ПОЛЕ, но не на нескольких. Кажется, это простая проблема синтаксиса. Я получаю ошибку:

Parse error: syntax error, unexpected ',', expecting ']'

Ошибка в строке INSERT:

<?php
$con = mysql_connect("local","username","password");
if (!$con)
{die('Could not connect: ' . mysql_error());}

mysql_select_db("npsreviews", $con);

$sql="INSERT INTO burkett (DATE, STORE, 5STAR, 4STAR, 3STAR, 2STAR, 1STAR, TOTAL, NPS) VALUES ('$_POST[DATE]', '$_POST[STORE]', '$_POST[5STAR]', '$_POST[4STAR]', '$_POST[3STAR]', '$_POST[2STAR]', '$_POST[1STAR]', '$_POST[TOTAL]', '$_POST[NPS]')";

if (!mysql_query($sql,$con)){die('Error: ' . mysql_error());}

mysql_close($con)
?> 

Заранее спасибо, я не могу найти ответ при поиске Multiple $ POST.

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

Прежде всего, вам не хватает кавычек вокруг индексов массива;Это должно быть $_POST["STORE"], а не $_POST[STORE].Во-вторых, вы не можете индексировать массивы таким образом с помощью интерполяции строк.Вам нужно будет использовать синтаксис {$...}:

$x = array("key" => "value");

echo "The value of 'key' is '{$x["key"]}'";  

или объединить фрагменты строки:

echo "The value of 'key' is '" . $x["key"] . "'";

Любой метод выдаст:

The value of 'key' is 'value'

Примечание. Я ответил на ваш вопрос как на простую синтаксическую ошибку, но это не решает вашу реальную проблему, которая заключается в безудержной уязвимости внедрения SQL.

1 голос
/ 14 февраля 2012

SQL-запрос должен выглядеть следующим образом

$sql="INSERT INTO burkett (DATE, STORE, 5STAR, 4STAR, 3STAR, 2STAR, 1STAR, TOTAL, NPS) VALUES ('{$_POST["DATE"]}', 
'{$_POST["STORE"]}', '{$_POST["5STAR"]}', '{$_POST["4STAR"]}', '{$_POST["3STAR"]}', '{$_POST["2STAR"]}', 
'{$_POST["1STAR"]}', '{$_POST["TOTAL"]}', '{$_POST["NPS"]}')";

Но в целом ваш SQL-запрос склонен к SQL-инъекции , поэтому я бы порекомендовал очистить ваш POST, прежде чем что-то делать с ним

Подробнее об SQL-инъекциях здесь

Вы можете очистить свой $ _POST, используя

$_POST = array_map('mysql_real_escape_string',$_POST);

Или используйте PDO и используйте подготовленные операторы для выполнения SQL INSERTS, UPDATES и т. Д.

0 голосов
/ 14 февраля 2012

убегай так как:

$sql= "INSERT INTO burkett (DATE, STORE, 5STAR, 4STAR, 3STAR, 2STAR, 1STAR, TOTAL, NPS) VALUES ('" . $_POST['DATE'] . "', '" . $_POST['STORE'] . "', '" . $_POST['5STAR'] . "', '" . $_POST['4STAR'] . "', '" . $_POST['3STAR'] . "', '" . $_POST['2STAR'] . "', '" . $_POST['1STAR'] . "', '" . $_POST['TOTAL'] . "', '" . $_POST['NPS'] . "')";
...