我想以不同的方式插入数据库中的多个条目,但是输入来自同一个表单。
我有一个名为questionForm的表单。它是一个静态表单,有一个用于插入问题的文本字段和相应的文本字段,例如标记分配,该问题的复杂程度问题, tag1到tag8 (该问题中的关键字)存在于该问题中等。
现在我希望在提交表单时将每个这些问题插入到我的数据库中。 但不是在将表单中输入的每个问题的标记与数据库中每个问题的标记进行比较之前,以确保没有重复。我该怎么做呢。
我知道通过一个简单的表单在数据库中插入一个条目。请有人帮助我。
我现在已经接近编码的一半了。我现在可以将条目插入到表单中,但它不能正确检查重复项。这是我的问题表格和php文件 -
问题表单
测试任务
<h3>Enter Questions</h3><br>
<h3>Question 1: Five marks each.<br></h3>
a) <input type="text" name="field1[]" size=45>* Marks: <input type="text" name="field2[]"> Complexity:<input type="text" name="field3[]"> Chapter No.: <input type="text" name="field4[]"> Tags: <input type="text" name="field5[]" size=10> <input type="text" name="field6[]" size=10> <input type="text" name="field7[]" size=10> <input type="text" name="field8[]" size=10> <input type="text" name="field9[]" size=10> <br>
b) <input type="text" name="field1[]" size=45>* Marks: <input type="text" name="field2[]"> Complexity:<input type="text" name="field3[]"> Chapter No.: <input type="text" name="field4[]"> Tags: <input type="text" name="field5[]" size=10> <input type="text" name="field6[]" size=10> <input type="text" name="field7[]" size=10> <input type="text" name="field8[]" size=10> <input type="text" name="field9[]" size=10> <br>
<p><input type="submit" name="submit" value="Submit" />
<input type='reset' name='Cancel' value='Cancel' /></p>
</form>
</body>
</html>
quest.php
include('connectionfile.php');
$cnt = count($_POST['field1']);
$my= $_POST['my'];
$sem= $_POST['sem'];
$subj= $_POST['subj'];
$branch= $_POST['branch'];
if ($cnt > 0) {
for ($i=0; $i<$cnt; $i++)
{
$t1 = $_POST['field5'][$i];
$t2 = $_POST['field6'][$i];
$t3 = $_POST['field7'][$i];
$t4 = $_POST['field8'][$i];
$t5 = $_POST['field9'][$i];
$result = "SELECT * FROM paper WHERE (((`tag1` LIKE '%".$t1."%') OR (`tag1` LIKE '%".$t2."%') OR (`tag1` LIKE '%".$t3."%') OR (`tag1` LIKE '%".$t4."%') OR (`tag1` LIKE '%".$t5."%')) AND ((`tag2` LIKE '%".$t2."%') OR (`tag2` LIKE '%".$t3."%') OR (`tag2` LIKE '%".$t4."%') OR (`tag2` LIKE '%".$t5."%')) AND ((`tag3` LIKE '%".$t3."%') OR (`tag3` LIKE '%".$t4."%') OR (`tag3` LIKE '%".$t5."%')) AND ((`tag4` LIKE '%".$t4."%') OR (`tag4` LIKE '%".$t5."%')) AND ((`tag5` LIKE '%".$t5."%')) ) ;" ; // which checks if the tags in that question match with the tags of any other question in the db.
$sql= mysql_query($result) OR die(mysql_error()) ;
$duplicates = mysql_num_rows($sql);
if( $duplicates > 0)
echo "No entry entered for Entry #$i since it may lead to duplicates."; // no entry is inserted in insertArr[] if it leads to duplication
else
$insertArr[] = "('" .$_POST['field1'][$i]. "', '" .$_POST['field2'][$i]. "', '" .$_POST['field3'][$i]. "', '" .$_POST['field4'][$i]. "', '" .$_POST['field5'][$i]. "', '" .$_POST['field6'][$i]. "', '" .$_POST['field7'][$i]. "', '" .$_POST['field8'][$i]. "', '" .$_POST['field9'][$i]. "', '".$my."', '".$sem."', '".$subj."', '".$branch."')";
}
$query1 = "INSERT INTO paper (question, marks_allotted, complexity, chp_no, tag1, tag2, tag3, tag4, tag5, monthandyear, semester, subject_name, branch_name) VALUES " . implode(", ", $insertArr);
mysql_query($query1) or trigger_error("Insert failed: " . mysql_error());
}
echo("<pre>\n");
print_r($_POST);
echo("</pre>\n");
mysql_close($id_link);
?>
在运行时,给我以下,尽管我输入的问题与db 中的现有问题没有匹配的标记: 条目#0没有输入条目,因为它可能导致重复。条目#1没有输入条目,因为它可能导致重复。 注意:未定义的变量:第41行的insertArr
警告:implode()[function.implode]:第41行传递的参数无效
注意:插入失败:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第43行附近使用正确的语法
请指导我
答案 0 :(得分:0)
嗯,你有例如
<input type="text" name="tag1" />
<input type="text" name="tag2" />
从表单发布到PHP
然后你有PHP
$tag1 = $_POST['tag1']; $tag2 = $_POST['tag2'];
$sql = "SELECT tag1, tag2 FROM db1 WHERE tag1 = '$tag1' OR tag2 = '$tag2';";
//query the $sql value i.e. with $query = mysql_query($sql) (which is not good example since its deprecated)
//then make a check:
$num = mysql_num_rows($result);
if ($num > 0) {
echo "There are matches with one or more tags you've entered";
}
else {
mysql_query("INSERT INTO db1 (tag1, tag2) VALUES ('$tag1', '$tag2')");
echo "Tags inserted";
}
请记住,这个例子很差,设计不好,但我希望你能得到这个想法。在其他sql库中有找到行的等效方法,所以你必须选择是否有匹配,如果是,则让它们改变它们的标记。
答案 1 :(得分:0)
第一个答案中的这段代码就是这样做的
if ($num > 0) {
echo“与您输入的一个或多个标签匹配”; }
如果数字大于1,则此代码将执行,插入块将被忽略