Member 14834980 Ответов: 2

Как мне из окна множественного выбора (listbox) вставить данные в базу данных


У меня есть форма, где я получаю данные из таблицы в список. Я могу вставлять данные, но не из списка. Он говорит массив для одного варианта, а для другого я получаю ошибку преобразования массива в строку.

<form action="dodajstudenta.php" method="POST">

        <div class="modal-body">

            <div class="form-group">
                <label> Ime i Prezime </label>
                <input type="text" name="ime" class="form-control" placeholder="Upišite Ime i Prezime">
            </div>
            <div class="form-group">
                <label> Upišite Spol </label>
                <input type="text" name="spol" class="form-control" placeholder="Upišite Spol (M/Ž)">
            </div>
            <div class="form-group">
                <label>Grad</label>
                <input style="font-style: #f89900" type="text" name="grad" class="form-control" placeholder="Upišite Grad iz kojeg dolazi Student">
            </div>
            <div class="form-group">
                <label>Telefon</label>
                <input style="font-style: #f89900" type="text" name="tel" class="form-control" placeholder="Upišite Telefon">
            </div>
            <div class="form-group">
                <label>Email</label>
                <input style="font-style: #f89900" type="email" name="email" class="form-control" placeholder="Upišite Email">
            </div>
            <div class="form-group">
                <label>Uzrast</label>
                <input style="font-style: #f89900" type="text" name="uzrast" class="form-control" placeholder="Upišite Uzrast">
            </div>
            <div class="form-group">
                <label>Škola</label>
                <input style="font-style: #f89900" type="text" name="skola" class="form-control" placeholder="Upišite Obrazovnu Ustanovu">
            </div>

            <div class="form-group">
              <label>Izaberite Programe sa liste</label>
             <select name="naziv[]" id="naziv" class="form-control action" id="naziv" multiple="">
              <option disabled selected>-- Izaberi Program --</option>
              <?php
                include "config/database.php";  // Using database connection file here
                $records = mysqli_query($conn, "SELECT naziv FROM program");  // Use select query here 

                while($data = mysqli_fetch_array($records))
                {
                echo "<option value='". $data['naziv'] ."'>" .$data['naziv'] ."</option>";  // displaying data in option menu
                } 
              ?>  
            </select> 
            </div>
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-secondary" data-dismiss="modal">Zatvori</button>
            <button type="submit" value="Add Student" name="addstudent" class="btn btn-primary">Pošalji</button>
        </div>
      </form>


Вариант первый PHP: вызывается действие dodajstudenta.php -> это работает нормально, но я вставляю в массив таблицы базы данных не, параметры формы listbox.

<?php
require('config/database.php');
// When form submitted, insert values into the database.

if (isset($_REQUEST['ime'])) {
$ime = stripslashes($_REQUEST['ime']);
//escapes special characters in a string
$ime = mysqli_real_escape_string($conn, $ime);
if (isset($_REQUEST['spol'])) {
$spol = stripslashes($_REQUEST['spol']);
//escapes special characters in a string
$spol = mysqli_real_escape_string($conn, $spol);
if (isset($_REQUEST['grad'])) {
$grad = stripslashes($_REQUEST['grad']);
//escapes special characters in a string
$grad = mysqli_real_escape_string($conn, $grad);
if (isset($_REQUEST['telefon'])) {
$telefon = stripslashes($_REQUEST['telefon']);
//escapes special characters in a string
$telefon = mysqli_real_escape_string($conn, $telefon);
if (isset($_REQUEST['email'])) {
// removes backslashes
$email = stripslashes($_REQUEST['email']);
//escapes special characters in a string
$email = mysqli_real_escape_string($conn, $email);
if (isset($_REQUEST['uzrast'])) {
// removes backslashes
$uzrast = stripslashes($_REQUEST['uzrast']);
//escapes special characters in a string
$uzrast = mysqli_real_escape_string($conn, $uzrast);

if (isset($_REQUEST['skola'])) {
// removes backslashes
$skola = stripslashes($_REQUEST['skola']);
//escapes special characters in a string
$skola = mysqli_real_escape_string($conn, $skola);

if (isset($_REQUEST['naziv'])) {
// removes backslashes
$naziv = stripslashes($_REQUEST['naziv']);
//escapes special characters in a string
$naziv = mysqli_real_escape_string($conn, $naziv);

$naziv=$_POST["naziv"];

$query = "INSERT into `students` (ime, spol, grad, tel, email, uzrast, skola, naziv) VALUES ('$ime', '$spol', '$grad', '$tel', '$email', '$uzrast', '$skola', '$naziv')";
$result   = mysqli_query($conn, $query);
if ($result) {
header('Location: studenti.php');
echo "<div class='form'>
<h3>Uspješno ste dodali program.</h3><br/>
</div>";
} else {
echo "<div class='form'>
<h3>Niste sva polja popunili.</h3><br/>
</div>";
}
}
}
}
}
}
}
}
} else {
}
?>



Вариант второй PHP: здесь я получаю проблему с покрытием строки массива

<?php 
  include("config/database.php");

  if (isset($_POST['addstudent'])) {
    $ime = $_POST['ime'];
    $spol = $_POST['spol'];
    $grad = $_POST['grad'];
    $tel = $_POST['tel'];
    $email = $_POST['email'];
    $uzrast = $_POST['uzrast'];
    $skola = $_POST['skola'];
    $naziv = $_POST['naziv'];

    $query = "INSERT INTO multiple `students`(`ime`, `spol`, `grad`, `tel`, `email`, `uzrast`, `skola`, `naziv`) VALUES ('$ime', '$spol', '$grad', '$tel', '$email','$uzrast','$skola','$naziv');";
    if (mysqli_query($conn,$query)) {
      $datainsert['insertsucess'] = '<p style="color: green;">Student Inserted!</p>';
    }else{
      $datainsert['inserterror']= '<p style="color: red;">Student Not Inserted, please input right informations!</p>';
    }
  }
?>


Насколько точно я могу вставлять данные, я не очень хорошо разбираюсь в javascript. Могу ли я сделать это только с php?

Что я уже пробовал:

Я пробовал разные варианты, я хотел бы сделать, чтобы вставить его автоматически из списка, или поместить данные в текстовое поле, а затем вставить в datatable.

Richard MacCutchan

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

Member 14834980

Я сделал два кода для вставки данных в таблицу, и я не могу вставить несколько данных поля выбора в таблицу базы данных. В коде я получил вот это ""Обратите внимание: преобразование массива в строку в C:\xampp\htdocs\civitas\studenti.php на линии 24""
строка 24: $запрос = "вставить в несколько `студенты`(`Имэ`, `спол`, `град`, `тел`, `письмо`, `uzrast`, `школа`, `naziv`) значения ('$име', '$спол', '$град', '$тел', '$email'мы,'$uzrast','$скола','$naziv');";

Никакие данные не вставляются в базу данных. Я хочу просто вставить из своей формы все данные в datatable.

Richard MacCutchan

Переменная "naziv" является массивом, и вы не можете передать массив в виде строки.

2 Ответов

Рейтинг:
0

Patrice T

$query = "INSERT into `students` (ime, spol, grad, tel, email, uzrast, skola, naziv) VALUES ('$ime', '$spol', '$grad', '$tel', '$email', '$uzrast', '$skola', '$naziv')";

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Рейтинг:
0

Andre Oosthuizen

Если я посмотрю на ваш код, то naziv-это поле в таблице программы.

Затем вы загружаете данные этого поля в свой список в виде массива $data['naziv']

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

'$naziv[0]'