我有一个严重的问题,我没有弄清楚。我有一个表名叫做“结果”。我想要实现的是,当我插入新记录时,它会正确地插入数据库。
在这个水平上,我的脚本运行良好。但是我想第二次点击添加新结果记录时,如果之前输入了数据,那么它将显示我的数据,如果我想更新我的数据,我可以。如果以前没有输入数据,那么我会将数据插入数据库。我成功地限制用户输入重复数据,但我没有成功地在同一页上显示数据。
我有一个显示测试页面,当我点击这个链接时,我会在其中放置链接管理结果。一个新页面将打开,其中所有学生都列出了特定的班级id,在他们的名字后面有生物学、化学等领域。。。我在那里输入他们的分数。
我的表格结构如下:
CREATE TABLE IF NOT EXISTS `results` (
`result_id` int(11) NOT NULL AUTO_INCREMENT,
`class_id` int(10) NOT NULL,
`student_id` int(10) NOT NULL,
`test_id` int(10) NOT NULL,
`biology` int(10) NOT NULL,
`chemistry` int(10) NOT NULL,
`math` int(10) NOT NULL,
`english` int(10) NOT NULL,
`urdu` int(10) NOT NULL,
`marks_obtained` int(10) NOT NULL,
`created` datetime NOT NULL,
`updated` datetime NOT NULL,
PRIMARY KEY (`result_id`),
UNIQUE KEY `student_id` (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
如果你有任何问题,那就问我。对不起,解释得太久了!
<?php
include("includes/config.php");
$id=$_GET['class_id'];
$id2 = $_GET['test_id'];
if($_SERVER['REQUEST_METHOD']=='POST'){
foreach($post as $key=>$val){
$$key = $val;
}
$z = 0;
foreach($post['biology'] as $biology1){
$biology = $biology1;
$student_id = $post['student_id'][$z];
$test_id = $post['test_id'][$z];
$chemistry = $post['chemistry'][$z];
$math = $post['math'][$z];
$english = $post['english'][$z];
$urdu = $post['urdu'][$z];
$marks_obtained = $post['marks_obtained'][$z];
$marks_obtained .= $biology+$chemistry+$math+$english+$urdu;
if(isset($get['class_id']) and $get['test_id']){
$link = mysql_query("SELECT * from results where student_id='$student_id'");
$res = mysql_num_rows($link);
if($res>0) {
$link2 = mysql_query("SELECT * from results where class_id='$class_id' AND test_id='$test_id'");
}else {
mysql_query("INSERT into results values('','$class_id','$student_id','$test_id','$biology','$chemistry','$math','$english','$urdu','$marks_obtained',now(),'')")or die(mysql_error());
$z++;
}
}
}
}
?>
HTML
<form method="post" action="" enctype="multipart/form-data">
<table border="1" />
<tr>
<th>Student Name</th>
<th>Biology</th>
<th>Chemistry</th>
<th>Math</th>
<th>Engllish</th>
<th>Urdu</th>
</tr>
<?php
$query = mysql_query("SELECT id,class_id,student_name from student where class_id='$id'") or die(mysql_error());
while($rec =mysql_fetch_array($query)) {
?>
<?php do { ?>
<tr>
<input name="class_id" type="hidden" value="<?php echo $rec['class_id'];?>" />
<input name="student_id[]" type="hidden" value="<?php echo $rec['id'];?>" tabindex="1" />
<input name="test_id[]" type="hidden" value="<?php echo $id2;?>" tabindex="1" />
<td><?php echo $rec['student_name'];?></td>
<td><input name="biology[]" type="text" tabindex="2" value="<?php echo $rows['biology'];?>" /></td>
<td><input name="chemistry[]" type="text" tabindex="5" value="<?php echo $rows['chemistry'];?>" /></td>
<td><input name="math[]" type="text" tabindex="7" value="<?php echo $rows['math'];?>" /></td>
<td><input name="english[]" type="text" tabindex="4" value="<?php echo $rows['english'];?>" /></td>
<td><input name="urdu[]" type="text" tabindex="6" value="<?php echo $rows['urdu'];?>" /></td>
<input name="marks_obtained[]" type="hidden" tabindex="9" />
<?php } while($rows=mysql_fetch_array($link2))?> <?php } ?>
</tr>
<tr><td><button type="submit">Add Records</button></td></tr>
</table>
</form>
使用此字符可以避免重复数据
if($_post['usename'] && $_post['password'] && $_post['items']){
echo "You fill all items";
} else {
echo fill all items recommended!!
}
为此,您必须获取当前驻留在数据库中的数据,然后将其与插入的数据进行比较。如果找到匹配项,则显示错误消息,否则触发插入查询
我看到student_id上有一个唯一的索引。这意味着你的表格在任何时候都只能为每个学生保存一组结果。所以我猜当你说“如果数据是在之前输入的”时,你的意思是“如果为同一个学生输入了第二组结果”。
你有两个选择:要么
>
或者,最好在插入之前检查学生id是否存在,如果存在,则不插入,获取该学生id的结果并填充表单。所以你需要一些类似的东西:
从学生id=12345的结果中选择计数(*)
(其中12345是您试图插入的student_id)
如果结果大于零(在本例中只能为1),则不要插入、获取并填充表单。即:
SELECT * FROM results WHERE student_id=12345
编辑:您也可以使用
INSERT... ON DUPLICATE KEY UPDATE
...避免检查、显示结果并更新它们。
看看这个问题
你好,我有一个简单的mysql查询,我需要显示唯一的文件名,现在查询显示重复的文件名,我想避免这种情况
我有一个非常简单的表,有3列,我需要一个尽可能轻量级的查询,只有当列有新值时才能插入。 如何编写sql查询来实现这一点?我在网站上已经看到了一些例子,但它们都被我无法理解的更复杂的查询(一些涉及子查询)所混淆。 似乎有不同的方法来做这件事,我需要找到最轻量级的一个,这样我就可以在循环中重复它,一次插入多个标签,而不会给服务器带来太大的压力。
我认为这是一个常见的问题,但我还没有找到任何解决方案,也许我没有在谷歌上正确地搜索这个问题。总之,我有一个在表中插入多行的过程(在同一个事务中的许多其他事情中),但是这个过程是在多个线程和多个服务器中执行的。 描述是唯一的,但不作为数据库(旧版)中的约束,我想避免插入重复的描述。我已经隔离了搜索并插入到一个独立的事务中,我想在选择之前锁定表,如果它不存在,则在“保存”之后释放它。 我想要这样的东西
我有一个简单的项目,该项目将个人信息提供给数据库(sqlite),现在我想避免插入重复值(按名称),我不能做什么?谢谢你们
本文向大家介绍避免在MongoDB中重复输入?,包括了避免在MongoDB中重复输入?的使用技巧和注意事项,需要的朋友参考一下 为了避免在MongoDB中重复输入,可以使用。语法如下- 让我们实现以上语法。避免在MongoDB中重复条目的查询如下- 现在在上面的集合中插入一些记录。插入记录的查询如下- 每当您尝试再次插入相同记录时,都会出现此错误- 让我们插入另一条记录。查询如下- 在method
问题内容: 我有一个包含3列的表格- id(pk),pageId(fk),名称。我有一个PHP脚本,它将大约5000条记录转储到表中,其中大约一半是重复的,具有相同的pageId和名称。pageId和名称的组合应该是唯一的。当我遍历php中的脚本时,防止重复项被保存到表中的最佳方法是什么? 问题答案: 第一步是在表上设置唯一键: 然后,当有重复项时,您必须决定要做什么。你应该: 忽略它? 覆盖先前