2014-08-28 135 views
0

我想从我的表单插入多行数据到我的sql数据库。我一直在查找数组,并试图应用我发现的,但无济于事。我是编程的初学者,从来没有参加任何正式的课程,只是根据需要学习代码的片段,所以我的基础知识是不存在的。PHP:插入多行到sql数据库

PlayerID不是自动递增的,而是用户提供的实际数字。

这里是我的表单代码

<table border="1"> 
<tr> 
<td align="center">Form Input Employees Data</td> 
</tr> 
<tr> 
<td> 
    <table> 
    <form method="post" action="/wp/wp-content/plugins/FormSubmit/FSdotaArray.php"> 
     <tr> 
     <td></td> 
     <td><b>Captain</b></td> 
     </tr> 
     <tr> 
     <td>Steam ID</td> 
     <td><input type="text" name="playerid" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Fisrt Name</td> 
     <td><input type="text" name="firstname" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>last Name</td> 
     <td><input type="text" name="lastname" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Position</td> 
     <td><select name="position"> 
     <option value="1:hardcarry">1: Hard Carry</option> 
     <option value="2:mid">2: Mid</option> 
     <option value="3:offlane">3: Offlane</option> 
     <option value="4:support">4: Support</option> 
     <option value="5:support">5: Support</option> 
     </select> 
     </td> 
    </tr>   
     <tr> 
     <td>Team</td> 
     <td><input type="text" name="team" size="40"> 
     </td> 
    </tr> 
    <tr> 
     <td>Game</td> 
     <td><select name="game"> 
     <option value="dota2">Dota 2</option> 
     <option value="leagueoflegends">League of Legends</option> 
     <option value="starcraft2">StarCraft 2: Heart of the Swarm</option> 
     <option value="USFIV">USFIV</option> 
     </select> 
     </td> 
    </tr>   
     <td></td> 
     <td><b>Player 2</b></td> 
     </tr> 
    <tr> 
     <td>Steam ID</td> 
     <td><input type="text" name="playerid" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Fisrt Name</td> 
     <td><input type="text" name="firstname" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>last Name</td> 
     <td><input type="text" name="lastname" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Position</td> 
     <td><select name="position"> 
     <option value="1:hardcarry">1: Hard Carry</option> 
     <option value="2:mid">2: Mid</option> 
     <option value="3:offlane">3: Offlane</option> 
     <option value="4:support">4: Support</option> 
     <option value="5:support">5: Support</option> 
     </select> 
     </td> 
    </tr>   
     <tr> 
     <td>Team</td> 
     <td><input type="text" name="team" size="40"> 
     </td> 
    </tr> 
<tr> 
     <td>Game</td> 
     <td><select name="game"> 
     <option value="dota2">Dota 2</option> 
     <option value="leagueoflegends">League of Legends</option> 
     <option value="starcraft2">StarCraft 2: Heart of the Swarm</option> 
     <option value="USFIV">USFIV</option> 
     </select> 
     </td> 
    </tr>   
     <tr> 
     <td></td> 
     <td align="right"><input type="submit" name="submit" value="Sent"></td> 
    </tr> 
    </table> 
    </td> 
</tr> 
</table> 
</body> 

这里是我的PHP代码,因为我使用WordPress和运行代码的插件所需的头。

<?php 
/* 
Plugin Name: FSdota 
Description: submit form data into sql database 
Author: F. May 
Version: 1.0 
*/ 

//inserting data order 
$con=mysqli_connect("XXXXXX","XXXXXXXX","XXXXXXXX","XXXXXXXX"); 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 

mysqli_query($con,"XXXXXXXXXX"); 

$row_data = "($playerid,$firstname, $lastname, $position,$team,$Game)"; 

if (is_array($row_data)); 
{ 
    foreach($_POST['playerid'] as $row=>$playerid) { 

      $playerid = mysqli_real_escape_string('playerid'); 
      $firstname = mysqli_real_escape_string($con,($_POST['firstname'][$row])); 
      $lastname = mysqli_real_escape_string($con,($_POST['lastname'][$row])); 
      $position = mysqli_real_escape_string($con,($_POST['position'][$row])); 
      $team = mysqli_real_escape_string($con,($_POST['team'][$row])); 
      $game = mysqli_real_escape_string($con,($_POST['game'][$row])); 

    } 
} 

if (!empty($row_data)) { 
$sql="INSERT INTO wp_es_fstest (PlayerID,FirstName,LastName,Position,Team,Game) VALUES".implode(',', $row_data); 

$query = mysqli_query($con, $sql); 

if (mysql_query($query)) 
     echo 'Successful inserts: ' . mysql_affected_rows($con); 
    else 
     echo 'query failed'; 
     } 

?> 
+2

你在混合MySQL API,他们不这样做;始终如一。 – 2014-08-28 02:17:25

回答

1

您没有为相同字段发送多个值。你的姓名属性就像name="playerid",这意味着每个具有相同名称的新条目都将覆盖前一个,并且只有一个被发送到服务器。

您应该使用阵列组的字段:

<input type="text" name="playerid[SOME_ID]" size="20"> 
... 
<input type="text" name="firstname[SOME_ID]" size="20"> 
... 
// etc. 

... 
<input type="text" name="playerid[SOME_OTHER_ID]" size="20"> 
... 
<input type="text" name="firstname[SOME_OTHER_ID]" size="20"> 
... 
// etc. 

对于SOME_IDSOME_OTHER_ID等值,你可以从数据库中,如果它已经存在,或者一个简单的计数器,只要使用一个值组中的字段使用相同的号码/ ID。

关于php方面,正如@ Fred-ii提到的那样,您应该只使用一个sql API,在这种情况下是mysqli。

还要注意的是:

$playerid = mysqli_real_escape_string('playerid'); 

应该是:

$playerid = mysqli_real_escape_string($con, 'playerid'); 

我个人也将使用与绑定变量的一份声明中,这样就可以一次准备语句,然后运行几次使用不同的值组而不必担心sql注入/转义值。

一个附加备注:

这是要失败的:

$row_data = "($playerid,$firstname, $lastname, $position,$team,$Game)"; 

if (is_array($row_data)); 
{ 

你刚才设置你的$row_data变量是一个字符串,可能与一堆不确定的变量,因此检查一行之后,这是否是一个数组永远不会工作。

+0

也在3个地方。蠕虫陷阱。 – 2014-08-28 02:20:07

+0

@ Fred-ii-我看到过更糟;-) – jeroen 2014-08-28 02:23:23

+0

同样在这里。 'mysqli_real_escape_string('playerid')'我没有看到那个。 *然而,*我早些时候快速浏览了一下,看起来有些奇怪。 – 2014-08-28 02:23:36

0

好吧,自从最后一点以来已经有一段时间了,生活变得繁忙,我想做更多的研究。

我修改了我的form.html来指定它们是数组,并创建了一个新的php文件。这里是下面的代码。

<body> 
<table border="1"> 
    <tr> 
    <td align="center">Dota 2 Open Team Registration</td> 
    </tr> 
    <tr> 
<td> 
    <table> 
    <form method="post" action="/wp/wp-content/plugins/FormSubmit/FSdotaArray.php"> 
     <tr> 
     <td></td> 
     <td><b>Captain</b></td> 
     </tr> 
     <tr> 
     <td>Steam ID</td> 
     <td><input type="text" name="playerid[playerid_1]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Fisrt Name</td> 
     <td><input type="text" name="firstname[firstname_1]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>last Name</td> 
     <td><input type="text" name="lastname[lastname_1]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Position</td> 
     <td><select name="position[position_1]"> 
     <option value="1:hardcarry">1: Hard Carry</option> 
     <option value="2:mid">2: Mid</option> 
     <option value="3:offlane">3: Offlane</option> 
     <option value="4:support">4: Support</option> 
     <option value="5:support">5: Support</option> 
     </select> 
     </td> 
    </tr>   
     <tr> 
     <td>Team</td> 
     <td><input type="text" name="team[team_1]" size="40"> 
     </td> 
    </tr> 
    <tr> 
     <td>Game</td> 
     <td><select name="game[game_1]"> 
     <option value="dota2">Dota 2</option> 
     <option value="leagueoflegends">League of Legends</option> 
     <option value="starcraft2">StarCraft 2: Heart of the Swarm</option> 
     <option value="USFIV">USFIV</option> 
     </select> 
     </td> 
    </tr> 

<!-- Player 2 --> 
     <td></td> 
     <td><b>Player 2</b></td> 
     </tr> 
    <tr> 
     <td>Steam ID</td> 
     <td><input type="text" name="playerid[player_2]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Fisrt Name</td> 
     <td><input type="text" name="firstname[firstname_2]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>last Name</td> 
     <td><input type="text" name="lastname[lastname_2]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Position</td> 
     <td><select name="position[position_2]"> 
     <option value="1:hardcarry">1: Hard Carry</option> 
     <option value="2:mid">2: Mid</option> 
     <option value="3:offlane">3: Offlane</option> 
     <option value="4:support">4: Support</option> 
     <option value="5:support">5: Support</option> 
     </select> 
     </td> 
    </tr>   
     <tr> 
     <td>Team</td> 
     <td><input type="text" name="team[team_2]" size="40"> 
     </td> 
    </tr> 
<tr> 
     <td>Game</td> 
     <td><select name="game[game_2]"> 
     <option value="dota2">Dota 2</option> 
     <option value="leagueoflegends">League of Legends</option> 
     <option value="starcraft2">StarCraft 2: Heart of the Swarm</option> 
     <option value="USFIV">USFIV</option> 
     </select> 
     </td> 
    </tr> 

<!--Player 3 -->  
     <td></td> 
     <td><b>Player 3</b></td> 
     </tr> 
    <tr> 
     <td>Steam ID</td> 
     <td><input type="text" name="playerid[player_3]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Fisrt Name</td> 
     <td><input type="text" name="firstname[firstname_3]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>last Name</td> 
     <td><input type="text" name="lastname[lastname_3]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Position</td> 
     <td><select name="position[position_3]"> 
     <option value="1:hardcarry">1: Hard Carry</option> 
     <option value="2:mid">2: Mid</option> 
     <option value="3:offlane">3: Offlane</option> 
     <option value="4:support">4: Support</option> 
     <option value="5:support">5: Support</option> 
     </select> 
     </td> 
    </tr>   
     <tr> 
     <td>Team</td> 
     <td><input type="text" name="team[team_3]" size="40"> 
     </td> 
    </tr> 
<tr> 
     <td>Game</td> 
     <td><select name="game[game_3]"> 
     <option value="dota2">Dota 2</option> 
     <option value="leagueoflegends">League of Legends</option> 
     <option value="starcraft2">StarCraft 2: Heart of the Swarm</option> 
     <option value="USFIV">USFIV</option> 
     </select> 
     </td> 
    </tr>   

<!-- Player 4 --> 
     <td></td> 
     <td><b>Player 4</b></td> 
     </tr> 
    <tr> 
     <td>Steam ID</td> 
     <td><input type="text" name="playerid[player_4]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Fisrt Name</td> 
     <td><input type="text" name="firstname[firstname_4]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>last Name</td> 
     <td><input type="text" name="lastname[lastname_4]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Position</td> 
     <td><select name="position[position_4]"> 
     <option value="1:hardcarry">1: Hard Carry</option> 
     <option value="2:mid">2: Mid</option> 
     <option value="3:offlane">3: Offlane</option> 
     <option value="4:support">4: Support</option> 
     <option value="5:support">5: Support</option> 
     </select> 
     </td> 
    </tr>   
     <tr> 
     <td>Team</td> 
     <td><input type="text" name="team[team_4]" size="40"> 
     </td> 
    </tr> 
<tr> 
     <td>Game</td> 
     <td><select name="game[game_4]"> 
     <option value="dota2">Dota 2</option> 
     <option value="leagueoflegends">League of Legends</option> 
     <option value="starcraft2">StarCraft 2: Heart of the Swarm</option> 
     <option value="USFIV">USFIV</option> 
     </select> 
     </td> 
    </tr>  

<!-- Player 5 --> 
     <td></td> 
     <td><b>Player 5</b></td> 
     </tr> 
    <tr> 
     <td>Steam ID</td> 
     <td><input type="text" name="playerid[player_5]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Fisrt Name</td> 
     <td><input type="text" name="firstname[firstname_5]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>last Name</td> 
     <td><input type="text" name="lastname[lastname_5]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Position</td> 
     <td><select name="position[position_5]"> 
     <option value="1:hardcarry">1: Hard Carry</option> 
     <option value="2:mid">2: Mid</option> 
     <option value="3:offlane">3: Offlane</option> 
     <option value="4:support">4: Support</option> 
     <option value="5:support">5: Support</option> 
     </select> 
     </td> 
    </tr>   
     <tr> 
     <td>Team</td> 
     <td><input type="text" name="team[team_5]" size="40"> 
     </td> 
    </tr> 
<tr> 
     <td>Game</td> 
     <td><select name="game[game_5]"> 
     <option value="dota2">Dota 2</option> 
     <option value="leagueoflegends">League of Legends</option> 
     <option value="starcraft2">StarCraft 2: Heart of the Swarm</option> 
     <option value="USFIV">USFIV</option> 
     </select> 
     </td> 
    </tr>  

<!-- Player Sub 1 [6] --> 
     <td></td> 
     <td><b>Sub 1 (Optional)</b></td> 
     </tr> 
    <tr> 
     <td>Steam ID</td> 
     <td><input type="text" name="playerid[player_6]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Fisrt Name</td> 
     <td><input type="text" name="firstname[firstname_6]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>last Name</td> 
     <td><input type="text" name="lastname[lastname_6]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Position</td> 
     <td><select name="position[position_6]"> 
     <option value="1:hardcarry">1: Hard Carry</option> 
     <option value="2:mid">2: Mid</option> 
     <option value="3:offlane">3: Offlane</option> 
     <option value="4:support">4: Support</option> 
     <option value="5:support">5: Support</option> 
     </select> 
     </td> 
    </tr>   
     <tr> 
     <td>Team</td> 
     <td><input type="text" name="team[team_6]" size="40"> 
     </td> 
    </tr> 
<tr> 
     <td>Game</td> 
     <td><select name="game[game_6]"> 
     <option value="dota2">Dota 2</option> 
     <option value="leagueoflegends">League of Legends</option> 
     <option value="starcraft2">StarCraft 2: Heart of the Swarm</option> 
     <option value="USFIV">USFIV</option> 
     </select> 
     </td> 
    </tr> 

<!-- Player Sub 2 [7] --> 
     <td></td> 
     <td><b>Sub 2</b></td> 
     </tr> 
    <tr> 
     <td>Steam ID</td> 
     <td><input type="text" name="playerid[player_7]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Fisrt Name</td> 
     <td><input type="text" name="firstname[firstname_7]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>last Name</td> 
     <td><input type="text" name="lastname[lastname_7]" size="20"> 
     </td> 
     </tr> 
     <tr> 
     <td>Position</td> 
     <td><select name="position[position_7]"> 
     <option value="1:hardcarry">1: Hard Carry</option> 
     <option value="2:mid">2: Mid</option> 
     <option value="3:offlane">3: Offlane</option> 
     <option value="4:support">4: Support</option> 
     <option value="5:support">5: Support</option> 
     </select> 
     </td> 
    </tr>   
     <tr> 
     <td>Team</td> 
     <td><input type="text" name="team[team_7]" size="40"> 
     </td> 
    </tr> 
<tr> 
     <td>Game</td> 
     <td><select name="game[game_7]"> 
     <option value="dota2">Dota 2</option> 
     <option value="leagueoflegends">League of Legends</option> 
     <option value="starcraft2">StarCraft 2: Heart of the Swarm</option> 
     <option value="USFIV">USFIV</option> 
     </select> 
     </td> 
    </tr> 

     <tr> 
     <td></td> 
     <td align="right"><input type="submit" name="submit" value="Sent"></td> 
    </tr> 
    </table> 
    </td> 
</tr> 
</table> 
</body> 

,然后PHP代码

  <?php 
       /* 
       Plugin Name: FSdota 
       Description: submit form data into sql database 
       Author: F. May 
       Version: 1.0 
       */ 

      //inserting data order 
      $con=mysqli_connect("xxxxxxxx","xxxxxxx","xxxxxx!","xxxxx"); 
      // Check connection 
      if (mysqli_connect_errno()) { 
       echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
      } 

      // escape variables for security 
      //define values 

      $player_a = array($playerid_1,$playerid_2,$playerid_3,$playerid_4,$playerid_5,$playerid_6,$playerid_7); 
      $firstname_a = array($firstname_1,$firstname_2,$firstname_3,$firstname_4,$firstname_5,$firstname_6,$firstname_7); 
      $lastname_a = array($lastnanme_1,$lastnanme_2,$lastnanme_3,$lastnanme_4,$lastnanme_5,$lastnanme_6,$lastnanme_7); 
      $position_a = array($position_1,$position_2,$position_3,$position_4,$position_5,$position_6,$position_7); 
      $team_a = array($team_1,$team_2,$team_3,$team_4,$team_5,$team_6,$team_7); 
      $game_a = array($game_1,$game_2,$game_3,$game_4,$game_5,$game_6,$game_7); 

      $playerid = mysqli_real_escape_string($con, '$playerid_a'); 
      $firstname = mysqli_real_escape_string($con, '$firstname_a'); 
      $lastname = mysqli_real_escape_string($con, '$lastname_a'); 
      $position = mysqli_real_escape_string($con,'$position_a'); 
      $team = mysqli_real_escape_string($con, '$team_a'); 
      $game = mysqli_real_escape_string($con, '$game_a'); 


      for ($i = 1; $i < 7; $i++) { 

      //define arrays into variables with counter 
      // $a = $playerid_a[$]; 
      // $b = $firstname_a[$i]; 
      // $c = $lastname_a[$i]; 
      // $d = $position_a[$i]; 
      // $e = $team_a[$i]; 
      // $f = $game_a[$i]; 

        $str[ ] = "('{$player_[$i]}','{$firstname_[$i]}','{$lastname_[$i]}','{$position_[$i]}','{$team_[$i]}','{$game_[$i]}')"; 
      } 

      $s= implode(',', $str); 

      $sql="INSERT INTO wp_es_fstest (playerid, firstname, lastname, position, team, game) VALUES $s"; 

      echo $sql; 


      mysqli_close($con); 

      ?> 

我不认为我正确定义的一切,在回声我是空值。

INSERT INTO wp_es_fstest (playerid, firstname, lastname, position, team, game) VALUES  ('','','','','',''),('','','','','',''),('','','','','',''),('','','','','',''),('','','','','',''), ('','','','','','')