将表单中的值插入数组,然后插入数据库
Posted
技术标签:
【中文标题】将表单中的值插入数组,然后插入数据库【英文标题】:Insert Values from a form to an array, then into a database 【发布时间】:2012-11-26 09:16:05 【问题描述】:我想将用户值从 html 表单获取到数组,然后将其插入 mysql 数据库。它将正确的值插入数据库,然后给出以下错误:
注意:未定义索引:第 153 行 C:\wamp\www\Capturing System\All_Topics_widget.php 中的 TopicNum
以下内容位于页面顶部:
<?php
include 'scripts/functions/init.php';
Restrict();
?>
$userid = $_SESSION['userid'];
$KM_Number = $_SESSION['C_KM'];
$query = "SELECT * FROM knowledge_modules where km_number = "."'".$KM_Number."'";
$Knowledge = mysql_query($query) or die(mysql_error);
$row = mysql_fetch_assoc($Knowledge);
$Module_type = 'Knowledge Modules';
$Purpose_M = $_SESSION['Purpose_KM'];
$KM = 'KM';
$NUM = $_SESSION['KM'];
$KT = 'KT';
if (empty($_POST)=== false)
$R_fields = array('Topic_Num','Title','Weight');
foreach($_POST as $key=>$value)
if (empty($value) && in_array($key,$R_fields)=== true)
$errors[] = 'fields marked with (*) are required';
break 1;
if(empty($errors)=== true)
if(topic_exists($_POST['TopicNum']))
$errors[] = 'Sorry, the Topic already exist!';
?> 以下代码在 HTML 标签中:
<h2>Tools - </h2>
<form action="All_Topics_widget.php" method="POST" enctype="multipart/form-data">
<fieldset>
<table border="0">
<tr>
<td><label for="TopicNum">Topic Number:* <?php echo $KM.'-'.$NUM.'-'.$KT ?></label></td>
<td><input type="text" size="5" name="TopicNum" /></td>
</tr>
<tr>
<td><label for="Title">Title:*</label></td>
<td><input type="Text" size="35" name="Title"/></td>
</tr>
<tr>
<td><label for="Weight">Weight:*</label></td>
<td><input type="text" size="05" name="Weight" /></td>
</tr>
</table>
</fieldset>
<fieldset>
<table border="0">
<tr>
<td><input id="Submit" type="submit" value="Capture" /></td>
<td><input id="Reset1" type="reset" value="reset" /></td>
<td><a href="list_topics.php">Capture Topics</a></td>
</tr>
</table>
</fieldset>
<?php
$Topics = $KM.'-'.$NUM.'-'.$KT.$_POST['TopicNum'];//This is line 153
if(isset($_GET['success']) && empty($_GET['success']))
echo 'Succefully Captured';
else
if(empty($_POST) == false && empty($errors)== true)
//Capture data from the fields to an array
$capture_topic = array(
'TopicNum' => $Topics,
'Title'=>$_POST['Title'],
'Weight'=>$_POST['Weight'],
'Purpose_M'=>$Purpose_M,
'userid'=>$userid);
//Submit the data into the database
capture_topic($capture_topic);
//redirect to the Modules widget page till the user press NEXT Page
header('Location: All_Topics_widget.php?success');
exit();
else if(empty($errors)== false)
//Display errors
echo output($errors);
?>
</form>
【问题讨论】:
这个Notice
什么时候出现?在页面的初始加载时,还是在提交/POST 之后?
它出现在提交/POST之后。但是当我检查数据库时,所有值都正确提交。
【参考方案1】:
看看这个
header('Location: All_Topics_widget.php?success');
exit();
成功处理 POST 数据后,将脚本重定向到自身。并且此重定向后不存在 POST 数据。
重写
$Topics = $KM.'-'.$NUM.'-'.$KT.$_POST['TopicNum'];//This is line 153
if(isset($_GET['success']) && empty($_GET['success']))
echo 'Succefully Captured';
else
if(empty($_POST) == false && empty($errors)== true)
作为
if(isset($_GET['success']) && empty($_GET['success']))
echo 'Succefully Captured';
else
$Topics = $KM.'-'.$NUM.'-'.$KT.$_POST['TopicNum'];
if(empty($_POST) == false && empty($errors)== true)
取消通知。
请注意必填字段数组中的内容
$R_fields = array('Topic_Num','Title','Weight');
您希望看到一个名为 Topic_Num 的文件,但在您的表单中它的名称是 TopicNum
【讨论】:
您好,这些是 All_Topics_widget.php 的内容。所有主题.php 仅包含 HTML 表单,其中 我在代码中指定了它,但这里是:$Topics = $KM.'-'.$NUM.'-'.$KT.$_POST['TopicNum'];跨度> 【参考方案2】:出现此Notice
是因为您在第 153 行引用了$_POST['TopicNum']
,而此时不再设置此$_POST[]
变量。
尝试在if(empty($_POST) == false && empty($errors)== true)
内移动153行
if(empty($_POST) == false && empty($errors)== true)
$Topics = $KM.'-'.$NUM.'-'.$KT.$_POST['TopicNum'];//This is line 153
...
这就是导致Notice
的原因 -
1=> 您提交/发布表单,从而设置 $_POST['TopicNum']
并在第 153 行使用。
2=>您在第 172 行将值输入数据库capture_topic($capture_topic);
3=>您重定向到 174 header('Location: All_Topics_widget.php?success');
上的页面,从而清除了 $_POST[]
全局变量,因此当在 153 上再次调用它时,它现在是未定义的。通过将其移动到您的 if(empty($_POST) == false && empty($errors)== true)
支票中,它只会在表单已提交/发布时作为参考
【讨论】:
没问题。我添加了一些关于为什么会发生这种情况的注释。以上是关于将表单中的值插入数组,然后插入数据库的主要内容,如果未能解决你的问题,请参考以下文章
将html表单中的数据插入sql数据库(html,php,sql)时未保存输入的值