웹마스터 팁
page_full_width">
초간단 설문조사 소스
2004.05.27 12:07
초간단 허접설문조사 소스입니다.
여기서 설문관련 소스 찾을려니까 없는것 같아서 제가 간단하게 만들어 봤습니다.
허접하지만 필요한 분이 있으면 좋겠네요..
설문조사는 총 3개의 페이지로 이루어 집니다.
저는 poll.php, pollinsert.php, pollview.php 이렇게 파일명을 만들었습니다.
제일먼저 mysql db 테이블을 만들어야 겠죠..
CREATE TABLE poll (
id int(11) DEFAULT '0' NOT NULL auto_increment,
answer varchar(20) NOT NULL,
wdate int(11) NOT NULL,
ip varchar NOT NULL,
PRIMARY KEY (id)
);
이렇게 만들면 됩니다. 간단하죠 ^^;;
이제 페이지 소스를 보도록 하겠습니다.
첫번째, poll.php 는 설문페이지 입니다.
제가 만든것은 찬성,반대 두개이지만 더 추가하실수 있습니다.
============== poll.php 소스 ==========================
<html>
<head>
<title>설문조사</title>
<script language=javascript>
function chkAnswer()
{
var Form = eval(document.form1);
var chk = 0;
if(Form.answer[0].checked == true) chk++;
if(Form.answer[1].checked == true) chk++; //답변추가시 이곳에 번호순으로 추가하세요
if(chk == 0) {
alert('선택해주세요. ^^');
return false;
}
Form.action = 'pollinsert.php';
Form.submit();
}
</script>
</head>
<body>
<form name=form1 method=post>
이거 찬성, 반대 말해봐봐~~~~ <br>
//답변추가시 이곳에 value를 번호순으로 추가하시면 됩니다.
찬성 <input type=radio name=answer value=1> <br>
반대 <input type=radio name=answer value=2> <br>
<br>
<a href=javascript:; onClick="chkAnswer(); return false;">설문<a>
</form>
</body>
</html>
두번째, pollinsert.php
이 페이지는 poll.php에서 넘어 온 값을 db에 만든 poll이라는 테이블에 저장하도록 하는 페이지입니다.
============== pollinsert.php 소스 ==========================
<?
$board = "테이블명"; //이곳은 db에 만들었던 테이블명을 적으면 됩니다. 위에서 poll이라고 만들었죠..
$conn = mysql_connect("localhost","db아이디","db비번");
mysql_select_db("db이름", $conn);
$wdate = time();
$ip = getenv("REMOTE_ADDR");
/*
아래 부분은 설문에 중복참여를 방지하는 곳입니다.
현재는 막아 놓았는데 필요하시다면 풀면 됩니다. (// <-이것 제거)
현재 ip주소가 같은면 중복으로 되어 있는데 회원제일 경우 회원 아이디로
변경하셔도 무방합니다.
*/
//$res1 = mysql_query("SELECT ip FROM $board WHERE ip='$ip'",$conn);
// 중복참여 체크
//if(mysql_num_rows($res1)) {
// @mysql_close($conn);
//echo("<script>alert('이미 이벤트에 참여하셧습니다.nn참여해주셔서 감사합니다.^^');history.back();</script>"); exit; }
// 설문 참여 성공 부분입니다. poll.php에서 넘어온 값이 이곳을 통해 db의 poll테이블에 저장니다.
$res2 = mysql_query("INSERT INTO $board (id,answer,wdate,ip) VALUES ('','$answer','$wdate','$ip')",$conn);
if(!$res2) dbError();
@mysql_close($conn);
echo("<script>alert('참여해주셔서 감사합니다.^^');self.location.href='pollview.php'</script>");
//설문을 마치고 돌아가는 페이지... (저는 설문결과보기가 되어 있는 pollview.php로 연결했습니다.
?>
세번째, pollview.php
이 페이지는 설문결과페이지입니다.
몇명이 설문에 응했는지 각번호(질문)를 몇분이 선택했는지 등이 나옵니다.
============== pollview.php 소스 ==========================
<?
$board = "테이블명"; //이곳은 db에 만들었던 테이블명을 적으면 됩니다. 위에서 poll이라고 만들었죠..
$conn = mysql_connect("localhost","db아이디","db비번");
mysql_select_db("db이름", $conn);
/*
각답변에 해당하는 번호를 선택하는 것입니다.
만약 답변이 더 많으면 번호순으로 더 늘리시면 됩니다.
*/
$res1 = mysql_query("select * from $board where answer=1", $conn);
$res2 = mysql_query("select * from $board where answer=2", $conn);
//각각 선택된답변이 몇개인지를 출력
$num1 = mysql_num_rows($res1);
$num2 = mysql_num_rows($res2);
$sum = $num1 + $num2; //전체적으로 답변된것이 몇개인지 출력 (즉 설문참여자가 총몇분인지 출력한다.)
//각 선택된 답변 백분율 구하기
$img1 = (int)(($num1*100)/$sum);
$img2 = (int)(($num2*100)/$sum);
echo("
<html>
<head>
<title>설문조사결과</title>
</head>
<table width=780 border=0 cellspacing=0 cellpadding=0 align=center>
<tr><td>
<table width=780 border=0 cellspacing=0 cellpadding=0 align=center><tr height=10><td></td></tr><tr height=1><td bgcolor=A4A4A4></td></tr><tr height=10><td></td></tr></table>
<table width=780 border=0 cellspacing=0 cellpadding=0 align=center style='border:1px #999999 solid'>
<tr height=25><td colspan=4 bgcolor=666666 align=center><font color=FFFFFF><b> 결과 (총 : $sum 표)</b></font></td></tr>
<tr><td colspan=4 bgcolor=999999></td></tr>
<tr><td>찬성($num1)</td><td><img src='bar.gif' width='$img1' height='13'></td><td>$img1 %</td></tr>
<tr><td>반대($num2)</td><td><img src='bar.gif' width='$img2' height='13'></td><td>$img2 %</td></tr>
</table>
</td></tr>
</table>
</body>
</html>
");
?>
이렇게 끝입니다.. ^^;;
여기서 설문관련 소스 찾을려니까 없는것 같아서 제가 간단하게 만들어 봤습니다.
허접하지만 필요한 분이 있으면 좋겠네요..
설문조사는 총 3개의 페이지로 이루어 집니다.
저는 poll.php, pollinsert.php, pollview.php 이렇게 파일명을 만들었습니다.
제일먼저 mysql db 테이블을 만들어야 겠죠..
CREATE TABLE poll (
id int(11) DEFAULT '0' NOT NULL auto_increment,
answer varchar(20) NOT NULL,
wdate int(11) NOT NULL,
ip varchar NOT NULL,
PRIMARY KEY (id)
);
이렇게 만들면 됩니다. 간단하죠 ^^;;
이제 페이지 소스를 보도록 하겠습니다.
첫번째, poll.php 는 설문페이지 입니다.
제가 만든것은 찬성,반대 두개이지만 더 추가하실수 있습니다.
============== poll.php 소스 ==========================
<html>
<head>
<title>설문조사</title>
<script language=javascript>
function chkAnswer()
{
var Form = eval(document.form1);
var chk = 0;
if(Form.answer[0].checked == true) chk++;
if(Form.answer[1].checked == true) chk++; //답변추가시 이곳에 번호순으로 추가하세요
if(chk == 0) {
alert('선택해주세요. ^^');
return false;
}
Form.action = 'pollinsert.php';
Form.submit();
}
</script>
</head>
<body>
<form name=form1 method=post>
이거 찬성, 반대 말해봐봐~~~~ <br>
//답변추가시 이곳에 value를 번호순으로 추가하시면 됩니다.
찬성 <input type=radio name=answer value=1> <br>
반대 <input type=radio name=answer value=2> <br>
<br>
<a href=javascript:; onClick="chkAnswer(); return false;">설문<a>
</form>
</body>
</html>
두번째, pollinsert.php
이 페이지는 poll.php에서 넘어 온 값을 db에 만든 poll이라는 테이블에 저장하도록 하는 페이지입니다.
============== pollinsert.php 소스 ==========================
<?
$board = "테이블명"; //이곳은 db에 만들었던 테이블명을 적으면 됩니다. 위에서 poll이라고 만들었죠..
$conn = mysql_connect("localhost","db아이디","db비번");
mysql_select_db("db이름", $conn);
$wdate = time();
$ip = getenv("REMOTE_ADDR");
/*
아래 부분은 설문에 중복참여를 방지하는 곳입니다.
현재는 막아 놓았는데 필요하시다면 풀면 됩니다. (// <-이것 제거)
현재 ip주소가 같은면 중복으로 되어 있는데 회원제일 경우 회원 아이디로
변경하셔도 무방합니다.
*/
//$res1 = mysql_query("SELECT ip FROM $board WHERE ip='$ip'",$conn);
// 중복참여 체크
//if(mysql_num_rows($res1)) {
// @mysql_close($conn);
//echo("<script>alert('이미 이벤트에 참여하셧습니다.nn참여해주셔서 감사합니다.^^');history.back();</script>"); exit; }
// 설문 참여 성공 부분입니다. poll.php에서 넘어온 값이 이곳을 통해 db의 poll테이블에 저장니다.
$res2 = mysql_query("INSERT INTO $board (id,answer,wdate,ip) VALUES ('','$answer','$wdate','$ip')",$conn);
if(!$res2) dbError();
@mysql_close($conn);
echo("<script>alert('참여해주셔서 감사합니다.^^');self.location.href='pollview.php'</script>");
//설문을 마치고 돌아가는 페이지... (저는 설문결과보기가 되어 있는 pollview.php로 연결했습니다.
?>
세번째, pollview.php
이 페이지는 설문결과페이지입니다.
몇명이 설문에 응했는지 각번호(질문)를 몇분이 선택했는지 등이 나옵니다.
============== pollview.php 소스 ==========================
<?
$board = "테이블명"; //이곳은 db에 만들었던 테이블명을 적으면 됩니다. 위에서 poll이라고 만들었죠..
$conn = mysql_connect("localhost","db아이디","db비번");
mysql_select_db("db이름", $conn);
/*
각답변에 해당하는 번호를 선택하는 것입니다.
만약 답변이 더 많으면 번호순으로 더 늘리시면 됩니다.
*/
$res1 = mysql_query("select * from $board where answer=1", $conn);
$res2 = mysql_query("select * from $board where answer=2", $conn);
//각각 선택된답변이 몇개인지를 출력
$num1 = mysql_num_rows($res1);
$num2 = mysql_num_rows($res2);
$sum = $num1 + $num2; //전체적으로 답변된것이 몇개인지 출력 (즉 설문참여자가 총몇분인지 출력한다.)
//각 선택된 답변 백분율 구하기
$img1 = (int)(($num1*100)/$sum);
$img2 = (int)(($num2*100)/$sum);
echo("
<html>
<head>
<title>설문조사결과</title>
</head>
<table width=780 border=0 cellspacing=0 cellpadding=0 align=center>
<tr><td>
<table width=780 border=0 cellspacing=0 cellpadding=0 align=center><tr height=10><td></td></tr><tr height=1><td bgcolor=A4A4A4></td></tr><tr height=10><td></td></tr></table>
<table width=780 border=0 cellspacing=0 cellpadding=0 align=center style='border:1px #999999 solid'>
<tr height=25><td colspan=4 bgcolor=666666 align=center><font color=FFFFFF><b> 결과 (총 : $sum 표)</b></font></td></tr>
<tr><td colspan=4 bgcolor=999999></td></tr>
<tr><td>찬성($num1)</td><td><img src='bar.gif' width='$img1' height='13'></td><td>$img1 %</td></tr>
<tr><td>반대($num2)</td><td><img src='bar.gif' width='$img2' height='13'></td><td>$img2 %</td></tr>
</table>
</td></tr>
</table>
</body>
</html>
");
?>
이렇게 끝입니다.. ^^;;
댓글 3
-
9000㎒
2004.05.27 17:38
-
이혁
2004.05.27 18:04
다수 문항도 할수 있답니다. ^^;;;
위에 소스가 그냥 찬성,반대로만 돼어 있어서 그렇지 다수문항의 설문도
위소스를 조금만 고치면 됩니다.
예를 드면
찬성 <input type=radio name=answer value=1> <br>
반대 <input type=radio name=answer value=2> <br>
이 부분을
답변1 <input type=radio name=answer value=1> <br>
답변2 <input type=radio name=answer value=2> <br>
답변3 <input type=radio name=answer value=3> <br>
답변4 <input type=radio name=answer value=4> <br>
이런식으로 느리면 되구요 나머지 그에 관련된 소스도 순서대로 늘리시면
다수문항도 충분히 할수 있습니다. ^^ -
9000㎒
2004.05.28 17:06
이혁 // 수동으로 하기가 귀찮아서 그렇죠 :) (뭐 관리자모드 만들어서 SQL에 SAVE 해서 구현하면 될테지만)
정말 간단하고 좋군요. (그러나 다수의 문항이 필요한 것이면 낭패)