Использование PHP «вставить несколько», чтобы вставить все 4 строки одновременно

Я пытаюсь вставить 4 формы, которые являются одинаковыми. но с разными значениями для mysql с использованием PHP.

Когда я отправляю свои данные, база данных принимает только значения из последней формы и вставляет ее 4 раза. Я пытаюсь получить значения из всех 4 на submit.

<div class="req3"> <h1>Requirement 4</h1> <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <br> Enter info for 4 teams and it will inserted into the database<br><br> <div class="sqlForm"> <p class="formHead">Team 1</p> <label>Team Name:</label> <input type="text" name="teamname"><br> <label>City:</label> <input type="text" name="city"><br> <label>Best Player:</label> <input type="text" name="bestplayer"><br> <label>Year Formed:</label> <input type="text" name="yearformed"><br> <label>Website:</label> <input type="text" name="website"><br> </div> <div class="sqlForm"> <p class="formHead">Team 2</p> <label>Team Name:</label> <input type="text" name="teamname"><br> <label>City:</label> <input type="text" name="city"><br> <label>Best Player:</label> <input type="text" name="bestplayer"><br> <label>Year Formed:</label> <input type="text" name="yearformed"><br> <label>Website:</label> <input type="text" name="website"><br> </div> <div class="sqlForm"> <p class="formHead">Team 3</p> <label>Team Name:</label> <input type="text" name="teamname"><br> <label>City:</label> <input type="text" name="city"><br> <label>Best Player:</label> <input type="text" name="bestplayer"><br> <label>Year Formed:</label> <input type="text" name="yearformed"><br> <label>Website:</label> <input type="text" name="website"><br> </div> <div class="sqlForm"> <p class="formHead">Team 4</p> <label>Team Name:</label> <input type="text" name="teamname"><br> <label>City:</label> <input type="text" name="city"><br> <label>Best Player:</label> <input type="text" name="bestplayer"><br> <label>Year Formed:</label> <input type="text" name="yearformed"><br> <label>Website:</label> <input type="text" name="website"><br><br></div> <input class="styled-button" type="submit" name="insert" value="Submit"> </form> <?php if (isset($_POST['insert'])) { insertTable(); } else { $conn->close(); } function insertTable() { $servername = "localhost:3306"; $username = "XXXXX"; $password = "XXXXX"; $dbname = "XXXXX"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { echo ("Connection failed: " . $conn->connect_error); } else { $varTname = $_POST['teamname']; $varCity = $_POST['city']; $varBplayer = $_POST['bestplayer']; $varYearformed = $_POST['yearformed']; $varWebsite = $_POST['website']; $sql = "INSERT INTO Teams (teamname, city, bestplayer, yearformed, website) VALUES ('$varTname', '$varCity', '$varBplayer', '$varYearformed', '$varWebsite'), ('$varTname', '$varCity', '$varBplayer', '$varYearformed', '$varWebsite'), ('$varTname', '$varCity', '$varBplayer', '$varYearformed', '$varWebsite'), ('$varTname', '$varCity', '$varBplayer', '$varYearformed', '$varWebsite')"; if ($conn->multi_query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } mysql_query($sql); function PrepSQL($value) { // Stripslashes if(get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote $value = "'" . mysql_real_escape_string($value) . "'"; return($value); } } } ?> 

chnage имена ваших элементов управления, чтобы они отправляли в виде массивов

 <input type="text" name="teamname[G1]"> <input type="text" name="teamname[G2]"> 

это почему, когда вы используете $varTname = $_POST['teamname']; $varTname – это массив, и каждое из 4 значений teamname устанавливается как $varTname['G#'] где # соответствует номеру, установленному для этой группы полей ввода.

затем используйте цикл for, чтобы получить данные и выполнить запрос, что-то вроде ниже. в то время как вы на нем вы также можете устранить уязвимость SQL Injection. вы также можете захотеть сделать еще несколько санитарных условий для данных, чтобы быть уверенными

 $varTname = $_POST['teamname']; $varCity = $_POST['city']; $varBplayer = $_POST['bestplayer']; $varYearformed = $_POST['yearformed']; $varWebsite = $_POST['website']; $stmt = $mysqli->prepare('INSERT INTO Teams (teamname, city, bestplayer, yearformed, website) VALUES (?,?,?,?,?,?)'); $varTname1Bind = ""; $varTnameBind = ""; $varCityBind = ""; $varBplayerBind = ""; $varWebsiteBind = ""; // assuming they are all strings, adjust where needed $stmt->bind_param('sssssss', $varTname1Bind, $varTnameBind, $varCityBind, $varBplayerBind, $varYearformedBind, $varWebsiteBind); for($i = 1; i < 5; $i++) { $varTname1Bind = $varTname['G'.$i]; $varTnameBind = $varTname['G'.$i]; $varCityBind = $varCity['G'.$i]; $varBplayerBind = $varBplayer['G'.$i]; $varYearformedBind = $varYearformed['G'.$i]; $varWebsiteBind = $varWebsite['G'.$i]; $stmt->execute(); } 

сэкономит вам на том, сколько кода вам нужно сделать

Вы можете преобразовать свои input name s в массивы, добавив [] затем в ваш php-цикл через массив $_POST[] и создав свой $sql объединив значения, пока вы не закончите цикл через все значения, а INSERT это как несколько значений ,

HTML:

 <label>Team Name:</label> <input type="text" name="teamname[]"><br> <label>City:</label> <input type="text" name="city[]"><br> <label>Best Player:</label> <input type="text" name="bestplayer[]"><br> <label>Year Formed:</label> <input type="text" name="yearformed[]"><br> <label>Website:</label> <input type="text" name="website[]"><br> 

PHP:

 <?php $sql = "INSERT INTO Teams (teamname, city, bestplayer, yearformed, website) VALUES "; for($i = 0 ; $i < count($_POST['teamname']) ; $i++){ $varTname = $_POST['teamname'][$i]; $varCity = $_POST['city'][$i]; $varBplayer = $_POST['bestplayer'][$i]; $varYearformed = $_POST['yearformed'][$i]; $varWebsite = $_POST['website'][$i]; $sql .= "(" .$varTname. " , " .$varCity. " , " .$varBplayer. " , " .$varYearformed. " , " .$varWebsite. "),"; } $sql = rtrim($sql, ','); // omit the last comma // Then Excute your query ?> 

Таким образом, вам не нужно name="test2" им уникальные имена name="test1" , name="test2" и поэтому, чтобы увидеть это в действии, проверьте этот name="test2" PHP в нижней части страницы результатов, я уже установил значения полей ввода, просто нажмите «Отправить» и перейдите в нижнюю часть страницы результатов, чтобы увидеть INSERT оператор INSERT .


Обратите внимание, что приведенный выше SQL – это просто демонстрация того, как его создать, НЕ используйте его так, как это делается без проверки и дезинфекции. ТАКЖЕ STOP запрашивает этот способ и вместо этого использует подготовленные выражения с PDO или MySQLi, чтобы избежать SQL-инъекций.

Поэтому для подготовленных операторов MySQLi, процедурного стиля – я работаю с PDO – как вы видите в этом PHP Fiddle 2 , код:

 <?php // you validation goes here if (isset($_POST['insert'])) { insertTable(); } else { $conn->close(); } function insertTable() { // enter your credentials below and uncomment it to connect //$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world'); $sql = "INSERT INTO Teams (teamname, city, bestplayer, yearformed, website) VALUES"; $s = ''; $bind = ''; for($i = 0 ; $i < count($_POST['teamname']) ; $i++){ $sql .= " (?, ?, ?, ?, ?)"; $s .= 's'; $varTname = $_POST['teamname'][$i]; $varCity = $_POST['city'][$i]; $varBplayer = $_POST['bestplayer'][$i]; $varYearformed = $_POST['yearformed'][$i]; $varWebsite = $_POST['website'][$i]; $bind .= " , " . $varTname. " , " .$varCity. " , " .$varBplayer. " , " .$varYearformed. " , " .$varWebsite; } $sql = rtrim($sql, ','); // omit the last comma $s = "'" .$s. "'"; $stmt = mysqli_prepare($link, $sql); mysqli_stmt_bind_param($stmt, $s , $bind); mysqli_stmt_execute($stmt); } ?> 

Обычно это делается путем создания массивов контроллера формы.

 <input type="text" name="teamname[]"> <input type="text" name="city[]"> 

И тогда вы можете получить массив в почтовом запросе.

Надеюсь это поможет!

используйте другое имя, например teamname1 , teamname2 , teamname3 , teamname4

 <input type="text" name="teamname1"> <input type="text" name="teamname2"> <input type="text" name="teamname3"> <input type="text" name="teamname4"> 

Для получения значений: –

 $varTname1 = $_POST['teamname1']; $varTname2 = $_POST['teamname2']; $varTname3 = $_POST['teamname3']; $varTname4 = $_POST['teamname4']; 

Для значений вставки:.

 $sql = "INSERT INTO Teams (teamname) VALUES ('$varTname1'), ('$varTname2'), ('$varTname3'), ('$varTname4') 

или вы можете попробовать следующее: –

 <input type="text" name="teamname[]"> 

Получите значение как: –

 $_POST['teamname'][0] 

попробуйте этот метод

  $sql = "INSERT INTO Teams (teamname, city, bestplayer,yearformed,website) VALUES ('$varTname', '$varCity', '$varBplayer', '$varYearformed', '$varWebsite'), "; $sql.= query same as abov $sql.= query same as abov $sql.= query same as abov if (!$mysqli->multi_query($sql)) { echo "Multi query failed: (" . $mysqli->errno . ") " . $mysqli->error; } 

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