2015-11-04 33 views
0

我试图插入4个相同的表单。但对使用PHP的mysql有不同的值。使用PHP“插入多个”来同时插入所有4行

当我提交我的数据时,数据库只接受最后一个表格的值并将其插入4次。我试图从提交的所有4中获取值。

<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); 

} 
} 
} 
?> 
+1

用不同的名字命名你的控件,比如teamname1,teamname2,.. – Thamilan

回答

0

使用不同的名称,如teamname1teamname2teamname3teamname4

<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']; 

INSERT的值: - 。

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

,或者你可以试试这个: -

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

获得价值,如: - 你的控制

$_POST['teamname'][0] 
1

chnage的名称,以便他们张贴的阵列

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

这就是为什么当你使用$varTname = $_POST['teamname'];$varTname是一个数组,并且teamname的4个值中的每一个都设置为$varTname['G#'],其中#与您为该组输入字段设置的数字匹配。

然后使用for循环来获取数据并执行您的查询,如下图所示。而你在这里也可以修复你的SQL注入漏洞。您可能还需要这么多一些卫生的数据只是要确定

$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(); 
} 

将节省您在你需要多少代码做

+0

我甚至没有想过在这个例子中使用循环。天才! – Wil

0

通常情况下这样做是通过创建表单控制器的阵列。

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

然后你可以得到一个数组在发送请求。

希望这会有所帮助!

1

您可以通过$_POST[]的阵列添加[]然后在你的PHP循环您inputname秒值进行转换成阵列并直到完成通过所有值和INSERT它作为多个值循环串联的价值观建立起来的$sql

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="test1"name="test2"等,要看到它在行动检查这个PHP Fiddle在结果页面的底部,我已经设置了输入字段的值,只需点击submit并转到r的底部在页面上看到组成的INSERT声明。


注意,上述SQL只是关于如何建立起来演示,请不要使用这样的未经验证和消毒..也将停止查询这种方式,而使用预处理语句与PDOMySQLi以避免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); 
    } 
?> 
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; 
    } 

注意.点在第一个查询后。
我认为你应该也使用自动增量键
这应该工作。