Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Не создается таблица в MYSQL через PHP код. Как исправить ошибку?

Здравствуйте, у меня башка взрывается, не могу никак создать столбцы со значениями через INSERT INTO в файле check.php. Изначально у меня на этот файл, я работаю в OPEN SERVER. Помогите пожалуйста что тут не так?

Вот html форма:

<form method="POST" action="./check.php" class="contact">

<fieldset class="contact-inner">

<h1 style="text-align: center; font-size: 20px; margin-bottom: 10%; line-height: 100%;">Создайте свой заказ или вакансию!</h1>

<p class="contact-input">

<input type="text" name="name" placeholder="Введите имя" autofocus>

</p>

<p class="contact-input">

<input type="text" name="name" placeholder="Введите e-mail" autofocus>

</p>

<p class="contact-input">

<input type="number" name="money" placeholder="Введите цену (автоматически в ₽)" autofocus>

</p>

<p class="contact-input">

<input name="tel" type="number" id="tel" placeholder="Введите номер телефона без + и ()">

</p>

<p class="contact-input">

<label for="select" class="select">

<select name="subject" id="select">

<option value="" selected>Выберите раздел</option>

<option value="1">Одноразовый заказ</option>

<option value="2">Вакансия</option>

</select>

</label>

</p>

<p class="contact-input">

<textarea name="p" placeholder="Введите требования или что нужно сделать. Опишите всё подробно, чтобы исполнители заинтересовались"></textarea>

</p>

<p class="contact-submit">

<input type="submit" name="submit" value="Отправить">

</p>

</fieldset>

</form>

Вот файл check.php

<?php

if(isset($_POST['submit'])){

$link= mysqli_connect("localhost", "mysql", "mysql", "data");

$link->set_charset('utf-8');

mysqli_query($link, "CREATE TABLE cards

(

`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

`name` TEXT(200) NOT NULL,

`title` TEXT(40) NOT NULL,

`p` TEXT(250) NOT NULL,

`tel` TEXT(20) NOT NULL,

`email` TEXT(50) NOT NULL,

`money` INT(10) NOT NULL,

`subject` TEXT(40) NOT NULL

)");

$subject = $_POST['subject'];

$title = $_POST['title'];

$name = $_POST['name'];

$email = $_POST['email'];

$p = $_POST['p'];

$tel = $_POST['tel'];

$subject = (int) $subject;

$money = $_POST['money'];

if ($subject == 1){

$subject = 'Одноразовый заказ';

} elseif ($subject == 2){

$subject = 'Вакансия';

};

$a = "Subject: ".$subject." Title: ".$title." Name: ".$name." E-Mail: ".$email." P: ".$p." tel: ".$tel." ";

echo $a;

mysqli_query($link, "INSERT INTO `cards` (`name`, `title`, `p`, `tel`, `email`, `money`, `subject`) VALUES ('".$name."', '".$title."', '".$p."', '".$tel."', '".$email."', '".$money."', '".$subject."'");

};

?>

HtmlНаписание кода+3
Владислав Аргун
  ·   · 219
Лучший
Программист (включая Web) с опытом работы с 1983...  · 12 апр 2021  · selek.ru

У вас небольшой бардак в коде.

Для начала, в форме input'ы имени и email имеют одинаковый атрибут name="name". Потом, autofocus имеет смысл только в одном - первом тэге.

В check.php вы соединяетесь с БД в процедурном стиле через mysqli_connect и тут же пытаетесь задать кодировку в объектном стиле $link->set_charset вместо процедурного mysqli_set_charset.

Далее. Зачем каждый раз создавать таблицу через РНР? Разве не проще и удобнее сделать это один раз при создании БД. А если уж так невтерпёж, то хотя-бы добавить в CREATE TABLE модификатор IF NOT EXISTS.

Ну и "вишенка на торте": в нынешнем виде код check.php - просто подарок хакеру, вообще ни одной фильтрации и валидации данных, хотя-бы штатными filter_input.

"Самое большое отклонение от нормы - посредственность." В.ГоловачёвПерейти на selek.ru
Отличный ответ. Пожалуй добавил бы, что стоит посмотреть в сторону библиотек, вроде idiorm, чтобы не писать сырые... Читать дальше
— Предприниматель в сфере IT бизнеса с 2012...  · 23 мая 2021

А зачем при каждом новом обращении к check.php создавать таблицу заново? Смысл, если вам надо только один раз создать таблицу и продолжить добавлять в неё данные, через INSERT

CRM-система для бизнеса и продаж.Перейти на u-crm.ru