0

我正在尝试一次提交一个充满信息的表格,但找不到答案。向数据库提交一组信息没有问题,但我需要一次侮辱 1 到 50 个相同的值。这是一个例子:

我们正在记录单圈时间,因此我们需要能够在 Web 应用程序上填写表格,其中包含大量名称和事件时间。因此,我们需要一次添加大量 SQL 条目。

我试过只是复制和粘贴表单信息,但这会导致 phpmyadmin 中出现一组空白数据。

这是代码:

<?php


$host = "localhost";
$databasename = "pe_results";
$databaseusername = "root";
$databasepassword = "";

$conn = mysql_connect("$host", "$databaseusername", "$databasepassword"); 
mysql_select_db("$databasename", $conn); 

        if (isset($_POST['Name'])) { 
        $Name = $_POST['Name'];
        }
        if (isset($_POST['Short'])) { 
        $Short = $_POST['Short'];
        }
        if (isset($_POST['Med'])) { 
        $Med = $_POST['Med'];
        }
        if (isset($_POST['Long'])) { 
        $Long = $_POST['Long'];
        }
        if (isset($_POST['VLong'])) { 
        $VLong = $_POST['VLong'];
        }
        if (isset($_POST['Extreme'])) { 
        $Extreme = $_POST['Extreme'];
        }
        if (isset($_POST['LJump'])) { 
        $LJump = $_POST['LJump'];
        }
        if (isset($_POST['HJump'])) { 
        $HJump = $_POST['HJump'];
        }
        if (isset($_POST['Shotputt'])) { 
        $Shotputt = $_POST['Shotputt'];
        }
        if (isset($_POST['Discuss'])) { 
        $Discuss = $_POST['Discuss'];
        }
        if (isset($_POST['Javelin'])) { 
        $Javelin = $_POST['Javelin'];
        }
        if (isset($_POST['Date'])) { 
        $Date = $_POST['Date'];
        }
        if (isset($_POST['Year'])) { 
        $Year = $_POST['Year'];
        }



           $i = count($Name);

for ($i=0;$i<10;$i++) {
$n = $Name[$i];
$s = $Short[$i];
$me = $Med[$i];
$lng = $Long[$i];
$slng = $VLong[$i];
$ext = $Extreme[$i];
$ljump = $LJump[$i];
$hjump = $HJump[$i];
$shot = $Shotputt[$i];
$disc = $Discuss[$i];
$jav = $Javelin[$i];
$date = $Date[$i];
$year = $Year[$i];

//and so on with more variable...

$sql="INSERT INTO results_main (`Name`, `Short`, `Med`, `Long`, `Vlong`, `Extreme`, `LJump`, `HJump`, `Shotputt`, `Discuss`, `Javelin`, `Date`, `Year`)
            VALUES ('$n', '$s', '$me', '$lng', '$slng', '$ext', '$ljump', '$hjump', '$shot', '$disc', '$jav', '$date', '$year')";

}


    $result = mysql_query($sql) or die(mysql_error ());;
        if($result){
echo"<br/>Everythings been saved";
echo "<BR>";
echo "<a href='index.php'>Back to the main page</a>";
}

else {

echo $result = mysql_query($sql,$conn) or die (mysql_error ());
}

// close connection 
mysql_close($conn);
?>

还可以在下面找到 HTML

<?php
// Create connection
$con=mysqli_connect("127.0.0.1","root","","pe_results");

// Check connection
if (mysqli_connect_errno($con))
  {
  echo "Uh oh, tell chris that " . mysqli_connect_error() . "NO DATA WILL BE SAVED";
  }
?>
    <a href="results.php"><div id="1" >Results</div></a>
    <a href="record.php"><div id="2">Record</div></a>
    <a href="overview.php"><div id="3">Overview</div></a>
    <div id="4">Blank</div>
   <form name="input_primary" action="process.php" method="post">

    <font color="#FFFFFF"><strong>Date:</strong></font><input name="Date" type="date" />

   <font color="#FFFFFF"><strong>Year:</strong></font><select name="Year">
        <option value="7">Year 7</option>
        <option value="8">Year 8</option>
        <option value="9">Year 9</option>
        <option value="10">Year 10</option>
        <option value="11">Year 11</option>
        <option value="12">Year 12</option>
        <option value="13">Year 13</option>
       </select>
       <input type="submit" value="Save results!" name="submit" />


<table width="200" border="1px solid black" id="maintab">
  <tr>
    <th scope="col">Name</th>
    <th scope="col">100m</th>
    <th scope="col">200m</th>
    <th scope="col">400m</th>
    <th scope="col">800m</th>
    <th scope="col">1500m</th>
    <th scope="col">Long Jump</th>
    <th scope="col">High Jump</th>
    <th scope="col">Shotputt</th>
    <th scope="col">Discus</th>
    <th scope="col">Javelin</th>
  </tr>
  <tr>
    <td>
        <input name="Name" type="text" />
    </td>
    <td> 
        <input name="Short" type="text" size="10px" />
    </td>
    <td>
         <input name="Med" type="text" size="10px" />
    </td>
    <td> 
        <input name="Long" type="text" size="10px" />
    </td>
    <td>
         <input name="VLong" type="text" size="10px" />
    </td>
    <td>
         <input name="Extreme" type="text" size="10px" />
    </td>
    <td>
         <input name="LJump" type="text" size="10px" />
    </td>
    <td>
         <input name="HJump" type="text" size="10px" />
    </td>
    <td>
         <input name="Shotputt" type="text" size="10px" />
    </td>
    <td>
         <input name="Discuss" type="text" size="10px" />
    </td>
    <td>
         <input name="Javelin" type="text" size="10px" />
    </td>
  </tr>
4

3 回答 3

1

如果我正确理解了您的问题,您想要做的是用[] So命名字段

<select name="Year">

变成

<select name="Year[]">

然后您将能够遍历提交的值,例如:

foreach($_POST['Year'] as $k=>$v){
 echo $v." - This is the value";
 echo $k." - This is the key";
}

编辑:

(string)$insert;
if(is_array($_POST['Year'])){
    foreach($_POST['Year'] as $k=>$v){  
         $insert .= "(".$_POST['Name'][$k].", ".$_POST['Short'][$k].", ".$_POST['Med'][$k].", ".$_POST['Long'][$k].", ".$_POST['VLong'][$k].", ".$_POST['Extreme'][$k].", ".$_POST['LJump'][$k].", ".$_POST['HJump'][$k].", ".$_POST['Shotputt'][$k].", ".$_POST['Discuss'][$k].", ".$_POST['Javelin'][$k].", ".$_POST['Date'][$k].", ".$_POST['Year'][$k]."),"; 
    }
     $insert = substr_replace($insert ,0,-1);
}else{
    $insert .= "($_POST['Name'], $_POST['Short'], $_POST['Med'], $_POST['Long'], $_POST['VLong'], $_POST['Extreme'], $_POST['LJump'], $_POST['HJump'], $_POST['Shotputt'], $_POST['Discuss'], $_POST['Javelin'], $_POST['Date'], $_POST['Year'])"; 
}
$sql="INSERT INTO results_main 
(`Name`, `Short`, `Med`, `Long`, `VLong`, `Extreme`, `LJump`, `HJump`, `Shotputt`, `Discuss`, `Javelin`, `Date`, `Year`)
VALUES 
".$insert;

这应该可以将所有内容都放入一个查询中,而不是对每一行进行多个查询

于 2013-04-14T23:13:10.740 回答
0

将括号 [] 添加到您的 html 表单中的所有名称(有意义的地方)。方括号 [] 表示元素被视为动态数组。

在您的html-form中,执行以下操作:

<form name="input_primary" action="process.php" method="post">

    <font color="#FFFFFF"><strong>Date:</strong></font><input name="Date" type="date" />
   <font color="#FFFFFF"><strong>Year:</strong></font><select name="Year">
        <option value="7">Year 7</option>
        <option value="8">Year 8</option>
        <option value="9">Year 9</option>
        <option value="10">Year 10</option>
        <option value="11">Year 11</option>
        <option value="12">Year 12</option>
        <option value="13">Year 13</option>
       </select>
       <input type="submit" value="Save results!" name="submit" />


<table width="200" border="1px solid black" id="maintab">
  <tr>
    <th scope="col">Name</th>
    <th scope="col">100m</th>
    <th scope="col">200m</th>
    <th scope="col">400m</th>
    <th scope="col">800m</th>
    <th scope="col">1500m</th>
    <th scope="col">Long Jump</th>
    <th scope="col">High Jump</th>
    <th scope="col">Shotputt</th>
    <th scope="col">Discus</th>
    <th scope="col">Javelin</th>
  </tr>
<?php
//Repeat element inside loop 10 times
for($i=0;$i<10;$i++) {
?>
  <tr>
    <td>
        <input name="Name[]" type="text" />
    </td>
    <td> 
        <input name="Short[]" type="text" size="10px" />
    </td>
    <td>
         <input name="Med[]" type="text" size="10px" />
    </td>
    <td> 
        <input name="Long[]" type="text" size="10px" />
    </td>
    <td>
         <input name="VLong[]" type="text" size="10px" />
    </td>
    <td>
         <input name="Extreme[]" type="text" size="10px" />
    </td>
    <td>
         <input name="LJump[]" type="text" size="10px" />
    </td>
    <td>
         <input name="HJump[]" type="text" size="10px" />
    </td>
    <td>
         <input name="Shotputt[]" type="text" size="10px" />
    </td>
    <td>
         <input name="Discuss[]" type="text" size="10px" />
    </td>
    <td>
         <input name="Javelin[]" type="text" size="10px" />
    </td>
  </tr>
<?php
}
?>
</table>
</form>

在你的PHP代码中做这样的事情:

//Create initial query for sql-insert.
$sql="INSERT INTO results_main (`Name`, `Short`, `Med`, `Long`, `Vlong`, `Extreme`, `LJump`, `HJump`, `Shotputt`, `Discuss`, `Javelin`, `Date`, `Year`) VALUES ";


$date = $Date; //Do like this if date-element is only occur once (at top) (then no need for brackets)
$year = $Year; //Do like this if year-element is only occur once (at top) (then no need for brackets)

$cnt = count($Name);    
for ($i=0;$i<$cnt;$i++) {
    //Use mysql_escape_string to escape strings (when needed) BEFORE adding to the $sql.
    $n = $Name[$i];
    $s = $Short[$i];
    $me = $Med[$i];
    $lng = $Long[$i];
    $slng = $VLong[$i];
    $ext = $Extreme[$i];
    $ljump = $LJump[$i];
    $hjump = $HJump[$i];
    $shot = $Shotputt[$i];
    $disc = $Discuss[$i];
    $jav = $Javelin[$i];

    //Insert each row separated with a comma
    $sql .= "('$n', '$s', '$me', '$lng', '$slng', '$ext', '$ljump', '$hjump', '$shot', '$disc', '$jav', '$date', '$year'),";
}

$useQuery = substr($sql, 0, -1); //Delete last comma
$result = mysql_query($useQuery); //Do the actual insert

然后当然,阅读 PDO 而不是使用 mysql_query 等。尽快这样做,因为 mysql_* 像这样的函数已被弃用,将来将被删除。PDO 是一个更好的选择,因为它是 oop,它更安全、更灵活。从这里开始... http://www.php.net/manual/en/intro.pdo.php

于 2013-04-14T23:43:42.263 回答
0

跨多个数组存储数据是不安全的,因为它很容易出现故障并导致错误。而是将数据存储到一个关联数组中,如下所示:

$people = array();
$people[] = array('Name' => $name, 'Short' => $short ....);

上面的代码创建和数组数组,内部数组是关联数组,因此您可以使用以下语法来获取第一人称的名称:

$people[0]['姓名'];

一切都在一起,如果没有为某些人设定某些价值观,它就不会渗透到其他人的记录中。

我看到你正在使用 POST 变量。上面的关联数组可以通过使用 json_encode 和 json_decode 轻松地通过 ajax 传递(如果这是你使用的,只是一个选项)。这有助于在您通过多种语言传递数据结构时保留数据结构。

最后,要插入大量记录,我建议使用 PDO 语句作为最简单和最干净的方法之一。在这里查看一个很棒的教程http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

希望这有帮助,祝你好运!

于 2013-04-15T21:52:44.683 回答