PHP:将多行插入sql数据库

时间:2014-08-28 02:09:37

标签: php sql forms

我正在尝试从我的表单中将多行数据插入到我的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 个答案:

答案 0 :(得分: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-side,如@ 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变量设置为字符串,可能包含一堆未定义的变量,因此在此之后检查一行是否为数组永远不会起作用。

答案 1 :(得分: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);

            ?>

我认为我没有正确定义所有内容,在echo中我是空值。

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