본문 바로가기
이과/웹앱

[ajax]js파일에서 php안될때 해결 XMLHttpRequest

by 코딩초밥 2022. 4. 13.
반응형

js에서 php 가 안된다..;;;  아놔.

php에서 js는 되는데 js에서 php가안된다..

그래서 당연히 mysql 기능도 쓸수가없게되었다..;;;;;

미쳤다.. 어떻게하지?


해결 방법은 3가지를 생각해봤다,

1. node.js를 설치 한다 .

js로 서버도 구축할수있고 백앤드로 좋다고 들었다.

 

2. ajax 로 서버통신을한다.

그런데 회사에서 안좋아한다.

 

3. php 파일을 따로 만들어서 거기에 sql 구문 써놓고

js파일에서 php파일을 비동기적 실행을 해본다.


결국 3번째 방법 시도해봤다.

 

자 ! 시작하기전에 내가 무엇이 문제인지

확실히 보고 어떤목표를 세워야하는지 확인해봐야한다.

 

문제점

1. js 파일에 php가 안된다

2. php가 안되다보니 sql을 쓸수가없다

 

목표

1. js 파일 변환하고싶은 데이타를 GET방식으로 넣어서 php 파일을 일부러 실행시킨다.

그 php파일안에는 sql 구문을 가득 써놓는다.

 

2. 그럼 php 가 데이터를 바꿔준다.

 

3. 그럼 js에서도 php를 쓸수있다는것이다.

 

 

js 파일안에 XMLHttpRequest();

라는 비동기 실행 함수를 쓴다. 

 

아주 간단하다.

나는 url 과 flag 데이터를 변동해야한다.

 

test.js

function change_flag(url, flag){
			var xhr = new XMLHttpRequest();
			//xhr.open(메소드, 주소)
			xhr.open("GET", "insert.php?url="+encodeURIComponent(url)+"&flag="+encodeURIComponent(flag));

			xhr.onreadystatechange = function(e){
				const {target} = e;
				if(target.readyState === XMLHttpRequest.DONE){
					const {status} = target;
					if(status === 0 || (status >= 200 && status < 400)){
						var response = e.target.responseText;
						console.log(response);
						//response = 결과 텍스트
					} else {
						// 오류 시
					}
				}
			}
			xhr.send();
		}
		change_flag(a, 0);
		change_flag(b, 1);

이런식으로 XMLHttpRequest() 을불러온뒤

get방식으로 url= "" & flag =""

데이타를 보낸다.

 

xhr.send();

이런식으로 send를 날리면 비동기적으로 저 url이 한번 실행된다

나는 insert.php를 이미 서버에 가지고있으므로 저 insert.php 에 url 이랑 flag를 날려준것이다.

 

자 그럼 그데이터를 받아서 sql 구문을써줘야겠지

 

test.php

<?php

	header('Content-Type: text/plain; charset=euc-kr');

	
	if(!isset($_GET['url'], $_GET['flag']))
      exit('no parameter');

	
	//보안을 위해서 addslashes로 감쌈

  	$url = addslashes($_GET['url']);
  	$flag = addslashes($_GET['flag']);

	$sql  = "UPDATE switchdata set flag='{$flag}' where url='{$url}'; ";

    $result = mysqli_query($conn, $sql);
    if($result === false){
		echo mysqli_error($conn);
    }

	echo "성공적으로 수정되었습니다.";

?>

 

if 문을써서 get 방식으로 url 과 flag 파라미터를 를받는다

if(!isset($_GET['url'], $_GET['flag']))
      exit('no parameter');

isset 은 변수가 제자리에 찾아 왔느냐 이것이다.

exit 은 이 메세지를 남기고 종료하겠다는 것이니까

한국말로하자면 url과 flag가 지금 안들어와있다면 no parameter이라는 메세지를 남기고 종료하겠다는 말이다.

 

보안을위해서 addslashes로 감쌌다.

$url = addslashes($_GET['url']);
$flag = addslashes($_GET['flag']);

 

이렇게 sql 구문을 사용하였다.

$sql  = "UPDATE switchdata set flag='{$flag}' where url='{$url}'; ";

$result = mysqli_query($conn, $sql);

그러면 그대로 변수에 데이타를 받아서 sql 쿼리를 날린다.

$conn은 내 아이디 비번이 들어가있다 모두 따로 만들어야한다.

 

 

반응형

'이과 > 웹앱' 카테고리의 다른 글

ajax를 실시간으로 하고싶다.  (2) 2022.04.20
Uncaught SyntaxError: Unexpected token '<'  (2) 2022.04.14
Web app 그냥 만들기_4  (1) 2022.04.08
Web app 그냥 만들기_3  (1) 2022.04.05
Web app 그냥 만들기_2  (3) 2022.04.03

댓글