[quote]Спэм бүртгэлээс хамгаалах арга. Эсвэл тест хийхэд ашигласан ч болно. Одоогоор
www.blogmn.net саитын бүртгэлийн хуудсан дээр ажиллаж байгаа. Удалгүй энэ самбар болоод сэтгэгдэл оруулах хэсэгт хийж тохируулах байх. Нэг их сайн арга биш ч гэсэн яахав тест энэ тэр хийхээр бас ашиглаж болно.
Өгөгдлийн бааз нэг иймэрхүү:
Код: Бүгдийг сонгох
CREATE TABLE `table_security` (
`q_id` int(8) NOT NULL auto_increment,
`question` text character set utf8 collate utf8_unicode_ci NOT NULL,
`answers` text character set utf8 collate utf8_unicode_ci NOT NULL,
`correct` int(2) NOT NULL,
PRIMARY KEY (`q_id`)
) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
security.php файл нь шинээр асуулт нэмэх, засахад ашиглагдана:
Код: Бүгдийг сонгох
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Security</title>
</head>
<body>
<?
include "mysql.php"; // Үүний оронд шууд холбогдох код биччихэж болно.
$question = $_POST['question'];
$answers = $_POST['answers'];
$correct = $_POST['correct'];
if ( $_POST['task'] == 'save' )
{
mysql_query("INSERT INTO table_security (question, answers, correct) VALUES ('$question', '$answers', '$correct')") or die(mysql_error() );
echo "Шинэ асуулт хадгалагдлаа";
}
if ( $_POST['task'] == 'edit' )
{
$q_id = $_POST['q_id'];
mysql_query("UPDATE table_security SET question='$question', answers='$answers', correct='$correct' WHERE q_id='$q_id'");
$onetest = mysql_fetch_assoc(mysql_query("SELECT * FROM table_security WHERE q_id='$q_id'"));
}
if ( $_GET['task'] == 'ed' ) {
$q_id = $_GET['q_id'];
$onetest = mysql_fetch_assoc(mysql_query("SELECT * FROM table_security WHERE q_id='$q_id' LIMIT 1"));
}
echo '<div>
<form id="form1" name="form1" method="post" action="security.php">
<p>
<label>Асуулт
<input type="text" name="question" id="question" value="'.$onetest['question'].'" />
</label>
</p>
<p>
<label>Хариултууд (таслалаар зааглана)
<input type="text" name="answers" id="answers" value="'.$onetest['answers'].'" />
</label>
</p>
<p>
<label>Зөв хариулт (дугаар)
<input type="text" name="correct" id="correct" value="'.$onetest['correct'].'" />
</label>
</p>
<p>
<input type="hidden" name="task" id="task" value="'; if ( $_GET['task'] == 'ed' ) { echo 'edit'; } else {echo 'save';} echo '" />
</p>
<p>
<input type="hidden" name="q_id" value="'.$onetest['q_id'].'" />
</p>
<p>
<label>Оруул
<input type="submit" name="submit" id="submit" value="Submit" />
</label>
</p>
</form>
<p>';
$questions = mysql_query("SELECT * FROM table_security");
while($onetest = mysql_fetch_assoc($questions)) {
$question = $onetest['question'];
$answers = $onetest['answers'];
$correct = $onetest['correct'];
$ans = explode(",", $answers);
echo $onetest['q_id']." $question<br>";
for($i=0; $i<=3; $i++) {
$an = $ans[$i];
$correcta = $i+1;
echo '<label>'.$correcta.'<input type="radio" name="answers2" value="'.$correcta.'" />'.$an.'</label><br>';
}
echo "Зөв хариулт: $correct <a href='security.php?q_id=$onetest[q_id]&task=ed'>Засах</a><br><br>";
}
?>
</p>
</div>
</body>
</html>
Харин энэ кодыг би шалгах signup.php файлдаа оруул өгч байна:
Код: Бүгдийг сонгох
// Test check
$onetest = mysql_fetch_assoc(mysql_query("SELECT * FROM table_security ORDER BY rand() LIMIT 1"));
$ans = explode(",", $onetest['answers']);
echo "<tr>
<td class='form1"; if($error[question] != "") { echo "error"; } echo "'>$onetest[question]*</td>
<td class='form2'>";
for($i=0; $i<=3; $i++) {
$an = $ans[$i];
$correcta = $i+1;
echo ' <label><input type="radio" name="answer" value="'.$correcta.'" />'.$an.'</label><br />';
}
show_error($error[question]);
echo "<input type='hidden' name='q_id' value='$onetest[q_id]'>
</td>
</tr>";
Тэгээд дараагийн хуудсанд нь шалгачихна:
Код: Бүгдийг сонгох
$answer = $_POST['answer'];
$q_id = mysql_real_escape_string($_POST['q_id')];
$sec_ans = mysql_fetch_assoc(mysql_query("SELECT q_id, correct FROM table_security WHERE q_id='$q_id' LIMIT 1"));
if ( $sec_ans['correct'] != $answer ) {
$is_error[1] = "yes";
$error[question] = "Та хариултыг буруу бөглөсөн байна. Зөв хариултыг сонгож асуултанд хариулаад дахин оролдож үзнэ үү!";
}
Нэг иймэрхүү юм хийсэн юм. Алдаа оноо байвал хэлж өгөөрэй. Яг мэргэжлийн програмист биш болохоор бага зэрэг халтардуу бичсэн байж магадгүй.