Создавая свой собственный веб-сайт электронной коммерции, а внутри back-end ive создала форму, в которой администраторы могут создавать определенные группы фильтров продуктов (например, цвета).
Когда я пытаюсь вставить новую таблицу в базу данных im, используя цикл foreach, чтобы убедиться, что пустые записи не вставлены (и чтобы эти пустые записи не вызывали проблем).
Однако я столкнулся с проблемой синтаксиса, и я полностью изучил это без каких-либо успехов.
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'entry_date DEFAULT CURRENT_TIMESTAMP)' в строке 1
Мой код:
// GROUP NAME PROVIDED
$group_name = $_POST['g_name'];
// FILTER OPTIONS PROVIDED
$filter_1 = $_POST['filter_1'];
$filter_2 = $_POST['filter_2'];
$filter_3 = $_POST['filter_3'];
$filter_4 = $_POST['filter_4'];
$filter_5 = $_POST['filter_5'];
$filter_6 = $_POST['filter_6'];
$filter_7 = $_POST['filter_7'];
$filter_8 = $_POST['filter_8'];
$filter_9 = $_POST['filter_9'];
$filter_10 = $_POST['filter_10'];
$filter_11 = $_POST['filter_11'];
include '../connection.php';
$query = "CREATE TABLE $group_name (
entry_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
product_id VARCHAR(255) NOT NULL,";
$newarray = array($filter_1,$filter_2,$filter_3,$filter_4,$filter_5,$filter_6,$filter_7,$filter_8,$filter_9,$filter_10,$filter_11);
// For each value that is not NULL
foreach ($newarray as $key => $value) {
if (is_null($value) === false) {
$new_array[$key] = $value;
echo $value;
$query = "$value VARCHAR(255) NOT NULL,";
}
}
$query= "entry_date DEFAULT CURRENT_TIMESTAMP)";
// Checking if query was successful or not
if (mysqli_query($connection, $query )) {
echo "Table created successfully";
} else {
echo "Error creating table: " . mysqli_error($connection);
}
mysqli_close($connection);
Я пробовал разные варианты вставки timestamp, но не повезло.
Стоит отметить, что я также разделил свой запрос так, чтобы можно было включить цикл foreach.
Любая помощь будет оценена!
PS Я знаю, что этот код открыт для SQL-инъекции, я хочу, чтобы он работал, прежде чем сделать его безопасным!
Благодарю. Стэн.
Рабочий код:
// GROUP NAME PROVIDED
$group_name = $_POST['g_name'];
// FILTER OPTIONS PROVIDED
$filter_1 = $_POST['filter_1'];
$filter_2 = $_POST['filter_2'];
$filter_3 = $_POST['filter_3'];
$filter_4 = $_POST['filter_4'];
$filter_5 = $_POST['filter_5'];
$filter_6 = $_POST['filter_6'];
$filter_7 = $_POST['filter_7'];
$filter_8 = $_POST['filter_8'];
$filter_9 = $_POST['filter_9'];
$filter_10 = $_POST['filter_10'];
$filter_11 = $_POST['filter_11'];
include '../connection.php';
$query = "CREATE TABLE $group_name (
entry_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
product_id VARCHAR(255) NOT NULL,";
$newarray = array($filter_1,$filter_2,$filter_3,$filter_4,$filter_5,$filter_6,$filter_7,$filter_8,$filter_9,$filter_10,$filter_11);
$filtered_array = array_filter($newarray);
// For each value that is not NULL
foreach ($filtered_array as $key => $value) {
$filtered_array[$key] = $value;
echo $value;
$query .= "$value VARCHAR(255) NOT NULL,";
}
$query .= "entry_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP)";
echo "<br><br>".$query;
// Checking if query was successful or not
if (mysqli_query($connection, $query )) {
echo "Table created successfully";
} else {
echo "Error creating table: " . mysqli_error($connection);
}
mysqli_close($connection);
вам не хватает типа:
entry_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
или же
entry_date DATETIME DEFAULT CURRENT_TIMESTAMP
вы перезаписываете переменную $ query
использование =. если вы хотите скопировать данные в строку
$query =. "entry_date DEFAULT CURRENT_TIMESTAMP)";
купите, как это не очень хороший стиль, чтобы хранить его так
$query= "entry_date DEFAULT CURRENT_TIMESTAMP)";
=>$query .= "entry_date DEFAULT CURRENT_TIMESTAMP)";
просто пропустить точку здесь и, возможно, внутри цикла тоже.