로그인 세션처리3
페이지 정보

본문
[PHP+MySQL]로그인 코드 분석
2018. 3. 25. 21:57
이 게시글에서는 디자인 부분은 포함하지 않았습니다.
이 게시글은 데이터베이스가 필요합니다.
이 게시글을 복붙 하시면 한글이 깨질 수 있습니다. meta 태그를 이용하여 인코딩 형식을 지정해 주세요.
SQL
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
데이터 베이스는 생성되어 있다고 가정하고 테이블 생성부터 하겠습니다.
만약 생성을 하지 않으셨다면 CREATE DATABASE를 이용하세요.
users라는 이름을 가진 테이블을 생성합니다 구조는 다음과 같습니다.
id 필드의 종류는 int(정수)로 하고 자동으로 숫자를 채워주고 기본 키(기준이 되는 키)로 사용하겠습니다.
긴 코드의 경우 주석으로 처리하겠습니다.
regiser.php
<?php include('server.php') ?>//server.php를 이 문서에 포함합니다.
<!DOCTYPE html>//html내용은 html5의 문법을 따릅니다.
<html>//html 문서가 시작됩니다
<head>
<title>탭 제목</title>
<link rel="stylesheet" type="text/css" href="style.css">
//style.css를 이 문서에 적용합니다.
</head>
<body>
<div class="header">
<h2>회원가입</h2>
</div>
<form method="post" action="register.php">
//post방식으로 register.php(현재문서)로 값을 전달합니다.
<?php include('errors.php'); ?>
//errors.php를 이 문서에 이 위치에 포함합니다.
<div class="input-group">
<label>ID</label>
<input type="text" name="username" value="<?php echo $username; ?>">
//게시글 내용에서 자세히 설명한다.
</div>
<div class="input-group">
<label>Email</label>
<input type="email" name="email" value="<?php echo $email; ?>">
</div>
<div class="input-group">
<label>비밀번호</label>
<input type="password" name="password_1">
</div>
<div class="input-group">
<label>비밀번호 확인</label>
<input type="password" name="password_2">
</div>
<div class="input-group">
<button type="submit" class="btn" name="reg_user">회원가입</button>
//작성한 양식을 제출합니다.
</div>
<p>
이미 가입하셨나요? <a href="login.php"> Sign in</a>//로그인 창으로 이동합니다.
</p>
</form>
</body>
</html>
이 코드는 이 페이지 자체에서 처리를 하는 것이다. 여기서는 자신의 페이지에 처리하는 코드를 추가하고 페이지 자체에서 처리를 한다.
이제 위 코드에서 게시글에서 설명한다고 한 부분을 설명하겠습니다.
<div class="input-group">
<label>ID</label>
<input type="text" name="username" value="<?php echo $username; ?>">
</div>
전체적으로 이 구조가 반복되고 있다.
div 태그는 lavel 과 input를 묶어주는 역할이다.
label 태그는 다음에 나오는 input 태그와 함께 쓰이며 앞의 글자를 누르면 다음에 나오는 양식을 선택하기 편하게 해주는 역할이다.
input 태그는 사용자가 무언가의 행동을 할 수 있는 어떤 것을 표시해 줍니다.
위의 코드에서는 type을 text로 했으니 텍스트 박스가 나오겠지요. value는 초깃값을 지정합니다.
(변수에는 나중에 sever.php에서 이용자가 저기에 작성된 내용을 담아 둘 것입니다.)
회원 가입 진행 도중 나중에 지정한 오류가 발생하면 가입이 중단되고 여기와 email 두 공간은 자동으로 작성됩니다.
type의 종류 : button, checkbox, color, date, datetime-local, email, file, hidden, image, month, number, password, radio, range, reset, search, submit, tel, text, time, url, week
server.php
<?php
session_start(); // 세션은 페이지 제일 처음에 작성을 해야 작동합니다.
// 변수를 초기화 합니다. 이 변수에 나중에 양식의 기본 값을 지정했었죠.
$username = "";
$email = "";
$errors = array(); // 이 errors라는 배열은 나중에 errors.php에서 사용됩니다.
// 데이터베이스에 접속합니다.
$db = mysqli_connect('localhost(도메인)', 'root(ID)', '비밀번호', 'DB이름');
// 회원가입
if (isset($_POST['reg_user'])) {// post값으로 전달된 ref_user값이 있는지 확인합니다
// 폼에서 입력 값을 받아옵니다
$username = mysqli_real_escape_string($db, $_POST['username']);
$email = mysqli_real_escape_string($db, $_POST['email']);
$password_1 = mysqli_real_escape_string($db, $_POST['password_1']);
$password_2 = mysqli_real_escape_string($db, $_POST['password_2']);
// mysqli_real_escape_string은 게시글에서 설명하겠습니다.
// 폼의 항목들이 모두 채워졌는지 확인합니다 ...
// 비워진 부분이 있다면 errors라는 배열에 추가를 합니다
if (empty($username)) { array_push($errors, "ID가 비어 있어요"); }
if (empty($email)) { array_push($errors, "Email이 비어 있어요"); }
if (empty($password_1)) { array_push($errors, "비밀번호가 비어 있어요"); }
if ($password_1 != $password_2) {
array_push($errors, "이런! 비밀번호가 일치하지 않네요");
}
// 데이터베이스를 활용하는 부분입니다 혹시 준비되지 않으신 분들은 준비해 주세요
$user_check_query = "SELECT * FROM users WHERE username='$username' OR email='$email' LIMIT 1";
// email과 ID가 중복되었는지 확인하는 sql문을 변수에 담아둡니다.
$result = mysqli_query($db, $user_check_query);
//실제 결과를 이제 변수에 담아두고요.
$user = mysqli_fetch_assoc($result); // 그 결과를 배열에 담습니다.
if ($user) { // if 만약 결과가 존재한다면
if ($user['username'] === $username) {
array_push($errors, "이런! 해당 ID는 이미 사용중이네요");
}
if ($user['email'] === $email) {
array_push($errors, "이런! 해당 이메일은 이미 사용중이네요");
}
}
// 에러가 없다면(errors배열이 비어 있다면) 가입이 진행됩니다
if (count($errors) == 0) {
$password = md5($password_1);// 입력한 비밀번호를 암호화 시킵니다.
// md5는 복호화가 힘들기 때문에 아래 게시글에 있는 링크를 참고하시면 나중에 활용하기 좋야요
$query = "INSERT INTO users (username, email, password)
VALUES('$username', '$email', '$password')";
//db에 넣는 쿼리문 적고요
mysqli_query($db, $query); //실행을 합니다
$_SESSION['username'] = $username; // 세션을 추가합니다.
$_SESSION['success'] = "당신은 로그인에 성공했어요
1";
header('location: index.php');// 그리고 index 페이지로 보내버립니다.
}
}
php의 끝을 알리는 괄호가 아직 나오지 않았습니다. 남은 부분은 로그인 구현 후 만들도록 하겠습니다.
mysqli_real_escape_string은 SQL 명령문에 사용되는 문자열에서 특수 문자를 회피하기 위해 사용되며 보안을 위해 사용됩니다.
db에서 결과 가져오는 것들에 대해서 정리가 잘 되어 있는 곳을 찾아서 링크 걸어드립니다.
http://cricri4289.blogspot.kr/2013/10/php-mysql-mysqli-mysqlifetchrow.html
PHP mysql mysqli 데이터베이스 mysqli_fetch_row() mysqli_fetch_assoc() mysqli_fetch_array() 함수 차이.
PHP mysql mysqli 데이터베이스 mysqli_fetch_row(), mysqli_fetch_assoc(), mysqli_fetch_array() 함수 차이.
cricri4289.blogspot.kr
비밀번호를 암호화해서 저장하는 이유는 혹시라도 데이터베이스에 접근하더라도 해커가 읽을 수 없게 하는 것이 목적입니다.
위에서 설명한 복호화까지 쉽게 할 수 있게 해준 암호화가 있어서 긁어왔습니다.
코딩하는 사람은 모르는 사람이 드물다고 하는 스택오버플로입니다.
https://stackoverflow.com/questions/15194663/encrypt-and-decrypt-md5
encrypt and decrypt md5
I am using code $enrypt=md5($pass) and inserting $encrypt to database.
I want to find out a way to decrypt them.
I tried using a decrypting software but it says the hash should be of exactly 16 by...
stackoverflow.com
error을 표시하는 기능을 이제 추가해 보도록 합시다.
errors.php
<?php if (count($errors) > 0) : ?>
// 만약 errors의 개수가 0을 초과한다면?
<div class="error">
<?php foreach ($errors as $error) : ?>//배열을 반복합니다
<p><?php echo $error ></p>//그 결과를 출력?
<?php endforeach ?>
</div>
<?php endif ?>
이 코드에서는 대체 문법이 사용되어 있네요.
대체 문법에 대해서 더 알고 싶으신 분은 아래 매뉴얼을 확인해주세요.
http://php.net/manual/kr/control-structures.alternative-syntax.php
PHP: 제어 구조의 대체 문법 - Manual
Change language: Edit Report a Bug
제어 구조의 대체 문법
PHP는 제어 구조를 위해 대체 문법을 제공한다;
즉 if , while , for , foreach , 그리고 switch .
각 경우에 대체 문법의 기본형태는 괄호열기를 콜른 (:)으로 대체하고
괄호닫기는 각각 endif; , endwhile; , endfor; , endforeach; ,
또는 endswitch; 으로 대체한다.
<?php if ( $a == 5 ): ?>
php.net
login.php
<?php include('server.php') ?>
<!DOCTYPE html>
<html>
<head>
<title>탭 이름</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="header">
<h2>Login</h2>
</div>
<form method="post" action="login.php">
<?php include('errors.php'); ?>
<div class="input-group">
<label>ID</label>
<input type="text" name="username" >
</div>
<div class="input-group">
<label>비밀번호</label>
<input type="password" name="password">
</div>
<div class="input-group">
<button type="submit" class="btn" name="login_user">로그인</button>
</div>
<p>
아직 멤버가 아닌가요? <a href="register.php">가입하기</a>
</p>
</form>
</body>
</html>
회원가입 페이지다
이제 로그인하는 부분까지 server.php에 추가하여 완벽하게 기능을 만들어봅시다.
server.php의 완성
<?php
session_start(); // 세션은 페이지 제일 처음에 작성을 해야 작동합니다.
// 변수를 초기화 합니다. 이 변수에 나중에 양식의 기본 값을 지정했었죠.
$username = "";
$email = "";
$errors = array(); // 이 errors라는 배열은 나중에 errors.php에서 사용됩니다.
// 데이터베이스에 접속합니다.
$db = mysqli_connect('localhost(도메인)', 'root(ID)', '비밀번호', 'DB이름');
// 회원가입
if (isset($_POST['reg_user'])) {// post값으로 전달된 ref_user값이 있는지 확인합니다
// 폼에서 입력 값을 받아옵니다
$username = mysqli_real_escape_string($db, $_POST['username']);
$email = mysqli_real_escape_string($db, $_POST['email']);
$password_1 = mysqli_real_escape_string($db, $_POST['password_1']);
$password_2 = mysqli_real_escape_string($db, $_POST['password_2']);
// mysqli_real_escape_string은 게시글에서 설명하겠습니다.
// 폼의 항목들이 모두 채워졌는지 확인합니다 ...
// 비워진 부분이 있다면 errors라는 배열에 추가를 합니다
if (empty($username)) { array_push($errors, "ID가 비어 있어요"); }
if (empty($email)) { array_push($errors, "Email이 비어 있어요"); }
if (empty($password_1)) { array_push($errors, "비밀번호가 비어 있어요"); }
if ($password_1 != $password_2) {
array_push($errors, "이런! 비밀번호가 일치하지 않네요");
}
// 데이터베이스를 활용하는 부분입니다 혹시 준비되지 않으신 분들은 준비해 주세요
$user_check_query = "SELECT * FROM users WHERE username='$username' OR email='$email' LIMIT 1";
// email과 ID가 중복되었는지 확인하는 sql문을 변수에 담아둡니다.
$result = mysqli_query($db, $user_check_query);
//실제 결과를 이제 변수에 담아두고요.
$user = mysqli_fetch_assoc($result); // 그 결과를 배열에 담습니다.
if ($user) { // if 만약 결과가 존재한다면
if ($user['username'] === $username) {
array_push($errors, "이런! 해당 ID는 이미 사용중이네요");
}
if ($user['email'] === $email) {
array_push($errors, "이런! 해당 이메일은 이미 사용중이네요");
}
}
// 에러가 없다면(errors배열이 비어 있다면) 가입이 진행됩니다
if (count($errors) == 0) {
$password = md5($password_1);// 입력한 비밀번호를 암호화 시킵니다.
// md5는 복호화가 힘들기 때문에 아래 게시글에 있는 링크를 참고하시면 나중에 활용하기 좋야요
$query = "INSERT INTO users (username, email, password)
VALUES('$username', '$email', '$password')";
//db에 넣는 쿼리문 적고요
mysqli_query($db, $query); //실행을 합니다
$_SESSION['username'] = $username; // 세션을 추가합니다.
header('location: index.php');// 그리고 index 페이지로 보내버립니다.
}
}
// 로그인
if (isset($_POST['login_user'])) {// post방식으로 넘어온 login_user값이 있는지 확인
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password']);
//위에서 설명 했구요.
if (empty($username)) {
array_push($errors, "ID가 비어있네요?");
}
if (empty($password)) {
array_push($errors, "비밀번호가 비어 있잖아!!!");
}
if (count($errors) == 0) {//에러가 없다면
$password = md5($password);//비밀번호 암호화해서 변수에 담아주고요
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
//id와 비번을 넣고 체크해주는 쿼리
$results = mysqli_query($db, $query);//실행하구요
if (mysqli_num_rows($results) == 1) {//값이 하나면요
$_SESSION['username'] = $username;//세션을 만들어줍니다
header('location: index.php');//그리고 index페이지로 보내줍니다
}else {
array_push($errors, "로그인 실패! 틀린 id나 비밀번호 입력했음.");
}
}
}
?>
이제 원하는 대로 로그인 정보를 가공해서 로그인 안내를 하시면 됩니다.
아래는 예시입니다. 역시 원문의 글을 대충 한국어로 옮겼습니다.
index.php
<?php
session_start(); // 세션 실행
if (!isset($_SESSION['username'])) {//세션이 없다면
$_SESSION['msg'] = "일단 로그인부터!";
header('location: login.php');// 로그인창으로 보내버립니다.
}
if (isset($_GET['logout'])) {//get으로 넘어온 logout값이 있는지 확인
session_destroy();//그러면 지워주고
unset($_SESSION['username']);//변수 파!괴!
header("location: login.php");//로그인 화면으로 보내줍시다 저는 친절하니까요
}
?>
<!DOCTYPE html>
<html>
<head>
<title>탭 이름</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="header">
<h2>메인 페이지라는 알림</h2>
</div>
<div class="content">
<?php if (isset($_SESSION['success'])) : ?>
<div class="error success" >
<h3>
<?php
echo $_SESSION['success'];
unset($_SESSION['success']);
?>
</h3>
</div>
<?php endif ?>
<!-- 로그인 유저의 정보 -->
<?php if (isset($_SESSION['username'])) : ?>
<p>반갑습니다, <strong><?php echo $_SESSION['username']; ?></strong></p>
<p> <a href="index.php?logout='1'" style="color: red;">로그아웃</a> </p>
<?php endif ?>
</div>
</body>
</html>
이렇게 대충 코드를 분석해 보았습니다. 오타와 잘못된 정보는 댓글로 남겨주시기 바랍니다.
뒤가 조금 막장이 되어 버리긴 했지만 아무튼 원문의 코드를 대충 알아보기 편하게 한글로 바꾼 것 말고는 창작이 없습니다.
제가 잘 아는 사람이 아닌지라 정보가 없어서 일단 이렇게... 이상하게 분석을 했습니다...
머 이해해 주실 거라 믿습니다.
php mysql 로그인
<?php
session_start();
ob_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>activeplayer login result</title>
<meta charset = "utf-8" />
</head>
<body>
<?php
if(isset($_SESSION['id'])){
exit('<a href= "javascript_:history.go(-1)">세션을 통해 로그인 정보를 확인하였습니다.</a></body></html>');
}
if(empty($_POST['email']) || empty($_POST['pass'])){
exit('<a href= "javascript_:history.go(-1)">로그인 폼을 채워주세요.</a></body></html>');
}
$dbc = mysqli_connect('127.0.0.1', 'root', 'apmsetup', 'doosan')
or die("Error Connecting to MySQL server.");
$email = mysqli_real_escape_string($dbc, trim($_POST['email']));
$pass = mysqli_real_escape_string($dbc, trim($_POST['pass']));
$query = "select id, email from user where email = '$email' and password = SHA('$pass')";
mysqli_query($dbc, 'set names utf8');
$result = mysqli_query($dbc, $query)
or die('Error Querying databases.');
if( mysqli_num_rows($result) == 1){
$row = mysqli_fetch_assoc($result);
$userid = $row['id'];
$_SESSION['id'] = $userid;
setcookie('id' , $row['id'], time() + (60*60*24));
setcookie('email' , $row['email'], time() + (60*60*24));
echo "$email". "님이 로그인에 성공했습니다.<br/><br/><a href = '/main.html'>홈으로</a>";
}
else {
echo "로그인에 실패했습니다.<br/><br/><a href = '/main.html'>홈으로</a>";
}
mysqli_free_result($result);
?>
</body>
</html>
mysqli_num_rows($result) == 1 이 문제인 것 같아요
로그인에 실패했다고 자꾸 뜨는데 아무리 봐도 코드에는 문제가 없는 것 같아요..ㅠㅠ
mysql 콘솔에 select * from user; 치면 id email pass 잘 나오는데 왜 이러는지 모르겠네요
mysqli_num_rows($result) == 0 이렇게 바꾸면 회원가입 상관없이 어떤 걸 넣어도 로그인은 된다고 떠요
도대체 뭐가 문제인거죠?ㅠㅠ
안녕하세요 ㅎ
혹시 $query = "select id, email from user where email = '$email' and password = SHA('$pass')";
이렇게 되있는데 이 쿼리는 했을때
결과 값이 1개 이상이 나오는거 아닐까요?
echo mysqli_num_rows($result); 이렇게 해서 결과 값을 한번 출력해 보세요
위에 문법으로는 무조건 1일 때 로그인 이니깐 2개 나오면 .. 로그인 실패 겠네요..
아니면 where 절에 email = '$email' 이것을 id 로 해야되는거 아니지 모르겠네요 ㅎㅎ
마무튼 위에 방법으로 디버깅을 해보시는게 좋을 것 같습니다.
php mysql 로그인 연동
php mysql 로그인 연동
<?
session_start();
$user_id = $_REQUEST['user_id'];
$pw = $_REQUEST['pw'];
$db= mysql_connect('localhost','root','autoset');
if( !$db){
echo "데이터 베이스 접속 오류<br>";
exit(1);
}
mysql_query("set names utf8");
mysql_select_db('dbere');
$sql= "select * from jjp_member where user_id='{$user_id}' and pw=pw('{$pw}');";
$res = mysql_query($sql);
if( mysql_num_rows($res) < 1)
{
echo "<script>alert('아이디 또는 비밀번호가 올바르지 않습니다.');";
echo "history.go(-1);</script>";
exit(1);
}
$row = mysql_fetch_array($res);
$_SESSION['user_id'] = $user_id;
$_SESSION['name'] = $row['name'];
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<?=$row['name']?>님 환영합니다.<br><br>
<a href="main.html">페이지 이동</a>
</body>
</html>
MYSQL 로그인 처리 문제
<?php
$conn_DB = mysqli_connect('localhost','id','password','dbname');
if ( !$conn_DB ) {
die( "MYSQL SERVER ERROR : ".mysqli_error() );
}
$ret = mysqli_select_db('dbname',$conn_DB);
if( !ret ){
die('MYSQL TABLE ERROR :'.mysqli_error());
}
session_start();
$id = $_POST[user_id];
$pw = $_POST[user_pw];
$sql = "SELECT * FROM user WHERE user_id = '{$id}' and user_pw = md5('{$pw}')";
$resource = mysqli_query($conn_DB, $sql);
$num = mysqli_num_rows( $resource );
$assoc= mysqli_fetch_assoc($resource);
if( $num > 0 ){
$sql = "SELECT * FROM session WHERE user_id = '{$id}'";
$resource = mysqli_query($conn_DB, $sql);
$num = mysqli_num_rows( $resource );
if ( $num > 0 ){
echo "<script> alert('이미 로그인 처리된 계정입니다. ');</script>";
}else{
$sess_id = session_id();
$sql = "INSERT INTO session VALUE( $row[no], '$id','$sess_id')";
$ret = mysqli_query( $sql );
$_SESSION[user_id] = $id;
$_SESSION[is_login] = 1;
// # 로그인 환영 메시지 출력
echo "<script> alert('로그인이 완료되었습니다.');</script>";
}
}else{
echo "<script> alert('아이디 또는 패스워드가 올바르지 않습니다');</script>";
}
?>
<meta http-equiv='refresh'content="0;url='http://192.168.0.1/login'">
<?php
session_start();
$mid=$_POST["mid"];
$mpw=$_POST["mpw"];
//연동
$conn=mysql_connect("localhost","ka456","aas900863");
$db_conn=mysql_select_db("ka456",$conn);
//아이디나 비밀번호 미입력시
if(!$mid || !$mpw)Error('아이디나 비밀번호를 입력해주세요.');
//db쿼리 가져오기
$sql="select * from member where mid='".$mid."'";
$result=mysql_query($sql,$conn);
$num_match=mysql_num_rows($result);
if(!$num_match)
{
echo("<script>
window.alert('등록되지 않은 아이디입니다.')
</script>
");}
else{
$row=mysql_fetch_array($result);
$db_pw=$row["mpw"];
if($mpw != $db_pw){
echo("<script>
window.alert('비밀번호가 틀립니다.')
</script>");
exit;
}
else{
$userid=$row['mid'];
$username=$row['mname'];
// session_register(userid);
// session_register(username);
// php 이전버전에는 사용되지 않음
$_SESSION["userid"] = $userid;
$_SESSION["username"] = $username;
echo("<script>
<a href='TenTen.html'></a></script>
");
}
}
?>
로그인 관련 페이지는 약 3개정도입니다.
index.php 로그인폼 존재 (login.php파일을 index.php에서 include 했음)
login.php 로그인폼 (현재 로그인폼만존재하며 php언어는 하나도 사용 안되어있음)
login_ok.php 로그인처리 (DB에서 비교해서 처리)
index.php에서 로그인하면 login_ok.php에서 처리하여 index.php로 다시 되돌아 오고 싶습니다.
로그인폼이있던곳엔 @@@님 환영합니다. 라는 문구가 있고싶구요.
login.php 및 login_ok.php 에 추가해야 될것좀 알려주세요
DB 구조는 Login 테이블에 ID와 PWD 열 있습니다. 이 두개와 비교합니다.
login.php
<form action="login_ok.php" method="post">
<input type="text" name="userID" /><br />
<input type="text" name="userPW" /><br />
<input type="submit" value="login" />
<input type="hidden" name="action" value="login" />
</form>
login_ok.php
<?
if(!$_POST['login']) {
echo "
<script>
alert('sorry');
history.back(-1);
</script>
";
exit;
} else {
$que = "select * from 회원테이블명 where 아이디칼럼명 = '$_POST[userID]' and 패스워드칼럼명 = '$_POST[userPW]'";
$res = mysql_query($que);
$row = mysql_fetch_array($res);
if($row) {
$_SESSION['userID'] = $_POST['userID'];
echo "
<script>
location.href="~~~index.php";
</script>
";
} else {
echo "
<script>
alert('id랑 pw 확인');
history.back(-1);
</script>
";
exit;
}
?>
index.php(login.php 파일 인클루드 하셨다 했으니)
<?
session_start();
$que = "select * from 회원테이블명 where 아이디 = '$_SESSION[userID]'";
$res = mysql_query($que);
$row = mysql_fetch_array($res);
if($_SESSION) {
echo "$row[아이디칼럼명] 님 환영~";
} else {
include "login.php";
}
?>
php를 이용해서 간단히 로그인기능을 할려구 하는데요;;
파일은 login.php와 outlogin.php가 있습니다.
outlogin.php에는 로그인했을때는 이용자정보 안했을경우에는 아웃로그인이 보이게하구싶구요.
login.php에는 outlogin.php에서 로그인버튼을 눌렀을때 처리해서 outlogin.php로 다시 보내어
로그인된 상태로 바꾸게 하고싶은데요.. 간단한 예제좀 만들어주세요 ;;
위에방식은 제로보드가 저런방식같더라구요..
outlogin.php에서 로긴이 됫다면, 로긴된상태창을 뿌리고, 안됫다면, 로그인입력폼을 뿌리게합니다,,
로그인전송을 누르면 login.php에서 몇몇검사후 처리를 진행하고 다시 outlogin.php로 이동을 하게됩니다,,
//outlogin.php
<?
session_start(); // 세션시작입니다. 항상젤위에 있어야합니다,,
?>
<form method='POST' action='./login.php'>
<?
if($_SESSION['userID']=="") {
echo "<input name='id'> <br>";
echo "<input type='password' name='pwd'> <br>";
echo "<input type='submit' value='로그인'>";
}
else {
$userID = $_SESSION['userID'];
$userName = $_SESSION['userName'];
echo "대략 $userID 접속중이고 $userName님 반갑습니다 뿌려주시구요";
}
?>
</form>
// login.php
<?
session_start(); // 역시 젤위
$id = $_POST['id'];
$pwd = $_POST['pwd'];
$sql; // 이 부분은 select문 하셔서 DB의 이름과 비번을 뽑으세요. where조건은 $id와 일치할때로하시구요,,
// 예를들어,,>> "select userPwd, userName from member where userID = '$id'";
$que = mysql_query($sql);
$arr = mysql_fetch_array($que);
$row = mysql_num_rows($que);
if(!$id || !$pwd) {
echo "<script>
alert('아이디와 비밀번호를 올바르게 입력하세요');
history.back();
<script>";
}
if(!$row) {
echo "<script>
alert('등록된 사용자가 없습니다');
history.back();
</script>";
}
else {
$DB_pwd=$arr[0]; // 여기선 $arr[0]이 DB의 사용자pwd입니다.
if($Userpwd == $db_pwd)
{
$_SESSION['userID']=$userID;
$_SESSION['userName']=$arr[1]; // $arr[1]은 DB의 사용자name.
echo "<script>location.replace('./outlogin.php');</script>";
}
else
{
echo "<script>
alert('비밀번호가 틀렸습니다.');
history.back();
</script>";
}
}
?>
<?
$connect=mysql_connect("localhost","DBID","DBPASS");
if (!$connect)
{
die('Could not connect: ' . mysql_error());
}
else {
mysql_select_db ("DBNAME", $connect);
$member_id = $_POST['login_id'];
$member_pw = $_POST['login_pw'];
echo "ID : ".$member_id."<br>";
echo "PW : ".$member_pw."<br>";
$check_login='select user_id from zetyx_member_table where user_id="'.$_POST['login_id'].'"';
$query_name='SELECT name FROM zetyx_member_table WHERE user_id = "'.$member_id.'"';
if(mysql_num_rows(mysql_query($check_login)) == 1) { // 여기 문법이 틀렸습니다. 그외는 문법틀린 부분이 없습니다.
$loginname = mysql_result(mysql_query($query_name));
echo "당신의 이름은 ".$loginname." 입니다.";
}
else {
echo "<script>alert('로그인에 실패하여습니다.');location.href='inc/login.php';</script>";
}
}
?>
php mysql_fetch_array mysql_fetch_row
<?
$connect = mysql_connect("localhost", "root", "apmsetup");
mysql_select_db("oh",$connect);
$qry_result = mysql_query("select * from user_info where id='{$_POST[id]}'",$connect);
$row1 = mysql_result($qry_result,0,"id");
$row2 = mysql_result($qry_result,0,"password");
if($row1!=$_POST['id']) {
echo "
<script>
window.alert('ID를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row2!=$_POST['pw']) {
echo "
<script>
window.alert('pw를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row1 == $_POST['id'] && $row2==$_POST['pw']) {
echo "입력 id : ".$_POST['id']."<br>";
echo "입력 password : ".$_POST['pw']."<br>";
echo "로그인 성공<br>";
echo "로그인시간 : ";
echo date("Y년 m월 d일 h시 i분 s초");
echo "<br><br>";
}
mysql_close();
?>
<a href="log_in.html"><input type="button" value="로그아웃" name="logout"></a>
이소스를
하나는mysql_fetch_array함수로 하나는mysql_fetch_row함수로바꿔주세요~~
1. mysql_fetch_array
<?
$connect = mysql_connect("localhost", "root", "apmsetup");
$db_con = mysql_select_db("oh",$connect);
$qry_result = mysql_query("select * from user_info where id='{$_POST[id]}'",$connect);
$row = mysql_fetch_array($qry_result);
$row1 = $row['id'];
$row2 = $row['password'];
if($row1!=$_POST['id']) {
echo "
<script>
window.alert('ID를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row2!=$_POST['pw']) {
echo "
<script>
window.alert('pw를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row1 == $_POST['id'] && $row2==$_POST['pw'])
{
echo "입력 id : ".$_POST['id']."<br>";
echo "입력 password : ".$_POST['pw']."<br>";
echo "로그인 성공<br>";
$today = getdate();
echo "로그인 시간: ".$today[year]."년 ".$today[mon]."월 ".$today[mday]."일 ". $today[hours]."시 ".
$today[minutes]."분 ".$today[seconds]."초 <br>";
}
mysql_close();
?>
<br><a href="log_in.html"><input type="button" value="로그아웃" name="logout"></a>
2. mysql_fetch_row
<?
$connect = mysql_connect("localhost", "root", "apmsetup");
$db_con = mysql_select_db("oh",$connect);
$qry_result = mysql_query("select * from user_info where id='{$_POST[id]}'",$connect);
$row = mysql_fetch_row($qry_result);
$row1 = $row[0]; // id 칼럼명 첫번째가 일경우 $row[0], 두번째일경우 $row[1],
$row2 = $row[1]; // 세번째일경우 $row[2], ....
if($row1!=$_POST['id']) {
echo "
<script>
window.alert('ID를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row2!=$_POST['pw']) {
echo "
<script>
window.alert('pw를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row1 == $_POST['id'] && $row2==$_POST['pw'])
{
echo "입력 id : ".$_POST['id']."<br>";
echo "입력 password : ".$_POST['pw']."<br>";
echo "로그인 성공<br>";
$today = getdate();
echo "로그인 시간: ".$today[year]."년 ".$today[mon]."월 ".$today[mday]."일 ". $today[hours]."시 ".
$today[minutes]."분 ".$today[seconds]."초 <br>";
}
mysql_close();
?>
<br><a href="log_in.html"><input type="button" value="로그아웃" name="logout"></a>
php mysql DB연동 관련 질문요~~~
로그인 프로그램인데여 DB에 mydb라는 테이블은 분명히 비어있는데 아디랑 비번을 입력하고 로그인을 하면 해당아이디가 없다고 메시지가 나와야 하는데 자꾸 있다고 나오네여 ㅠ
소스는
htm 로그인에서 아디랑 비번을 입력받는 파일이구요.
<HTML>
<HEAD>
<TITLE> 문제은행 로그인 </TITLE>
<script language="JavaScript">
function check() {
if (myform.id.value== "") {
alert("아이디를 입력하세요.");
myform.id.focus();
}
else if (myform.pwd.value== "")
{
alert("비밀번호를 입력하세요.");
myform.pwd.focus();
}
else
{
myform.submit();
}
}
</script>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
회원 로그인
<form name="myform" method="POST" action="./login.php">
아 이 디 : <input type="text" name="id" maxlength="10"><br>
비밀번호 : <input type="password" name="pwd" maxlength="10"><br>
<input type="button" value="로그인" onclick="check()">
<a href="./infor.htm">회원가입</a><br>
</form>
</BODY>
</HTML>
이거는
위 파일에서 submit되어져 php로 넘겨지는 파일입니다.
밑에 보시면 if (!$rs) select 문에서 조건에 맞지않으면 즉 아이디랑 비번이 같은것이 없다면
분명히 echo "해당 아이디가 존재하지 않습니다.<br>"; 라는 문장이 나와야 한다
<?
include 'dbconn.php';
$id = $_POST['id'];
$pwd = $_POST['pwd'];
$sql = "select id, pwd from member ";
$sql .= "where id = '".$id ."'";
$query = mysql_query($sql);
$res = mysql_fetch_array($query);
$rs_num = mysql_affected_rows(); //<--최근 MySQL 작업으로 처리된 행(row) 개수를 얻음.
if($rs_num>0) { //<--행 수가 0보다 크다면..다시 말해 아이디가 있다면
echo $res['id'];
echo "님이 로그인 되었습니다.";
} else {
echo "해당 아이디가 존재하지 않습니다.<br>";
echo '<a href="./infor.htm">회원가입하기</a>';
echo ' <a href="./main.htm">로그인</a>';
}
else {
$line = mysql_fetch_array($rs);
echo $line['id'];
echo "님이 로그인 되었습니다.";
}
?>
include 되어지는 dbconn.php 파일 소스입니다.
<?
$host = "localhost";
$user = "root";
$pwd = "apmsetup";
//연결
$conn = mysql_connect($host, $user, $pwd);
//연결확인
if($conn){
//사용할 데이터베이스 선택
if (mysql_select_db('mydb',$conn)){
}
else {
echo '<br>선택한 데이터베이스에 연결할 수 없음';
}
}
else{
echo 'MySQL 연결 실패 - 강제 종료';
die("PHP 프로그램 종료");
}
?>
<?
include 'dbconn.php';
$id = $_POST['id'];
$pwd = $_POST['pwd'];
$rs = mysql_query("select * from member where id = '$id'");
$count = mysql_num_rows($rs); // 입력한 아이디 값 개수
$line = mysql_fetch_array($rs); // 값 출력문
if ($count == '0') { // 조건에 맞는 개수가 0 이면 echo문 출력
echo "해당 아이디가 존재하지 않습니다.<br>";
echo '<a href="./infor.htm">회원가입하기</a>';
echo ' <a href="./main.htm">로그인</a>';
} else { // 아니면
if($pwd != $line[pwd]){ // 비밀번호 불일치
echo"비밀번호가 일치하지 않습니다.";
}else{ // 비밀번호 일치
echo $line['id'];
echo "님이 로그인 되었습니다.";
}
?>
[PHP] mysql_query
PHP에서 DB 연결해 오고 있습니다.
여러군데에서 DB를 연결해서 쓰고 있는데, 다른 페이지에서는 쿼리전송도 잘 되고, 출력도 잘 됩니다.
그런데 이 페이지에서만 안됩니다-_ㅠ
똑같은 쿼리문을 mysql에서 실행해 보았을 때는 값이 잘 나옵니다.
왜 그러는지 좀 알려주세요!
아! 쿠키에 저장된 sql문은
select * from member where city = '$_COOKIE[firstC]'
입니다.
=================================================================
<script type="text/javascript">
function setInfo(){
alert("setInfo");
<?
//DB연결
$dbcon=mysql_connect("localhost", "root", "simple2402");
mysql_select_db("simple",$dbcon);
$sql = $_COOKIE[sql];
echo "alert('$sql');";
mysql_query("SET NAMES utf8");
//여기까지는 모두 됩니다.
//아래에 있는 $result가 false가 됩니다-_ㅠ
$result=mysql_query($sql,$dbcon);
echo "alert('$result');";
if($result){
$cnt = 1;
echo "alert('if OK!');";
while ($row = mysql_fetch_array($result)) {// 기록수만큼 순환
$clubname = $row['clubname'];
$memnum = $row['membernum'];
$part1 = $row['part1'];
$part2 = $row['part2'];
$univ = $row['univ'];
$clubaddr = $row[city].$row[gu].$row[dong].$row[subaddr];
//동아리 주소 좌표 찾기
$wrapper_url = "http://maps.naver.com/api/geocode.php?key=17064011ee914364c9584d9f5182ecfb&query=".$clubaddr;
$content = file_get_contents($wrapper_url);
$url = HtmlSpecialChars($content);
$del = substr($url, 68);
$htmlchange = html_entity_decode($del);
$codechange = utf8_encode($htmlchange);
$xml = simplexml_load_string($codechange);
$x = $xml->item->point->x;
$point_x = HtmlSpecialChars($x);
$y = $xml->item->point->y;
$point_y = HtmlSpecialChars($y);
echo "initMarker(new NPoint($point_x, $point_y), $cnt, new Array('$clubname', '$memnum', '$part1', '$part2', '$univ'));\n";
$cnt = $cnt + 1;
}
}
?>
}
</script>
지식인채택
<script type="text/javascript">
<?
//DB연결
$dbcon=mysql_connect("localhost", "root", "simple2402");
mysql_select_db("simple",$dbcon);
$sql = $_COOKIE[sql];
echo "alert('$sql');";
mysql_query("SET NAMES utf8");
//여기까지는 모두 됩니다.
//아래에 있는 $result가 false가 됩니다-_ㅠ
$result=mysql_query($sql,$dbcon);
?>
function setInfo(){
alert("setInfo");
"alert('<?=$result?>');";
<?
if($result){
$cnt = 1;
echo "alert('if OK!');";
while ($row = mysql_fetch_array($result)) {// 기록수만큼 순환
$clubname = $row['clubname'];
$memnum = $row['membernum'];
$part1 = $row['part1'];
$part2 = $row['part2'];
$univ = $row['univ'];
$clubaddr = $row[city].$row[gu].$row[dong].$row[subaddr];
//동아리 주소 좌표 찾기
$wrapper_url = "http://maps.naver.com/api/geocode.php?key=17064011ee914364c9584d9f5182ecfb&query=".$clubaddr;
$content = file_get_contents($wrapper_url);
$url = HtmlSpecialChars($content);
$del = substr($url, 68);
$htmlchange = html_entity_decode($del);
$codechange = utf8_encode($htmlchange);
$xml = simplexml_load_string($codechange);
$x = $xml->item->point->x;
$point_x = HtmlSpecialChars($x);
$y = $xml->item->point->y;
$point_y = HtmlSpecialChars($y);
echo "initMarker(new NPoint($point_x, $point_y), $cnt, new Array('$clubname', '$memnum', '$part1', '$part2', '$univ'));\n";
$cnt = $cnt + 1;
}
}
?>
}
</script>
//이렇게 해보시고 쪽지주세요
동일한 소스로 다른 페이지에서는 잘 되나 현재 페이지에서만 결과값이 나오지 않는 것도 이해하기 쉽지 않군요 ^^;
우선 결과 값이 나오지 않는다면
$result=mysql_query($sql,$dbcon);
echo "alert('$result');";
1. 번째 원인이 될 수 있는 부분 ...
if($result){ } <== $result 가 false 면 더이상 진행하지 않겠죠
echo $result ; <== 이렇게 echo 찍는 건 무의미 한 것 같구요
$result=mysql_query($sql,$dbcon) or die(mysql_error()); 로 수정해 보시면, 쿼리문 어디서 에러가 났는지 알려줍니다.
2. 번째 원인이 될 수 있는 부분 ...
select * from member where city = '$_COOKIE[firstC]'; <= $_COOKIE[firstC] 의 값이 없을 경우 ...
select * from member where city = ''; <== 쿼리가 이렇게 날라가기 때문에, 아무 것도 나오지 않겠죠
이때도 if($result) { } 는 false 가 아니기 때문에 while 문을 수행합니다만, $result 의 결과 값이 없기 때문에, 나오지 않습니다.
3. 번째 원인이 될 수 있는 부분 ...
쿠키는 도메인에 영향을 받습니다.
a.co.kr과 www.a.co.kr 은 다른 도메인으로 인식을 합니다.
최초 로그인을 a.co.kr 로 하다가, 메뉴 링크를 클릭하면서 www.a.co.kr 로 넘어간다면, 쿠키는 다른 도메인으로 인식해서 $_COOKIE[firstC] 값을 넘겨주지 않습니다.
동일한 소스로 다른 페이지에서는 잘 나오는 값이 현재 페이지에서만 값이 나오지 않는다면,
위의 3가지 정도 생각할 수 있을 것 같습니다.
php 로그인창 튕김 ㅜㅜ
db연동까지 되었습니다 ㅠㅠ 근데 로그인만 누르면 그냥 아무일도 없었던것처럼 됩니다.. .디비에 보면 내용은 다 있는데 왜이러나요..ㅜㅜ 참고로 이 php 이름은 left.php입니다 ..ㅜ
<?php
session_start();
#----------------로그인 되었는지를 비교-----------------------#
if (session_is_registered('shop_logon'))
{
#--------로그인된 회원중에서 로그아웃을 선택-------#
if ($logout == "ok")
{
#--------세션 해제-------#
session_unregister('shop_logon');
session_unregister('cart');
echo ("
<script>
parent.location.reload(true);
</script>
");
}
#--------로그인된 회원인 경우에 실행-------#
else
{
echo ("
<HTML>
<head>
");
include("./style.php");
echo ("
</head>
<body>
<br><br><font><font color='blue'><b>$shop_logon[1]</b></font>님을 환영합니다.</font>
<br><br><a href='./left.php?logout=ok'>로그아웃</a>
</body>
</HTML>
");
}
exit;
}
#----------------아이디와 패스워드 입력확인--------------------#
else if (($_POST['mem_id'] == "") || ($_POST['mem_pass'] == ""))
{
echo ("
<html>
<head><title>헝기's Mart</title></head>
<body>
<a href='http://127.0.0.1/main.html'><p align=center><img src='title1.png' width='600' height='200'></p></a>
<marquee><img src='스크롤.gif' width='300' height='50'></marquee>
<hr size='1' width='100%'>
<TABLE BORDER='0' align='center'><br>
<form name='login' method='post' action='./left.php'>
<table border='0' width='150' cellpadding='1' cellspacing='1'>
<TABLE BORDER='0' align='center'>
<tr>
<td width='90' valign='middle' align='left' bgcolor=#B2CCFF>
아이디
</td>
<td width='90'>
<input type='text' name='mem_id' size='8'>
</td>
</tr>
<TABLE BORDER='0' align='center'>
<tr>
<td width='90' valign='middle' align='left' bgcolor=#B2CCFF>
비밀번호
</td>
<td width='90'>
<input type='password' name='mem_pass' size='8'>
</td>
</tr>
<TABLE BORDER='0' align='center'>
<tr>
<td width='175' colspan='2' align='left' bgcolor=#B2CCFF>
<font size='2'><a href='./new_member.php' target='right'>가입하기</a></font>
<input type='submit' value='로그인' style='font-family: 굴림; font-size: 9pt; width:70px; height:23px'>
</td>
</td>
</tr>
</td>
</table>
</form>
</BODY>
</HTML>
");
}
#----------------회원 로그인 확인-------------------#
else
{
$conn = mysql_connect('localhost', 'root', 'apmsetup');
$db_status = mysql_select_db('shoppingmall');
if (!$db_status)
{
echo("
<script>
window.alert('Database ERROR');
history.go(-1);
</script>
");
exit;
}
#----------------DB에 등록된 회원인지를 확인------------------#
$query = "select mem_id, mem_name from member_tab where (mem_id = '" . $_POST['mem_id'] . "') and (mem_password = '" . $_POST['mem_pass'] ."')";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
if ($row[0] == "")
{
echo("
<script>
window.alert('아이디와 비밀번호를 확인해 주세요');
history.go(-1);
</script>
");
exit;
}
else
{
#-----------세션이 설정되지 않았으면 설정함----------------#
if (!session_is_registered('shop_logon')) {
session_register('shop_logon');
$shop_logon = array($row[0], $row[1]);
}
echo ("
<script>
parent.location.reload(true);
</script>
");
}
}
?>
php 세션에 대해서 질문 드릴께요
제가 지금 홈페이지를 만들고 있는데..
회원으로 로그인하고 아이디랑 비밀번호 대조해 보고 맞으면 다음과 같이 상위 메뉴가 나오게 할꺼거든요
근데 문제는 세션값이 다음으로 안넘어 가진다는거죠;;
질문은.. 세션값을 다른 페이지로 넘길려면 어떻게 해야 하나요??
세션이라는게 페이지가 넘어가면 사라지는건가요?? 아님 제가 밑에 소스를 잘못 짰나요??
첨부 이미지첨부 이미지
첨부 이미지
---------------로그인 처리하는 php이고--------------------------
login_engine.php
<? include_once("../lib/session.php"); include_once("../lib/dbcon.php");
$sql = "select * from nbjoin where M_id='$M_id'"; $res = mysql_query($sql); if ($res) $rs = mysql_fetch_array($res);
if ($rs[M_id]==$M_id && $M_id!="") {//아이디 일치 if ($rs[M_pwd]==$M_pwd) {//암호 일치 $session_M_id = $rs[M_id];//인증완료 echo " <script> location.replace('login_success.php'); </script> "; } else {//암호오류 echo " <script> alert('[인증실패] 암호가 올바르지 않습니다.'); location.replace('ajoin.php'); </script> "; } } else {//아이디 오류 echo " <script> alert('[인증실패] 아이디가 올바르지 않습니다.'); location.replace('ajoin.php'); </script> "; } ?>
----------------------------로그인 처리후에 top2로 넘기는 파일--------------
login_success.php
<? include_once("../lib/session.php"); include_once("../lib/dbcon.php");
$sql = "select * from nbjoin where M_id='$session_M_id'"; $res = mysql_query($sql); if ($res) $rs = mysql_fetch_array($res);
if ($session_M_id=="" || $rs[M_id]=="") { $session_M_id==""; echo " <script> location.replace('Ajoin.php'); </script> "; die; } ?> <script language="javascript"> top.parent.location.href="../top2.php"; </script>
---------------------새로운 top2.php 파일 --------------------
<? include_once("../lib/session.php"); include_once("../lib/dbcon.php");
if ($session_M_id=="") { echo " <script> alert('[회원전용] 로그인 후 사용하십시오.'); location.replace('../nbjoin/ajoin.php'); </script> "; die; } ?> <? echo $rs[M_name];?><? echo $rs[M_id];?>
Ξ PHP
내 프로필 이미지
닉네임kos7**** 작성일2008.06.11. 댓글1 나도 궁금해요
더보기
답변3개 정렬 옵션
채택순
필터 옵션
전체보기
보기 옵션
최적원문
1번째 답변
루나님 프로필 이미지
루나 님 답변 친구
영웅채택답변수 263PHP16위, 윈도우
질문자채택
세션의 사용법이 틀리신거 같구요
또하나는 스크린샷에 나온 오류에 초점을 두셔야 할거 같습니다..
../lib/dbconn.php 랑 ../lib/session.php 가 존재하는지 확인해보세요
해당 경로에 위 파일이 없어서 나오는 오류이군요..
그리고 세션에 대한 잘못된 사용법이 있는데
$session_M_id 로 받으시려 하셨다는거네요..
물론 session.php 나 dbconn.php 안에 위 변수를 받아들여서 세션으로 생성시키고 반환해주는게 있다면
될수도 있겠습니다만 그것은 위 파일에 대한 소스내용을 모르니 확답드릴순 없구요
세션사용방법은
$session_M_id = "값";
session_register("session_M_id");
로 생성하실수 있으며 세션변수를 사용하셔야 할경우에는 $_SESSION["변수명"]; 으로 호출해서
사용할수 있습니다..
위 예제로 본다면 $_SESSION["session_M_id"] 가 되겠네요
세션에 대한 자세한 내용은 제가 집필해둔 오픈백과를 보시기 바랍니다..^^
참고: 세션을 생성하고 호출하기 위해서는 무엇보다 맨 먼저 session_start(); 를 사용하여 시작을
알리셔야 하며 이 함수는 어떤 해더보다 앞에 와야 합니다..
즉, 이 함수를 사용하기 전에 어떤 내용도 먼저 페이지에 출력되선 안됩니다...
출처직접서술
2008.06.11.
좋아요 좋아요 평가하기1 사용자 표시1
더보기
2번째 답변
ch2s****님 프로필 이미지
ch2s**** 님 답변 친구
고수채택답변수 106사람과 그룹, 자바스크립트, PHP
안녕하세요 이미 해결을 하셨는지 모르겠네요...^^
세션과 쿠키의 개념은 아실테고.....
일단은 경로에 오류가 있네요...^^
저 에러 메세지는 100% 해당 경로에 해당 파일이 없어서 나는 에러입니다.
그럴땐 include하고자 하는 페이지에서
: echo $_SERVER["DOCUMENT_ROOT"];
위 변수를 넣고 페이지를 열어보면 절대경로가 출력됩니다.
나온 경로는 리눅스상의 절대경로이며
저같은경우 $root_path 같은 형식으로 기본 루트 경로를 변수에저장하고
include 할때는 <? include_once("$root_path/lib/session.php"); ?> 형식으로 등록합니다.
이러면 경로를 고치고자할땐 $root_path변수만 고치면 나머지 경로는 상대경로와 비슷하게 사용할 수 있습니다.
물론 $root_path같은 변수는 필요없지만 절대경로를 좋아하는 타입이고 만약 경로가 이상할때 찍어보면 약간은 더 편한것 같더군요...^^
그리고 윗분이 하신 말씀처럼
session_register("세션명") <= 이함수가 없네요(세션을 생성하는 함수)...^^
session.php 파일에서 어떤 동작을 하는지는 알수가 없으나 라이브러리 파일이라면 세션설정에대한 함수가 있을것 같네요.
login_engine.php파일에서 세션을 생성한다면 필요없는 작업이지만 세션생성을 login_success.php파일에서 하겠다면 해당 아이디를 login_success.php로 옴기실때 어떠한 방법으로도 파라미터를 전달하지를 않고 있습니다.
예) <script> location.replace('login_success.php?M_id=<?=$rs[M_id]?>'); </script>
위 예는 간단하게 GET로 전달한것이고 원하시면 POST처리로도 하시면 됩니다.
이후 M_id값을 login_success.php파일에서 세션에대한 처리를 하셔야 할것으로 생각 됩니다.
그럼이제 예를 들어서 소스를 만들어 보겠습니다.
login_engine.php
: <?
: include_once("$root_path/lib/dbcon.php");
: // login_success.php 파일은 무엇인지 몰라 포함하지 않았습니다.
:
: $M_id = $_POST[M_id];
: $M_pwd = $_POST[M_pwd];
:
: if (!trim($M_id) || !trim($M_pwd)){
: echo "<script language='javascript'>alert('회원아이디나 패스워드가 공백입니다.');";
: echo "history.go(-1);";
: echo "</script>";
: exit();
: }
:
: $sql = "select * from nbjoin where M_id=TRIM('$M_id')";
: $res = mysql_query($sql);
: if ($res) $rs = mysql_fetch_array($res);
:
: if (!$rs[M_id] || $M_pwd != $rs[M_pwd]){ // if문에서 아이디는 null체크만하면 됩니다. 틀리면 어짜피 select 안됩니다.
: echo "<script language='javascript'>";
: echo "alert('가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.');";
: echo "<script language='JavaScript'> document.location.href = 'ajoin.php'; </script>";
: exit();
: }
:
: $session_M_id = "$rs[M_id]";
: session_register($session_M_id);
: $session_M_name = "$rs[M_name]";
: session_register($session_M_name); // 그림에 OO님이기에....^^
:
: echo "<script language='JavaScript'> document.location.href = 'login_success.php'; </script>";
: exit();
그리고 무슨 깊은뜻이 있으신지는 모르겠지만 login_success.php파일의 경우 전혀 필요성을 못느끼겠네요...^^
위에서 처럼 두번씩이나 select하실 필요까지는.....^^
길어졌네요...^^
알아서 처리 하셨다고 치고 이제 top2.php파일에서
: session_start(); // 최상단 include된 파일에 선언하는것이 편합니다......^^
$_SESSION["session_M_name"]같은 형식으로 불러서 쓰시면 됩니다.
그럼 수고하세요...^^
tip : alert,session,query문 등을 라이브러리 파일에 함수로 작성하여 사용하면 더 편합니다.
출처본인작성
2008.06.28.
좋아요 좋아요 평가하기1 사용자 표시댓글
더보기
3번째 답변
cafr****님 프로필 이미지
cafr**** 님 답변 친구
초수채택답변수 0
일단 ../lib/session.php 파일을 찾을 수가 없어서 나는 오류군요
그리고 맨 위에 session_start(); 를 하셔야 합니다.
그밖에 세션 타임을 정할 수 있는 함수도 있습니다.
ini_set("session.cache_expire", 3600);
ini_set("session.gc_maxlifetime", 3600);
으로도 설정할 수가 있고요
if (!isset($_SESSION[session_M_id])) { echo " <script> alert('[회원전용] 로그인 후 사용하십시오.'); }
이렇게 하셔도 좋을 것같습니다.
2018. 3. 25. 21:57
이 게시글에서는 디자인 부분은 포함하지 않았습니다.
이 게시글은 데이터베이스가 필요합니다.
이 게시글을 복붙 하시면 한글이 깨질 수 있습니다. meta 태그를 이용하여 인코딩 형식을 지정해 주세요.
SQL
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
데이터 베이스는 생성되어 있다고 가정하고 테이블 생성부터 하겠습니다.
만약 생성을 하지 않으셨다면 CREATE DATABASE를 이용하세요.
users라는 이름을 가진 테이블을 생성합니다 구조는 다음과 같습니다.
id 필드의 종류는 int(정수)로 하고 자동으로 숫자를 채워주고 기본 키(기준이 되는 키)로 사용하겠습니다.
긴 코드의 경우 주석으로 처리하겠습니다.
regiser.php
<?php include('server.php') ?>//server.php를 이 문서에 포함합니다.
<!DOCTYPE html>//html내용은 html5의 문법을 따릅니다.
<html>//html 문서가 시작됩니다
<head>
<title>탭 제목</title>
<link rel="stylesheet" type="text/css" href="style.css">
//style.css를 이 문서에 적용합니다.
</head>
<body>
<div class="header">
<h2>회원가입</h2>
</div>
<form method="post" action="register.php">
//post방식으로 register.php(현재문서)로 값을 전달합니다.
<?php include('errors.php'); ?>
//errors.php를 이 문서에 이 위치에 포함합니다.
<div class="input-group">
<label>ID</label>
<input type="text" name="username" value="<?php echo $username; ?>">
//게시글 내용에서 자세히 설명한다.
</div>
<div class="input-group">
<label>Email</label>
<input type="email" name="email" value="<?php echo $email; ?>">
</div>
<div class="input-group">
<label>비밀번호</label>
<input type="password" name="password_1">
</div>
<div class="input-group">
<label>비밀번호 확인</label>
<input type="password" name="password_2">
</div>
<div class="input-group">
<button type="submit" class="btn" name="reg_user">회원가입</button>
//작성한 양식을 제출합니다.
</div>
<p>
이미 가입하셨나요? <a href="login.php"> Sign in</a>//로그인 창으로 이동합니다.
</p>
</form>
</body>
</html>
이 코드는 이 페이지 자체에서 처리를 하는 것이다. 여기서는 자신의 페이지에 처리하는 코드를 추가하고 페이지 자체에서 처리를 한다.
이제 위 코드에서 게시글에서 설명한다고 한 부분을 설명하겠습니다.
<div class="input-group">
<label>ID</label>
<input type="text" name="username" value="<?php echo $username; ?>">
</div>
전체적으로 이 구조가 반복되고 있다.
div 태그는 lavel 과 input를 묶어주는 역할이다.
label 태그는 다음에 나오는 input 태그와 함께 쓰이며 앞의 글자를 누르면 다음에 나오는 양식을 선택하기 편하게 해주는 역할이다.
input 태그는 사용자가 무언가의 행동을 할 수 있는 어떤 것을 표시해 줍니다.
위의 코드에서는 type을 text로 했으니 텍스트 박스가 나오겠지요. value는 초깃값을 지정합니다.
(변수에는 나중에 sever.php에서 이용자가 저기에 작성된 내용을 담아 둘 것입니다.)
회원 가입 진행 도중 나중에 지정한 오류가 발생하면 가입이 중단되고 여기와 email 두 공간은 자동으로 작성됩니다.
type의 종류 : button, checkbox, color, date, datetime-local, email, file, hidden, image, month, number, password, radio, range, reset, search, submit, tel, text, time, url, week
server.php
<?php
session_start(); // 세션은 페이지 제일 처음에 작성을 해야 작동합니다.
// 변수를 초기화 합니다. 이 변수에 나중에 양식의 기본 값을 지정했었죠.
$username = "";
$email = "";
$errors = array(); // 이 errors라는 배열은 나중에 errors.php에서 사용됩니다.
// 데이터베이스에 접속합니다.
$db = mysqli_connect('localhost(도메인)', 'root(ID)', '비밀번호', 'DB이름');
// 회원가입
if (isset($_POST['reg_user'])) {// post값으로 전달된 ref_user값이 있는지 확인합니다
// 폼에서 입력 값을 받아옵니다
$username = mysqli_real_escape_string($db, $_POST['username']);
$email = mysqli_real_escape_string($db, $_POST['email']);
$password_1 = mysqli_real_escape_string($db, $_POST['password_1']);
$password_2 = mysqli_real_escape_string($db, $_POST['password_2']);
// mysqli_real_escape_string은 게시글에서 설명하겠습니다.
// 폼의 항목들이 모두 채워졌는지 확인합니다 ...
// 비워진 부분이 있다면 errors라는 배열에 추가를 합니다
if (empty($username)) { array_push($errors, "ID가 비어 있어요"); }
if (empty($email)) { array_push($errors, "Email이 비어 있어요"); }
if (empty($password_1)) { array_push($errors, "비밀번호가 비어 있어요"); }
if ($password_1 != $password_2) {
array_push($errors, "이런! 비밀번호가 일치하지 않네요");
}
// 데이터베이스를 활용하는 부분입니다 혹시 준비되지 않으신 분들은 준비해 주세요
$user_check_query = "SELECT * FROM users WHERE username='$username' OR email='$email' LIMIT 1";
// email과 ID가 중복되었는지 확인하는 sql문을 변수에 담아둡니다.
$result = mysqli_query($db, $user_check_query);
//실제 결과를 이제 변수에 담아두고요.
$user = mysqli_fetch_assoc($result); // 그 결과를 배열에 담습니다.
if ($user) { // if 만약 결과가 존재한다면
if ($user['username'] === $username) {
array_push($errors, "이런! 해당 ID는 이미 사용중이네요");
}
if ($user['email'] === $email) {
array_push($errors, "이런! 해당 이메일은 이미 사용중이네요");
}
}
// 에러가 없다면(errors배열이 비어 있다면) 가입이 진행됩니다
if (count($errors) == 0) {
$password = md5($password_1);// 입력한 비밀번호를 암호화 시킵니다.
// md5는 복호화가 힘들기 때문에 아래 게시글에 있는 링크를 참고하시면 나중에 활용하기 좋야요
$query = "INSERT INTO users (username, email, password)
VALUES('$username', '$email', '$password')";
//db에 넣는 쿼리문 적고요
mysqli_query($db, $query); //실행을 합니다
$_SESSION['username'] = $username; // 세션을 추가합니다.
$_SESSION['success'] = "당신은 로그인에 성공했어요
1";
header('location: index.php');// 그리고 index 페이지로 보내버립니다.
}
}
php의 끝을 알리는 괄호가 아직 나오지 않았습니다. 남은 부분은 로그인 구현 후 만들도록 하겠습니다.
mysqli_real_escape_string은 SQL 명령문에 사용되는 문자열에서 특수 문자를 회피하기 위해 사용되며 보안을 위해 사용됩니다.
db에서 결과 가져오는 것들에 대해서 정리가 잘 되어 있는 곳을 찾아서 링크 걸어드립니다.
http://cricri4289.blogspot.kr/2013/10/php-mysql-mysqli-mysqlifetchrow.html
PHP mysql mysqli 데이터베이스 mysqli_fetch_row() mysqli_fetch_assoc() mysqli_fetch_array() 함수 차이.
PHP mysql mysqli 데이터베이스 mysqli_fetch_row(), mysqli_fetch_assoc(), mysqli_fetch_array() 함수 차이.
cricri4289.blogspot.kr
비밀번호를 암호화해서 저장하는 이유는 혹시라도 데이터베이스에 접근하더라도 해커가 읽을 수 없게 하는 것이 목적입니다.
위에서 설명한 복호화까지 쉽게 할 수 있게 해준 암호화가 있어서 긁어왔습니다.
코딩하는 사람은 모르는 사람이 드물다고 하는 스택오버플로입니다.
https://stackoverflow.com/questions/15194663/encrypt-and-decrypt-md5
encrypt and decrypt md5
I am using code $enrypt=md5($pass) and inserting $encrypt to database.
I want to find out a way to decrypt them.
I tried using a decrypting software but it says the hash should be of exactly 16 by...
stackoverflow.com
error을 표시하는 기능을 이제 추가해 보도록 합시다.
errors.php
<?php if (count($errors) > 0) : ?>
// 만약 errors의 개수가 0을 초과한다면?
<div class="error">
<?php foreach ($errors as $error) : ?>//배열을 반복합니다
<p><?php echo $error ></p>//그 결과를 출력?
<?php endforeach ?>
</div>
<?php endif ?>
이 코드에서는 대체 문법이 사용되어 있네요.
대체 문법에 대해서 더 알고 싶으신 분은 아래 매뉴얼을 확인해주세요.
http://php.net/manual/kr/control-structures.alternative-syntax.php
PHP: 제어 구조의 대체 문법 - Manual
Change language: Edit Report a Bug
제어 구조의 대체 문법
PHP는 제어 구조를 위해 대체 문법을 제공한다;
즉 if , while , for , foreach , 그리고 switch .
각 경우에 대체 문법의 기본형태는 괄호열기를 콜른 (:)으로 대체하고
괄호닫기는 각각 endif; , endwhile; , endfor; , endforeach; ,
또는 endswitch; 으로 대체한다.
<?php if ( $a == 5 ): ?>
php.net
login.php
<?php include('server.php') ?>
<!DOCTYPE html>
<html>
<head>
<title>탭 이름</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="header">
<h2>Login</h2>
</div>
<form method="post" action="login.php">
<?php include('errors.php'); ?>
<div class="input-group">
<label>ID</label>
<input type="text" name="username" >
</div>
<div class="input-group">
<label>비밀번호</label>
<input type="password" name="password">
</div>
<div class="input-group">
<button type="submit" class="btn" name="login_user">로그인</button>
</div>
<p>
아직 멤버가 아닌가요? <a href="register.php">가입하기</a>
</p>
</form>
</body>
</html>
회원가입 페이지다
이제 로그인하는 부분까지 server.php에 추가하여 완벽하게 기능을 만들어봅시다.
server.php의 완성
<?php
session_start(); // 세션은 페이지 제일 처음에 작성을 해야 작동합니다.
// 변수를 초기화 합니다. 이 변수에 나중에 양식의 기본 값을 지정했었죠.
$username = "";
$email = "";
$errors = array(); // 이 errors라는 배열은 나중에 errors.php에서 사용됩니다.
// 데이터베이스에 접속합니다.
$db = mysqli_connect('localhost(도메인)', 'root(ID)', '비밀번호', 'DB이름');
// 회원가입
if (isset($_POST['reg_user'])) {// post값으로 전달된 ref_user값이 있는지 확인합니다
// 폼에서 입력 값을 받아옵니다
$username = mysqli_real_escape_string($db, $_POST['username']);
$email = mysqli_real_escape_string($db, $_POST['email']);
$password_1 = mysqli_real_escape_string($db, $_POST['password_1']);
$password_2 = mysqli_real_escape_string($db, $_POST['password_2']);
// mysqli_real_escape_string은 게시글에서 설명하겠습니다.
// 폼의 항목들이 모두 채워졌는지 확인합니다 ...
// 비워진 부분이 있다면 errors라는 배열에 추가를 합니다
if (empty($username)) { array_push($errors, "ID가 비어 있어요"); }
if (empty($email)) { array_push($errors, "Email이 비어 있어요"); }
if (empty($password_1)) { array_push($errors, "비밀번호가 비어 있어요"); }
if ($password_1 != $password_2) {
array_push($errors, "이런! 비밀번호가 일치하지 않네요");
}
// 데이터베이스를 활용하는 부분입니다 혹시 준비되지 않으신 분들은 준비해 주세요
$user_check_query = "SELECT * FROM users WHERE username='$username' OR email='$email' LIMIT 1";
// email과 ID가 중복되었는지 확인하는 sql문을 변수에 담아둡니다.
$result = mysqli_query($db, $user_check_query);
//실제 결과를 이제 변수에 담아두고요.
$user = mysqli_fetch_assoc($result); // 그 결과를 배열에 담습니다.
if ($user) { // if 만약 결과가 존재한다면
if ($user['username'] === $username) {
array_push($errors, "이런! 해당 ID는 이미 사용중이네요");
}
if ($user['email'] === $email) {
array_push($errors, "이런! 해당 이메일은 이미 사용중이네요");
}
}
// 에러가 없다면(errors배열이 비어 있다면) 가입이 진행됩니다
if (count($errors) == 0) {
$password = md5($password_1);// 입력한 비밀번호를 암호화 시킵니다.
// md5는 복호화가 힘들기 때문에 아래 게시글에 있는 링크를 참고하시면 나중에 활용하기 좋야요
$query = "INSERT INTO users (username, email, password)
VALUES('$username', '$email', '$password')";
//db에 넣는 쿼리문 적고요
mysqli_query($db, $query); //실행을 합니다
$_SESSION['username'] = $username; // 세션을 추가합니다.
header('location: index.php');// 그리고 index 페이지로 보내버립니다.
}
}
// 로그인
if (isset($_POST['login_user'])) {// post방식으로 넘어온 login_user값이 있는지 확인
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password']);
//위에서 설명 했구요.
if (empty($username)) {
array_push($errors, "ID가 비어있네요?");
}
if (empty($password)) {
array_push($errors, "비밀번호가 비어 있잖아!!!");
}
if (count($errors) == 0) {//에러가 없다면
$password = md5($password);//비밀번호 암호화해서 변수에 담아주고요
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
//id와 비번을 넣고 체크해주는 쿼리
$results = mysqli_query($db, $query);//실행하구요
if (mysqli_num_rows($results) == 1) {//값이 하나면요
$_SESSION['username'] = $username;//세션을 만들어줍니다
header('location: index.php');//그리고 index페이지로 보내줍니다
}else {
array_push($errors, "로그인 실패! 틀린 id나 비밀번호 입력했음.");
}
}
}
?>
이제 원하는 대로 로그인 정보를 가공해서 로그인 안내를 하시면 됩니다.
아래는 예시입니다. 역시 원문의 글을 대충 한국어로 옮겼습니다.
index.php
<?php
session_start(); // 세션 실행
if (!isset($_SESSION['username'])) {//세션이 없다면
$_SESSION['msg'] = "일단 로그인부터!";
header('location: login.php');// 로그인창으로 보내버립니다.
}
if (isset($_GET['logout'])) {//get으로 넘어온 logout값이 있는지 확인
session_destroy();//그러면 지워주고
unset($_SESSION['username']);//변수 파!괴!
header("location: login.php");//로그인 화면으로 보내줍시다 저는 친절하니까요
}
?>
<!DOCTYPE html>
<html>
<head>
<title>탭 이름</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="header">
<h2>메인 페이지라는 알림</h2>
</div>
<div class="content">
<?php if (isset($_SESSION['success'])) : ?>
<div class="error success" >
<h3>
<?php
echo $_SESSION['success'];
unset($_SESSION['success']);
?>
</h3>
</div>
<?php endif ?>
<!-- 로그인 유저의 정보 -->
<?php if (isset($_SESSION['username'])) : ?>
<p>반갑습니다, <strong><?php echo $_SESSION['username']; ?></strong></p>
<p> <a href="index.php?logout='1'" style="color: red;">로그아웃</a> </p>
<?php endif ?>
</div>
</body>
</html>
이렇게 대충 코드를 분석해 보았습니다. 오타와 잘못된 정보는 댓글로 남겨주시기 바랍니다.
뒤가 조금 막장이 되어 버리긴 했지만 아무튼 원문의 코드를 대충 알아보기 편하게 한글로 바꾼 것 말고는 창작이 없습니다.
제가 잘 아는 사람이 아닌지라 정보가 없어서 일단 이렇게... 이상하게 분석을 했습니다...
머 이해해 주실 거라 믿습니다.
php mysql 로그인
<?php
session_start();
ob_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>activeplayer login result</title>
<meta charset = "utf-8" />
</head>
<body>
<?php
if(isset($_SESSION['id'])){
exit('<a href= "javascript_:history.go(-1)">세션을 통해 로그인 정보를 확인하였습니다.</a></body></html>');
}
if(empty($_POST['email']) || empty($_POST['pass'])){
exit('<a href= "javascript_:history.go(-1)">로그인 폼을 채워주세요.</a></body></html>');
}
$dbc = mysqli_connect('127.0.0.1', 'root', 'apmsetup', 'doosan')
or die("Error Connecting to MySQL server.");
$email = mysqli_real_escape_string($dbc, trim($_POST['email']));
$pass = mysqli_real_escape_string($dbc, trim($_POST['pass']));
$query = "select id, email from user where email = '$email' and password = SHA('$pass')";
mysqli_query($dbc, 'set names utf8');
$result = mysqli_query($dbc, $query)
or die('Error Querying databases.');
if( mysqli_num_rows($result) == 1){
$row = mysqli_fetch_assoc($result);
$userid = $row['id'];
$_SESSION['id'] = $userid;
setcookie('id' , $row['id'], time() + (60*60*24));
setcookie('email' , $row['email'], time() + (60*60*24));
echo "$email". "님이 로그인에 성공했습니다.<br/><br/><a href = '/main.html'>홈으로</a>";
}
else {
echo "로그인에 실패했습니다.<br/><br/><a href = '/main.html'>홈으로</a>";
}
mysqli_free_result($result);
?>
</body>
</html>
mysqli_num_rows($result) == 1 이 문제인 것 같아요
로그인에 실패했다고 자꾸 뜨는데 아무리 봐도 코드에는 문제가 없는 것 같아요..ㅠㅠ
mysql 콘솔에 select * from user; 치면 id email pass 잘 나오는데 왜 이러는지 모르겠네요
mysqli_num_rows($result) == 0 이렇게 바꾸면 회원가입 상관없이 어떤 걸 넣어도 로그인은 된다고 떠요
도대체 뭐가 문제인거죠?ㅠㅠ
안녕하세요 ㅎ
혹시 $query = "select id, email from user where email = '$email' and password = SHA('$pass')";
이렇게 되있는데 이 쿼리는 했을때
결과 값이 1개 이상이 나오는거 아닐까요?
echo mysqli_num_rows($result); 이렇게 해서 결과 값을 한번 출력해 보세요
위에 문법으로는 무조건 1일 때 로그인 이니깐 2개 나오면 .. 로그인 실패 겠네요..
아니면 where 절에 email = '$email' 이것을 id 로 해야되는거 아니지 모르겠네요 ㅎㅎ
마무튼 위에 방법으로 디버깅을 해보시는게 좋을 것 같습니다.
php mysql 로그인 연동
php mysql 로그인 연동
<?
session_start();
$user_id = $_REQUEST['user_id'];
$pw = $_REQUEST['pw'];
$db= mysql_connect('localhost','root','autoset');
if( !$db){
echo "데이터 베이스 접속 오류<br>";
exit(1);
}
mysql_query("set names utf8");
mysql_select_db('dbere');
$sql= "select * from jjp_member where user_id='{$user_id}' and pw=pw('{$pw}');";
$res = mysql_query($sql);
if( mysql_num_rows($res) < 1)
{
echo "<script>alert('아이디 또는 비밀번호가 올바르지 않습니다.');";
echo "history.go(-1);</script>";
exit(1);
}
$row = mysql_fetch_array($res);
$_SESSION['user_id'] = $user_id;
$_SESSION['name'] = $row['name'];
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<?=$row['name']?>님 환영합니다.<br><br>
<a href="main.html">페이지 이동</a>
</body>
</html>
MYSQL 로그인 처리 문제
<?php
$conn_DB = mysqli_connect('localhost','id','password','dbname');
if ( !$conn_DB ) {
die( "MYSQL SERVER ERROR : ".mysqli_error() );
}
$ret = mysqli_select_db('dbname',$conn_DB);
if( !ret ){
die('MYSQL TABLE ERROR :'.mysqli_error());
}
session_start();
$id = $_POST[user_id];
$pw = $_POST[user_pw];
$sql = "SELECT * FROM user WHERE user_id = '{$id}' and user_pw = md5('{$pw}')";
$resource = mysqli_query($conn_DB, $sql);
$num = mysqli_num_rows( $resource );
$assoc= mysqli_fetch_assoc($resource);
if( $num > 0 ){
$sql = "SELECT * FROM session WHERE user_id = '{$id}'";
$resource = mysqli_query($conn_DB, $sql);
$num = mysqli_num_rows( $resource );
if ( $num > 0 ){
echo "<script> alert('이미 로그인 처리된 계정입니다. ');</script>";
}else{
$sess_id = session_id();
$sql = "INSERT INTO session VALUE( $row[no], '$id','$sess_id')";
$ret = mysqli_query( $sql );
$_SESSION[user_id] = $id;
$_SESSION[is_login] = 1;
// # 로그인 환영 메시지 출력
echo "<script> alert('로그인이 완료되었습니다.');</script>";
}
}else{
echo "<script> alert('아이디 또는 패스워드가 올바르지 않습니다');</script>";
}
?>
<meta http-equiv='refresh'content="0;url='http://192.168.0.1/login'">
<?php
session_start();
$mid=$_POST["mid"];
$mpw=$_POST["mpw"];
//연동
$conn=mysql_connect("localhost","ka456","aas900863");
$db_conn=mysql_select_db("ka456",$conn);
//아이디나 비밀번호 미입력시
if(!$mid || !$mpw)Error('아이디나 비밀번호를 입력해주세요.');
//db쿼리 가져오기
$sql="select * from member where mid='".$mid."'";
$result=mysql_query($sql,$conn);
$num_match=mysql_num_rows($result);
if(!$num_match)
{
echo("<script>
window.alert('등록되지 않은 아이디입니다.')
</script>
");}
else{
$row=mysql_fetch_array($result);
$db_pw=$row["mpw"];
if($mpw != $db_pw){
echo("<script>
window.alert('비밀번호가 틀립니다.')
</script>");
exit;
}
else{
$userid=$row['mid'];
$username=$row['mname'];
// session_register(userid);
// session_register(username);
// php 이전버전에는 사용되지 않음
$_SESSION["userid"] = $userid;
$_SESSION["username"] = $username;
echo("<script>
<a href='TenTen.html'></a></script>
");
}
}
?>
로그인 관련 페이지는 약 3개정도입니다.
index.php 로그인폼 존재 (login.php파일을 index.php에서 include 했음)
login.php 로그인폼 (현재 로그인폼만존재하며 php언어는 하나도 사용 안되어있음)
login_ok.php 로그인처리 (DB에서 비교해서 처리)
index.php에서 로그인하면 login_ok.php에서 처리하여 index.php로 다시 되돌아 오고 싶습니다.
로그인폼이있던곳엔 @@@님 환영합니다. 라는 문구가 있고싶구요.
login.php 및 login_ok.php 에 추가해야 될것좀 알려주세요
DB 구조는 Login 테이블에 ID와 PWD 열 있습니다. 이 두개와 비교합니다.
login.php
<form action="login_ok.php" method="post">
<input type="text" name="userID" /><br />
<input type="text" name="userPW" /><br />
<input type="submit" value="login" />
<input type="hidden" name="action" value="login" />
</form>
login_ok.php
<?
if(!$_POST['login']) {
echo "
<script>
alert('sorry');
history.back(-1);
</script>
";
exit;
} else {
$que = "select * from 회원테이블명 where 아이디칼럼명 = '$_POST[userID]' and 패스워드칼럼명 = '$_POST[userPW]'";
$res = mysql_query($que);
$row = mysql_fetch_array($res);
if($row) {
$_SESSION['userID'] = $_POST['userID'];
echo "
<script>
location.href="~~~index.php";
</script>
";
} else {
echo "
<script>
alert('id랑 pw 확인');
history.back(-1);
</script>
";
exit;
}
?>
index.php(login.php 파일 인클루드 하셨다 했으니)
<?
session_start();
$que = "select * from 회원테이블명 where 아이디 = '$_SESSION[userID]'";
$res = mysql_query($que);
$row = mysql_fetch_array($res);
if($_SESSION) {
echo "$row[아이디칼럼명] 님 환영~";
} else {
include "login.php";
}
?>
php를 이용해서 간단히 로그인기능을 할려구 하는데요;;
파일은 login.php와 outlogin.php가 있습니다.
outlogin.php에는 로그인했을때는 이용자정보 안했을경우에는 아웃로그인이 보이게하구싶구요.
login.php에는 outlogin.php에서 로그인버튼을 눌렀을때 처리해서 outlogin.php로 다시 보내어
로그인된 상태로 바꾸게 하고싶은데요.. 간단한 예제좀 만들어주세요 ;;
위에방식은 제로보드가 저런방식같더라구요..
outlogin.php에서 로긴이 됫다면, 로긴된상태창을 뿌리고, 안됫다면, 로그인입력폼을 뿌리게합니다,,
로그인전송을 누르면 login.php에서 몇몇검사후 처리를 진행하고 다시 outlogin.php로 이동을 하게됩니다,,
//outlogin.php
<?
session_start(); // 세션시작입니다. 항상젤위에 있어야합니다,,
?>
<form method='POST' action='./login.php'>
<?
if($_SESSION['userID']=="") {
echo "<input name='id'> <br>";
echo "<input type='password' name='pwd'> <br>";
echo "<input type='submit' value='로그인'>";
}
else {
$userID = $_SESSION['userID'];
$userName = $_SESSION['userName'];
echo "대략 $userID 접속중이고 $userName님 반갑습니다 뿌려주시구요";
}
?>
</form>
// login.php
<?
session_start(); // 역시 젤위
$id = $_POST['id'];
$pwd = $_POST['pwd'];
$sql; // 이 부분은 select문 하셔서 DB의 이름과 비번을 뽑으세요. where조건은 $id와 일치할때로하시구요,,
// 예를들어,,>> "select userPwd, userName from member where userID = '$id'";
$que = mysql_query($sql);
$arr = mysql_fetch_array($que);
$row = mysql_num_rows($que);
if(!$id || !$pwd) {
echo "<script>
alert('아이디와 비밀번호를 올바르게 입력하세요');
history.back();
<script>";
}
if(!$row) {
echo "<script>
alert('등록된 사용자가 없습니다');
history.back();
</script>";
}
else {
$DB_pwd=$arr[0]; // 여기선 $arr[0]이 DB의 사용자pwd입니다.
if($Userpwd == $db_pwd)
{
$_SESSION['userID']=$userID;
$_SESSION['userName']=$arr[1]; // $arr[1]은 DB의 사용자name.
echo "<script>location.replace('./outlogin.php');</script>";
}
else
{
echo "<script>
alert('비밀번호가 틀렸습니다.');
history.back();
</script>";
}
}
?>
<?
$connect=mysql_connect("localhost","DBID","DBPASS");
if (!$connect)
{
die('Could not connect: ' . mysql_error());
}
else {
mysql_select_db ("DBNAME", $connect);
$member_id = $_POST['login_id'];
$member_pw = $_POST['login_pw'];
echo "ID : ".$member_id."<br>";
echo "PW : ".$member_pw."<br>";
$check_login='select user_id from zetyx_member_table where user_id="'.$_POST['login_id'].'"';
$query_name='SELECT name FROM zetyx_member_table WHERE user_id = "'.$member_id.'"';
if(mysql_num_rows(mysql_query($check_login)) == 1) { // 여기 문법이 틀렸습니다. 그외는 문법틀린 부분이 없습니다.
$loginname = mysql_result(mysql_query($query_name));
echo "당신의 이름은 ".$loginname." 입니다.";
}
else {
echo "<script>alert('로그인에 실패하여습니다.');location.href='inc/login.php';</script>";
}
}
?>
php mysql_fetch_array mysql_fetch_row
<?
$connect = mysql_connect("localhost", "root", "apmsetup");
mysql_select_db("oh",$connect);
$qry_result = mysql_query("select * from user_info where id='{$_POST[id]}'",$connect);
$row1 = mysql_result($qry_result,0,"id");
$row2 = mysql_result($qry_result,0,"password");
if($row1!=$_POST['id']) {
echo "
<script>
window.alert('ID를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row2!=$_POST['pw']) {
echo "
<script>
window.alert('pw를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row1 == $_POST['id'] && $row2==$_POST['pw']) {
echo "입력 id : ".$_POST['id']."<br>";
echo "입력 password : ".$_POST['pw']."<br>";
echo "로그인 성공<br>";
echo "로그인시간 : ";
echo date("Y년 m월 d일 h시 i분 s초");
echo "<br><br>";
}
mysql_close();
?>
<a href="log_in.html"><input type="button" value="로그아웃" name="logout"></a>
이소스를
하나는mysql_fetch_array함수로 하나는mysql_fetch_row함수로바꿔주세요~~
1. mysql_fetch_array
<?
$connect = mysql_connect("localhost", "root", "apmsetup");
$db_con = mysql_select_db("oh",$connect);
$qry_result = mysql_query("select * from user_info where id='{$_POST[id]}'",$connect);
$row = mysql_fetch_array($qry_result);
$row1 = $row['id'];
$row2 = $row['password'];
if($row1!=$_POST['id']) {
echo "
<script>
window.alert('ID를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row2!=$_POST['pw']) {
echo "
<script>
window.alert('pw를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row1 == $_POST['id'] && $row2==$_POST['pw'])
{
echo "입력 id : ".$_POST['id']."<br>";
echo "입력 password : ".$_POST['pw']."<br>";
echo "로그인 성공<br>";
$today = getdate();
echo "로그인 시간: ".$today[year]."년 ".$today[mon]."월 ".$today[mday]."일 ". $today[hours]."시 ".
$today[minutes]."분 ".$today[seconds]."초 <br>";
}
mysql_close();
?>
<br><a href="log_in.html"><input type="button" value="로그아웃" name="logout"></a>
2. mysql_fetch_row
<?
$connect = mysql_connect("localhost", "root", "apmsetup");
$db_con = mysql_select_db("oh",$connect);
$qry_result = mysql_query("select * from user_info where id='{$_POST[id]}'",$connect);
$row = mysql_fetch_row($qry_result);
$row1 = $row[0]; // id 칼럼명 첫번째가 일경우 $row[0], 두번째일경우 $row[1],
$row2 = $row[1]; // 세번째일경우 $row[2], ....
if($row1!=$_POST['id']) {
echo "
<script>
window.alert('ID를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row2!=$_POST['pw']) {
echo "
<script>
window.alert('pw를 확인하세요.');
history.go(-1);
</script> ";
exit;
}
if($row1 == $_POST['id'] && $row2==$_POST['pw'])
{
echo "입력 id : ".$_POST['id']."<br>";
echo "입력 password : ".$_POST['pw']."<br>";
echo "로그인 성공<br>";
$today = getdate();
echo "로그인 시간: ".$today[year]."년 ".$today[mon]."월 ".$today[mday]."일 ". $today[hours]."시 ".
$today[minutes]."분 ".$today[seconds]."초 <br>";
}
mysql_close();
?>
<br><a href="log_in.html"><input type="button" value="로그아웃" name="logout"></a>
php mysql DB연동 관련 질문요~~~
로그인 프로그램인데여 DB에 mydb라는 테이블은 분명히 비어있는데 아디랑 비번을 입력하고 로그인을 하면 해당아이디가 없다고 메시지가 나와야 하는데 자꾸 있다고 나오네여 ㅠ
소스는
htm 로그인에서 아디랑 비번을 입력받는 파일이구요.
<HTML>
<HEAD>
<TITLE> 문제은행 로그인 </TITLE>
<script language="JavaScript">
function check() {
if (myform.id.value== "") {
alert("아이디를 입력하세요.");
myform.id.focus();
}
else if (myform.pwd.value== "")
{
alert("비밀번호를 입력하세요.");
myform.pwd.focus();
}
else
{
myform.submit();
}
}
</script>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
회원 로그인
<form name="myform" method="POST" action="./login.php">
아 이 디 : <input type="text" name="id" maxlength="10"><br>
비밀번호 : <input type="password" name="pwd" maxlength="10"><br>
<input type="button" value="로그인" onclick="check()">
<a href="./infor.htm">회원가입</a><br>
</form>
</BODY>
</HTML>
이거는
위 파일에서 submit되어져 php로 넘겨지는 파일입니다.
밑에 보시면 if (!$rs) select 문에서 조건에 맞지않으면 즉 아이디랑 비번이 같은것이 없다면
분명히 echo "해당 아이디가 존재하지 않습니다.<br>"; 라는 문장이 나와야 한다
<?
include 'dbconn.php';
$id = $_POST['id'];
$pwd = $_POST['pwd'];
$sql = "select id, pwd from member ";
$sql .= "where id = '".$id ."'";
$query = mysql_query($sql);
$res = mysql_fetch_array($query);
$rs_num = mysql_affected_rows(); //<--최근 MySQL 작업으로 처리된 행(row) 개수를 얻음.
if($rs_num>0) { //<--행 수가 0보다 크다면..다시 말해 아이디가 있다면
echo $res['id'];
echo "님이 로그인 되었습니다.";
} else {
echo "해당 아이디가 존재하지 않습니다.<br>";
echo '<a href="./infor.htm">회원가입하기</a>';
echo ' <a href="./main.htm">로그인</a>';
}
else {
$line = mysql_fetch_array($rs);
echo $line['id'];
echo "님이 로그인 되었습니다.";
}
?>
include 되어지는 dbconn.php 파일 소스입니다.
<?
$host = "localhost";
$user = "root";
$pwd = "apmsetup";
//연결
$conn = mysql_connect($host, $user, $pwd);
//연결확인
if($conn){
//사용할 데이터베이스 선택
if (mysql_select_db('mydb',$conn)){
}
else {
echo '<br>선택한 데이터베이스에 연결할 수 없음';
}
}
else{
echo 'MySQL 연결 실패 - 강제 종료';
die("PHP 프로그램 종료");
}
?>
<?
include 'dbconn.php';
$id = $_POST['id'];
$pwd = $_POST['pwd'];
$rs = mysql_query("select * from member where id = '$id'");
$count = mysql_num_rows($rs); // 입력한 아이디 값 개수
$line = mysql_fetch_array($rs); // 값 출력문
if ($count == '0') { // 조건에 맞는 개수가 0 이면 echo문 출력
echo "해당 아이디가 존재하지 않습니다.<br>";
echo '<a href="./infor.htm">회원가입하기</a>';
echo ' <a href="./main.htm">로그인</a>';
} else { // 아니면
if($pwd != $line[pwd]){ // 비밀번호 불일치
echo"비밀번호가 일치하지 않습니다.";
}else{ // 비밀번호 일치
echo $line['id'];
echo "님이 로그인 되었습니다.";
}
?>
[PHP] mysql_query
PHP에서 DB 연결해 오고 있습니다.
여러군데에서 DB를 연결해서 쓰고 있는데, 다른 페이지에서는 쿼리전송도 잘 되고, 출력도 잘 됩니다.
그런데 이 페이지에서만 안됩니다-_ㅠ
똑같은 쿼리문을 mysql에서 실행해 보았을 때는 값이 잘 나옵니다.
왜 그러는지 좀 알려주세요!
아! 쿠키에 저장된 sql문은
select * from member where city = '$_COOKIE[firstC]'
입니다.
=================================================================
<script type="text/javascript">
function setInfo(){
alert("setInfo");
<?
//DB연결
$dbcon=mysql_connect("localhost", "root", "simple2402");
mysql_select_db("simple",$dbcon);
$sql = $_COOKIE[sql];
echo "alert('$sql');";
mysql_query("SET NAMES utf8");
//여기까지는 모두 됩니다.
//아래에 있는 $result가 false가 됩니다-_ㅠ
$result=mysql_query($sql,$dbcon);
echo "alert('$result');";
if($result){
$cnt = 1;
echo "alert('if OK!');";
while ($row = mysql_fetch_array($result)) {// 기록수만큼 순환
$clubname = $row['clubname'];
$memnum = $row['membernum'];
$part1 = $row['part1'];
$part2 = $row['part2'];
$univ = $row['univ'];
$clubaddr = $row[city].$row[gu].$row[dong].$row[subaddr];
//동아리 주소 좌표 찾기
$wrapper_url = "http://maps.naver.com/api/geocode.php?key=17064011ee914364c9584d9f5182ecfb&query=".$clubaddr;
$content = file_get_contents($wrapper_url);
$url = HtmlSpecialChars($content);
$del = substr($url, 68);
$htmlchange = html_entity_decode($del);
$codechange = utf8_encode($htmlchange);
$xml = simplexml_load_string($codechange);
$x = $xml->item->point->x;
$point_x = HtmlSpecialChars($x);
$y = $xml->item->point->y;
$point_y = HtmlSpecialChars($y);
echo "initMarker(new NPoint($point_x, $point_y), $cnt, new Array('$clubname', '$memnum', '$part1', '$part2', '$univ'));\n";
$cnt = $cnt + 1;
}
}
?>
}
</script>
지식인채택
<script type="text/javascript">
<?
//DB연결
$dbcon=mysql_connect("localhost", "root", "simple2402");
mysql_select_db("simple",$dbcon);
$sql = $_COOKIE[sql];
echo "alert('$sql');";
mysql_query("SET NAMES utf8");
//여기까지는 모두 됩니다.
//아래에 있는 $result가 false가 됩니다-_ㅠ
$result=mysql_query($sql,$dbcon);
?>
function setInfo(){
alert("setInfo");
"alert('<?=$result?>');";
<?
if($result){
$cnt = 1;
echo "alert('if OK!');";
while ($row = mysql_fetch_array($result)) {// 기록수만큼 순환
$clubname = $row['clubname'];
$memnum = $row['membernum'];
$part1 = $row['part1'];
$part2 = $row['part2'];
$univ = $row['univ'];
$clubaddr = $row[city].$row[gu].$row[dong].$row[subaddr];
//동아리 주소 좌표 찾기
$wrapper_url = "http://maps.naver.com/api/geocode.php?key=17064011ee914364c9584d9f5182ecfb&query=".$clubaddr;
$content = file_get_contents($wrapper_url);
$url = HtmlSpecialChars($content);
$del = substr($url, 68);
$htmlchange = html_entity_decode($del);
$codechange = utf8_encode($htmlchange);
$xml = simplexml_load_string($codechange);
$x = $xml->item->point->x;
$point_x = HtmlSpecialChars($x);
$y = $xml->item->point->y;
$point_y = HtmlSpecialChars($y);
echo "initMarker(new NPoint($point_x, $point_y), $cnt, new Array('$clubname', '$memnum', '$part1', '$part2', '$univ'));\n";
$cnt = $cnt + 1;
}
}
?>
}
</script>
//이렇게 해보시고 쪽지주세요
동일한 소스로 다른 페이지에서는 잘 되나 현재 페이지에서만 결과값이 나오지 않는 것도 이해하기 쉽지 않군요 ^^;
우선 결과 값이 나오지 않는다면
$result=mysql_query($sql,$dbcon);
echo "alert('$result');";
1. 번째 원인이 될 수 있는 부분 ...
if($result){ } <== $result 가 false 면 더이상 진행하지 않겠죠
echo $result ; <== 이렇게 echo 찍는 건 무의미 한 것 같구요
$result=mysql_query($sql,$dbcon) or die(mysql_error()); 로 수정해 보시면, 쿼리문 어디서 에러가 났는지 알려줍니다.
2. 번째 원인이 될 수 있는 부분 ...
select * from member where city = '$_COOKIE[firstC]'; <= $_COOKIE[firstC] 의 값이 없을 경우 ...
select * from member where city = ''; <== 쿼리가 이렇게 날라가기 때문에, 아무 것도 나오지 않겠죠
이때도 if($result) { } 는 false 가 아니기 때문에 while 문을 수행합니다만, $result 의 결과 값이 없기 때문에, 나오지 않습니다.
3. 번째 원인이 될 수 있는 부분 ...
쿠키는 도메인에 영향을 받습니다.
a.co.kr과 www.a.co.kr 은 다른 도메인으로 인식을 합니다.
최초 로그인을 a.co.kr 로 하다가, 메뉴 링크를 클릭하면서 www.a.co.kr 로 넘어간다면, 쿠키는 다른 도메인으로 인식해서 $_COOKIE[firstC] 값을 넘겨주지 않습니다.
동일한 소스로 다른 페이지에서는 잘 나오는 값이 현재 페이지에서만 값이 나오지 않는다면,
위의 3가지 정도 생각할 수 있을 것 같습니다.
php 로그인창 튕김 ㅜㅜ
db연동까지 되었습니다 ㅠㅠ 근데 로그인만 누르면 그냥 아무일도 없었던것처럼 됩니다.. .디비에 보면 내용은 다 있는데 왜이러나요..ㅜㅜ 참고로 이 php 이름은 left.php입니다 ..ㅜ
<?php
session_start();
#----------------로그인 되었는지를 비교-----------------------#
if (session_is_registered('shop_logon'))
{
#--------로그인된 회원중에서 로그아웃을 선택-------#
if ($logout == "ok")
{
#--------세션 해제-------#
session_unregister('shop_logon');
session_unregister('cart');
echo ("
<script>
parent.location.reload(true);
</script>
");
}
#--------로그인된 회원인 경우에 실행-------#
else
{
echo ("
<HTML>
<head>
");
include("./style.php");
echo ("
</head>
<body>
<br><br><font><font color='blue'><b>$shop_logon[1]</b></font>님을 환영합니다.</font>
<br><br><a href='./left.php?logout=ok'>로그아웃</a>
</body>
</HTML>
");
}
exit;
}
#----------------아이디와 패스워드 입력확인--------------------#
else if (($_POST['mem_id'] == "") || ($_POST['mem_pass'] == ""))
{
echo ("
<html>
<head><title>헝기's Mart</title></head>
<body>
<a href='http://127.0.0.1/main.html'><p align=center><img src='title1.png' width='600' height='200'></p></a>
<marquee><img src='스크롤.gif' width='300' height='50'></marquee>
<hr size='1' width='100%'>
<TABLE BORDER='0' align='center'><br>
<form name='login' method='post' action='./left.php'>
<table border='0' width='150' cellpadding='1' cellspacing='1'>
<TABLE BORDER='0' align='center'>
<tr>
<td width='90' valign='middle' align='left' bgcolor=#B2CCFF>
아이디
</td>
<td width='90'>
<input type='text' name='mem_id' size='8'>
</td>
</tr>
<TABLE BORDER='0' align='center'>
<tr>
<td width='90' valign='middle' align='left' bgcolor=#B2CCFF>
비밀번호
</td>
<td width='90'>
<input type='password' name='mem_pass' size='8'>
</td>
</tr>
<TABLE BORDER='0' align='center'>
<tr>
<td width='175' colspan='2' align='left' bgcolor=#B2CCFF>
<font size='2'><a href='./new_member.php' target='right'>가입하기</a></font>
<input type='submit' value='로그인' style='font-family: 굴림; font-size: 9pt; width:70px; height:23px'>
</td>
</td>
</tr>
</td>
</table>
</form>
</BODY>
</HTML>
");
}
#----------------회원 로그인 확인-------------------#
else
{
$conn = mysql_connect('localhost', 'root', 'apmsetup');
$db_status = mysql_select_db('shoppingmall');
if (!$db_status)
{
echo("
<script>
window.alert('Database ERROR');
history.go(-1);
</script>
");
exit;
}
#----------------DB에 등록된 회원인지를 확인------------------#
$query = "select mem_id, mem_name from member_tab where (mem_id = '" . $_POST['mem_id'] . "') and (mem_password = '" . $_POST['mem_pass'] ."')";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
if ($row[0] == "")
{
echo("
<script>
window.alert('아이디와 비밀번호를 확인해 주세요');
history.go(-1);
</script>
");
exit;
}
else
{
#-----------세션이 설정되지 않았으면 설정함----------------#
if (!session_is_registered('shop_logon')) {
session_register('shop_logon');
$shop_logon = array($row[0], $row[1]);
}
echo ("
<script>
parent.location.reload(true);
</script>
");
}
}
?>
php 세션에 대해서 질문 드릴께요
제가 지금 홈페이지를 만들고 있는데..
회원으로 로그인하고 아이디랑 비밀번호 대조해 보고 맞으면 다음과 같이 상위 메뉴가 나오게 할꺼거든요
근데 문제는 세션값이 다음으로 안넘어 가진다는거죠;;
질문은.. 세션값을 다른 페이지로 넘길려면 어떻게 해야 하나요??
세션이라는게 페이지가 넘어가면 사라지는건가요?? 아님 제가 밑에 소스를 잘못 짰나요??
첨부 이미지첨부 이미지
첨부 이미지
---------------로그인 처리하는 php이고--------------------------
login_engine.php
<? include_once("../lib/session.php"); include_once("../lib/dbcon.php");
$sql = "select * from nbjoin where M_id='$M_id'"; $res = mysql_query($sql); if ($res) $rs = mysql_fetch_array($res);
if ($rs[M_id]==$M_id && $M_id!="") {//아이디 일치 if ($rs[M_pwd]==$M_pwd) {//암호 일치 $session_M_id = $rs[M_id];//인증완료 echo " <script> location.replace('login_success.php'); </script> "; } else {//암호오류 echo " <script> alert('[인증실패] 암호가 올바르지 않습니다.'); location.replace('ajoin.php'); </script> "; } } else {//아이디 오류 echo " <script> alert('[인증실패] 아이디가 올바르지 않습니다.'); location.replace('ajoin.php'); </script> "; } ?>
----------------------------로그인 처리후에 top2로 넘기는 파일--------------
login_success.php
<? include_once("../lib/session.php"); include_once("../lib/dbcon.php");
$sql = "select * from nbjoin where M_id='$session_M_id'"; $res = mysql_query($sql); if ($res) $rs = mysql_fetch_array($res);
if ($session_M_id=="" || $rs[M_id]=="") { $session_M_id==""; echo " <script> location.replace('Ajoin.php'); </script> "; die; } ?> <script language="javascript"> top.parent.location.href="../top2.php"; </script>
---------------------새로운 top2.php 파일 --------------------
<? include_once("../lib/session.php"); include_once("../lib/dbcon.php");
if ($session_M_id=="") { echo " <script> alert('[회원전용] 로그인 후 사용하십시오.'); location.replace('../nbjoin/ajoin.php'); </script> "; die; } ?> <? echo $rs[M_name];?><? echo $rs[M_id];?>
Ξ PHP
내 프로필 이미지
닉네임kos7**** 작성일2008.06.11. 댓글1 나도 궁금해요
더보기
답변3개 정렬 옵션
채택순
필터 옵션
전체보기
보기 옵션
최적원문
1번째 답변
루나님 프로필 이미지
루나 님 답변 친구
영웅채택답변수 263PHP16위, 윈도우
질문자채택
세션의 사용법이 틀리신거 같구요
또하나는 스크린샷에 나온 오류에 초점을 두셔야 할거 같습니다..
../lib/dbconn.php 랑 ../lib/session.php 가 존재하는지 확인해보세요
해당 경로에 위 파일이 없어서 나오는 오류이군요..
그리고 세션에 대한 잘못된 사용법이 있는데
$session_M_id 로 받으시려 하셨다는거네요..
물론 session.php 나 dbconn.php 안에 위 변수를 받아들여서 세션으로 생성시키고 반환해주는게 있다면
될수도 있겠습니다만 그것은 위 파일에 대한 소스내용을 모르니 확답드릴순 없구요
세션사용방법은
$session_M_id = "값";
session_register("session_M_id");
로 생성하실수 있으며 세션변수를 사용하셔야 할경우에는 $_SESSION["변수명"]; 으로 호출해서
사용할수 있습니다..
위 예제로 본다면 $_SESSION["session_M_id"] 가 되겠네요
세션에 대한 자세한 내용은 제가 집필해둔 오픈백과를 보시기 바랍니다..^^
참고: 세션을 생성하고 호출하기 위해서는 무엇보다 맨 먼저 session_start(); 를 사용하여 시작을
알리셔야 하며 이 함수는 어떤 해더보다 앞에 와야 합니다..
즉, 이 함수를 사용하기 전에 어떤 내용도 먼저 페이지에 출력되선 안됩니다...
출처직접서술
2008.06.11.
좋아요 좋아요 평가하기1 사용자 표시1
더보기
2번째 답변
ch2s****님 프로필 이미지
ch2s**** 님 답변 친구
고수채택답변수 106사람과 그룹, 자바스크립트, PHP
안녕하세요 이미 해결을 하셨는지 모르겠네요...^^
세션과 쿠키의 개념은 아실테고.....
일단은 경로에 오류가 있네요...^^
저 에러 메세지는 100% 해당 경로에 해당 파일이 없어서 나는 에러입니다.
그럴땐 include하고자 하는 페이지에서
: echo $_SERVER["DOCUMENT_ROOT"];
위 변수를 넣고 페이지를 열어보면 절대경로가 출력됩니다.
나온 경로는 리눅스상의 절대경로이며
저같은경우 $root_path 같은 형식으로 기본 루트 경로를 변수에저장하고
include 할때는 <? include_once("$root_path/lib/session.php"); ?> 형식으로 등록합니다.
이러면 경로를 고치고자할땐 $root_path변수만 고치면 나머지 경로는 상대경로와 비슷하게 사용할 수 있습니다.
물론 $root_path같은 변수는 필요없지만 절대경로를 좋아하는 타입이고 만약 경로가 이상할때 찍어보면 약간은 더 편한것 같더군요...^^
그리고 윗분이 하신 말씀처럼
session_register("세션명") <= 이함수가 없네요(세션을 생성하는 함수)...^^
session.php 파일에서 어떤 동작을 하는지는 알수가 없으나 라이브러리 파일이라면 세션설정에대한 함수가 있을것 같네요.
login_engine.php파일에서 세션을 생성한다면 필요없는 작업이지만 세션생성을 login_success.php파일에서 하겠다면 해당 아이디를 login_success.php로 옴기실때 어떠한 방법으로도 파라미터를 전달하지를 않고 있습니다.
예) <script> location.replace('login_success.php?M_id=<?=$rs[M_id]?>'); </script>
위 예는 간단하게 GET로 전달한것이고 원하시면 POST처리로도 하시면 됩니다.
이후 M_id값을 login_success.php파일에서 세션에대한 처리를 하셔야 할것으로 생각 됩니다.
그럼이제 예를 들어서 소스를 만들어 보겠습니다.
login_engine.php
: <?
: include_once("$root_path/lib/dbcon.php");
: // login_success.php 파일은 무엇인지 몰라 포함하지 않았습니다.
:
: $M_id = $_POST[M_id];
: $M_pwd = $_POST[M_pwd];
:
: if (!trim($M_id) || !trim($M_pwd)){
: echo "<script language='javascript'>alert('회원아이디나 패스워드가 공백입니다.');";
: echo "history.go(-1);";
: echo "</script>";
: exit();
: }
:
: $sql = "select * from nbjoin where M_id=TRIM('$M_id')";
: $res = mysql_query($sql);
: if ($res) $rs = mysql_fetch_array($res);
:
: if (!$rs[M_id] || $M_pwd != $rs[M_pwd]){ // if문에서 아이디는 null체크만하면 됩니다. 틀리면 어짜피 select 안됩니다.
: echo "<script language='javascript'>";
: echo "alert('가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.');";
: echo "<script language='JavaScript'> document.location.href = 'ajoin.php'; </script>";
: exit();
: }
:
: $session_M_id = "$rs[M_id]";
: session_register($session_M_id);
: $session_M_name = "$rs[M_name]";
: session_register($session_M_name); // 그림에 OO님이기에....^^
:
: echo "<script language='JavaScript'> document.location.href = 'login_success.php'; </script>";
: exit();
그리고 무슨 깊은뜻이 있으신지는 모르겠지만 login_success.php파일의 경우 전혀 필요성을 못느끼겠네요...^^
위에서 처럼 두번씩이나 select하실 필요까지는.....^^
길어졌네요...^^
알아서 처리 하셨다고 치고 이제 top2.php파일에서
: session_start(); // 최상단 include된 파일에 선언하는것이 편합니다......^^
$_SESSION["session_M_name"]같은 형식으로 불러서 쓰시면 됩니다.
그럼 수고하세요...^^
tip : alert,session,query문 등을 라이브러리 파일에 함수로 작성하여 사용하면 더 편합니다.
출처본인작성
2008.06.28.
좋아요 좋아요 평가하기1 사용자 표시댓글
더보기
3번째 답변
cafr****님 프로필 이미지
cafr**** 님 답변 친구
초수채택답변수 0
일단 ../lib/session.php 파일을 찾을 수가 없어서 나는 오류군요
그리고 맨 위에 session_start(); 를 하셔야 합니다.
그밖에 세션 타임을 정할 수 있는 함수도 있습니다.
ini_set("session.cache_expire", 3600);
ini_set("session.gc_maxlifetime", 3600);
으로도 설정할 수가 있고요
if (!isset($_SESSION[session_M_id])) { echo " <script> alert('[회원전용] 로그인 후 사용하십시오.'); }
이렇게 하셔도 좋을 것같습니다.
- 이전글php 스크립트로 간단히 mysql 백업하기 21.02.22
- 다음글로그인 세션처리2 21.02.22
댓글목록
등록된 댓글이 없습니다.

