Access to XMLHttpRequest at 'http://url/fileName' from origin 'http://url:port-number' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

xhr.js?b50d:210 POST http://url/fileName net::ERR_FAILED 200

Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'data') at eval (fileName.vue?1c92:239)

 

■ 에러 발생

Vue.js 3 에서 Axiospost 혹은 get을 사용해 php에 데이터를 요청해 결과 데이터를 불러오려는데 에러가 발생하였다.

이는 BackEnd (php) 에서 url요청 허용을 해놓지 않았기 때문에 발생한 에러이다.

그렇기 때문에 php파일에서 간단하게 추가해야한다.

 

<?php
header('Access-Control-Allow-Origin:*');
 

이렇게 작성하면 되는데, 만약 다른 상세한 설정(PUT, DELETE 등) 도 추가하려면 아래의 내용까지 추가해주면 된다.

header('Access-Control-Max-Age: 86400');
header('Access-Control-Allow-Headers:x-requested-with');
header('Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS');

 

이상입니다.

 

결과 console window
출력 내용

console.log('axios')
console.log(response) 

 

 

반응형

sudo service apache2 start / restart 에러

systemctl status apache2.service
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Wed 2021-10-27 14:16:45 KST; 16min ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 475439 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)

10월 27 14:16:45 server systemd[1]: Starting The Apache HTTP Server...
10월 27 14:16:45 server apachectl[475447]: apache2: Syntax error on line 231 of /etc/apache2/apache2.conf: Could not open configuration file /etc/phpmyadmin/apache.conf: No such file or directory
10월 27 14:16:45 server apachectl[475439]: Action 'start' failed.
10월 27 14:16:45 server apachectl[475439]: The Apache error log may have more information.
10월 27 14:16:45 server systemd[1]: apache2.service: Control process exited, code=exited, status=1/FAILURE
10월 27 14:16:45 server systemd[1]: apache2.service: Failed with result 'exit-code'.
10월 27 14:16:45 server systemd[1]: Failed to start The Apache HTTP Server.

환경: Linux Ubuntu 20.0.4LTS, PHP8, Apache 사용

사전 작업 : php7.4 -> php 8.0으로 업그레이드 (완료)

 

이에 해당하는 에러를 어떤 사람이 /etc/apache2/apache2.conf  파일의 수정을 통해 해결했다는 내용이 있었다.

 

이에 맞춰 apache2.conf 를 자세히 보던 와중 에러 문구가 눈에 띄었다.

phpmyadmin 부분에서 문제라는 것을 확인하였다. 

 

그래서 과감하게 (사실은 소심하게 주석까지 해주면서ㅋㅋ)  phpmyadmin을 사용하지 않으니 해당 부분을 주석처리하여 서버(server)를 구동할 때 해당 부분을 읽지 않게 하였더니 성공.

=> 하지만 이것은 phpmyadmin을 사용하시는 분들은 하면 안된다는 것을 확인해주세요.

 

아무래도 php 버전 업그레이드(7.4->8.0 upgrade)를 하면서
phpmyadmin 고유의 데이터베이스(database)를 놓고,

해당 부분을 추가적으로 손보지 않았기 때문에 이러한 에러가 발생한 것 같았다.

 

그리고 이제 다시 restart를 해보니 성공.

 

 

이상입니다.

 

apache2 error Could not open configuration file /etc/apache2/conf.d/: No such file or directory

I have just upgraded my Ubuntu 13.10 and apache2 is not working. When I try to start the apache2 server it is printing following errors: * Starting web server apache2 * The apache2 configtest fa...

askubuntu.com

 

How can I start apache2 from error code=exited status=1 | DigitalOcean

Im a web developer and im new in Ubuntu, I have days trying to install apache2 to work with php. But I always get this error starting Apache2: ``` Job for apache2.service failed because the control process exited with error code. See 'systemctl status

www.digitalocean.com

 

apache restart 오류 질문입니다

우분투 서버이구요 index죽이기 하려고 했는데 mod_write 가 설치 안되어있는 것같아 구글링해서 설치하던 중  service apache2 restart를 했는데 아래와 같이 나옵니다..   Job for apache2.service f

www.cikorea.net

 

How to Upgrade from PHP 7.x to PHP 8 on Ubuntu (Apache) - DevAnswers.co

How-to guide on upgrading PHP 7.x to PHP 8 on Ubuntu (Apache). Remove PHP 7.x and Install PHP 8 on Ubuntu (Apache)

devanswers.co

 

반응형

 

안녕하세요 상훈입니다.

이 글을 PHP에 올려야할지 javascript에 올려야할지 고민을 1초 정도 했고 자바스크립트 기반이기 때문에 자바스크립트에 게시하게 되었습니다.

해당 과정은  [  select-box의 한 항목을 선택하면, 그 아래의 select-box가 활성화되면서 해당되는 리스트를 출력  ]  합니다.

Ajaxphp에 호출을 하면, php의 데이터베이스에서 데이터를 출력하여 배열에 담고,
담은 배열을 json endcode하여 출력하는 값을 json 형식으로 받아, 파싱하여 출력하는 것입니다.

 

 

1. javascript(ajax) (제이쿼리 필요합니다! [ cdn 링크 ] )
2. php

 

[ jQuery ] jQuery 제이쿼리 CDN 링크 공유

안녕하세요 상훈입니다. 자바스크립트 - 제이쿼리의 cdn을 공유합니다. 해당 코드 한줄을 내에 넣어줍니다.

code-hoon.tistory.com

 

HTML

<select id="name" onchange="selectItem()" name="name">
   <option value="" selected>아이템 리스트들</option>
   <option value="item01" >아이템 리스트1</option>
   <option value="item02" >아이템 리스트2</option>
   <option value="item03" >아이템 리스트3</option>
</select>
<select id="item_name">
   <option value="">선택해주세요</option>
</select>

 

이러한 html 요소들이 존재합니다.

onchange() 기능을 이용해 js에서 감지할 수 있도록 함수로 선언해주었습니다.

좌측에 select-box와 우측에 빈 select-box

 

리스트 요소 중 하나를 선택하면 해당되는 2번째 select-box에 값을 출력해줍니다. [ 데이터베이스 이용 ]

JAVASCRIPT  -  아래에서 상세히 설명

<script>
  function selectItem(value){
      any_name = document.querySelector('#name').value
      
      $.ajax({
        url: "getItemList.php",
        method: "POST",
        data: { any_name: any_name }
      })
      .done(
      	(result) => {
      		if(result === ''){
      			const item_name = document.querySelector('#item_name')
      			while(item_name.hasChildNodes() ){
      				item_name.removeChild(item_name.firstChild)
      			}
      			$('#item_name').append('<option value="">' + '선택해주세요 ' + '</option>');	
      		}else{
      			const item_name = jQuery.parseJSON(result)
      			i = 0
      			$.each(item_name, function(){
      				$('#item_name').append('<option value="' + item_name[i] + '">' + item_name[i] + '</option>');
      				i++
      			});
      		}
      	}
      )
      .fail( () => { alert('다시 시도해주세요.') })
  }
</script>

 

ajax 기본 틀

클릭시 복사할 수 있는 페이지로 이동(새창)

 

PHP [getItemList.php]

<?php
// 
if($any_name = $_POST['any_name'] ){
    
    //database 연동
    include '../db.php'; 
    
    //sql 작성
    $sql = "select item_name from 테이블 where 컬럼명 = '$any_name' ";
    $result = mysqli_query($conn, $sql);
    
	// 빈 배열 $array[]에 $row['item_name'] 넣어주기
    while($row = mysqli_fetch_assoc($result)){
        $array[] = $row['item_name'];
    }

	// json 객체로 변환하여 echo
    echo json_encode($array, JSON_UNESCAPED_UNICODE);

    
}else{
    echo ""; // 만약 선택하지 않았을 때 반환하는 값 : null
}

 


처음부터 보자면, 

1. name 이라는 id 를 가진 요소의 을 가져온다. ( 첫번째 select-box에서 선택한 요소 )

2. ajax를 이용하여 데이터를 송신한다. 

  [ 목적지 : url, 
    방식 : method(get, post) , 
    송신할 요소 (parameter) : data  ] 

 

3. php 에서 데이터를 출력하고 json 객체 출력해주기
   -> 주석으로 충분히 설명을 했다고 생각합니다.

 

4. javascript 에서 .done 부분

 

if영역(return null)else영역(return json)은 각기 다른 결과를 나타냅니다. 

else영역(return json)부터 보자면, 
1. item_name이라는 상수에 JSON을 파싱한 결과값(result)을 담습니다.
2. jQuery의 each함수를 사용하여, item_name을 반복해줍니다.
3. 각각 가지고 있는 item_name의 개수에 따라 결과에 추가 리스트의 개수가 달라집니다.

이와 같이 값이 호출되었습니다.

if영역(return null) 에서는 추가했던 option제거해주는 역할을 합니다.
 (혹은 이 내용을 기본값으로 하는 것도 좋을것같군요. 기본적으로 속을 비워주고, option을 채워주는 방식으로요.)

 


평소 ajax를 잘 사용하지 않아 해당 내용을 작성하는데에 조금 헤맸습니다.

이번 기회로인해 공부 잘하고 갑니다. ㅎㅎ

 

 

참고

 

jQuery.ajax() | jQuery API Documentation

Description: Perform an asynchronous HTTP (Ajax) request. The $.ajax() function underlies all Ajax requests sent by jQuery. It is often unnecessary to directly call this function, as several higher-level alternatives like $.get() and .load() are available

api.jquery.com

 

 

[자바스크립트] 모든 자식 엘레멘트 삭제하기 (Remove all children)

[Javascript] Removing all children using DOM * HTML로 프로그래밍하다보면 모든 자식 노드를 삭제해야하는 경우가 생긴다 그럴때 사용하면 되는 간단한 팁이다. var cell = document.getElementById("cell"); w..

unikys.tistory.com

 

이상입니다.

 

반응형

안녕하세요 상훈입니다.

Simple-Book-App 강좌 완료 하였습니다. 실제 걸린 시간은 저것의 xN 하면 되고...

저는 아무것도 모르는 감자입니다!! 하하.

 

 

사용한 UI Format 은 BootStrap , 그리고 FontAwesome 입니다!

BackEnd 언어는 Laravel(PHP) 입니다.

 

원래는 Front Framework로 Vue.js를 넣으려고 했으나,

아직 그 단계는 아니고 LaravelBootstrap, Fontawesome 정도만 얹어서 진행하게 되었습니다.

 

구성 내용으로는 기본적인 CRUD를 적용하였습니다.

추가, 수정, 삭제, 상세보기(를 안했네요). 상세히 볼게 이미지 말고는 없어서 딱히 할 것도 없습니다. ㅎㅎ

기존에 알고 있던 내용도 있었고, 처음 보는 내용도 있었습니다.
$message, route(' ', data), if를 이용한 기존 데이터 존재유무에 따른 UI 등등...

 

Bootstrap을 이용하여 NavBar를 구성하였고,

부트스트랩 조와요

 

 

Font-Awesome을 이용하여 아이콘(icon)을 가져오기도 하였습니다. 

이미지가 왜 안뜨는지 이해를 못하겠다.

그런데, 이상하게도 이미지의 경로를 못잡아서 해당 내용이 제대로 뜨질 않고
alt 에 작성해놓은 내용만 표기가 되더라구요.. 왜그러는걸까.... ㅠㅠ

 

이부분은 조금 더 공부해봐야 할 것 같습니다. [ 화이팅..! 미래의 상훈! ]

 

반응형

안녕하세요 상훈입니다.

PHP 라라벨 프레임워크(Laravel Framework)에서 마이그레이션 생성하고,
이를 적용하는 방법을 포스팅하겠습니다.

 

1. migration 생성

 - 마이그레이션을 생성하는 방법은 다양합니다. 그 중에서 make:model을 통해 model에 해당하는 마이그레이션을 생성하도록 하겠습니다.

// make: ** 커맨드를 이용한 마이그레이션 생성
$ php artisan make:model '마이그레이션 명' -m

 

2. migration  내용 작성

 - 이 또한 본인의 입맛에 맞게 설정하면 되는데요,
  저는 todo list 를 만들고 있기에 해당하는 내용만 간략하게 작성하도록 하겠습니다.

 

 // up 부분에만 해당하는 코드를 수정하도록 하겠습니다.
 public function up()
    {
        Schema::create('items', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->boolean('completed')->default(false);
            $table->timestamp('completed_at')->nullable();
            $table->timestamps();
        });
    }

migration 일부분

 

3. migrate 하기

$ php artisan migrate

본인이 이전에 migrate 를 했다면 단 2줄이 뜰테고,
이전에 하지 않았다면 적용되지 않았던 모든 테이블들이 생성되었을 것입니다.

 

반응형

+ Recent posts