将二级数据输入到预先存在的数据库中

时间:2013-06-14 18:07:02

标签: php mysql

我需要一些帮助。我编写了一个脚本,将名字和姓氏放入数据库。这工作正常。然后我编写了一个脚本来显示这些名称以及每个名称的4个文本字段,其中学生点可以输入然后存储在数据库中。数据库中的名称正确显示,文本字段显示正确,但是,当我尝试将数字放在字段中时,它不会将数字放在数据库中并生成“未定义的索引”错误。我已经研究了一段时间,但我只是没有得到它。谢谢你的帮助。我的代码如下。谢谢。

<html>
<body>
<form action="pts_summary.php" method="post">
<table border="1">
<tr>
<th>Student Name</th>
<th>First Hour</th>
<th>Second Hour</th>
<th>Third Hour</th>
<th>Fourth Hour</th>
</tr>
<br>

<?php

$hour1 = $_POST['hour1'];
$hour2 = $_POST['hour2'];
$hour3 = $_POST['hour3'];
$hour4 = $_POST['hour4'];


$con=mysqli_connect("localhost","root","","srrdb");                         
if (mysqli_connect_errno())                                                 
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * From students");                      


while($row = mysqli_fetch_array($result))                                   
{
    echo "<tr>"."<td>".$row['fname']."&nbsp".$row['lname']."</td>".     
    "<td>".'<input type="text" name="hour1">'."</td>".                  
    "<td>".'<input type="text" name="hour2">'."</td>".                  
    "<td>".'<input type="text" name="hour3">'."</td>".                  
    "<td>".'<input type="text" name="hour4">'."</td>"."</tr>";          
}

if (isset ($_POST['submit']))
{
$sql="INSERT INTO students (hour1, hour2, hour3, hour4) 
VALUES ('".$hour1."','".$hour2."','".$hour3."','".$hour4."')";
}   

mysqli_close($con);                                                         

?>                                                                          

</table>
<br><input type="submit" value="SUBMIT" name="submit">
</form>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

您甚至在检查是否按下提交按钮之前尝试抓取帖子数据。如果未按下提交按钮,则任何$ _POST ['hour#']字段中都没有值,这将导致未定义的索引错误。在提交检查之后抛出这些线条。

if (isset ($_POST['submit']))
{
    $hour1 = $_POST['hour1'];
    $hour2 = $_POST['hour2'];
    $hour3 = $_POST['hour3'];
    $hour4 = $_POST['hour4'];

    $sql="INSERT INTO students (hour1, hour2, hour3, hour4) 
    VALUES ('".$hour1."','".$hour2."','".$hour3."','".$hour4."')";
}   

答案 1 :(得分:0)

您的未定义索引通知是由$_POST[...]使用而不检查它们是否已设置引起的。您的数据未插入数据库,因为您只设置INSERT查询 -

$sql="INSERT INTO students...  

但你永远不会执行查询。

mysqli_query($con,$sql);

尝试 -

if (isset ($_POST['submit'])){
    // put these inside isset() to prevent undefined index notices
    $hour1 = $_POST['hour1'];
    $hour2 = $_POST['hour2'];
    $hour3 = $_POST['hour3'];
    $hour4 = $_POST['hour4'];

    $sql="INSERT INTO students (hour1, hour2, hour3, hour4) 
    VALUES ('".$hour1."','".$hour2."','".$hour3."','".$hour4."')";
    //missing the query line
    // Insert or die with error message
    $update = mysqli_query($con,$sql) or die(mysqli_error($con));
}   

此外,您正在使用未经过规范的$_POST数据,因此您可以使用SQL注入。使用mysqli_real_escape_string()进行清理或更好地使用预先准备好的语句 - http://php.net/manual/en/mysqli.quickstart.prepared-statements.php