WEB2 - PHP

PHP에서 FORM과 POST

수업소개

서버로 데이터를 전송할 때 사용하는 HTML의 기능인 form을 살펴봅니다. 또, URL을 통하지 않고 은밀하게 데이터를 전송하는 방법인 POST 방식도 알아보겠습니다. 

 

 

form.html

<!doctype html>
<html>
  <body>
    <form action="form.php" method="post">
      <p><input type="text" name="title" placeholder="Title"></p>
      <p><textarea name="description"></textarea></p>
      <p><input type="submit"></p>
    </form>
  </body>
</html>

form.php

<?php
file_put_contents('data/'.$_POST['title'], $_POST['description']);
?>

 

댓글

댓글 본문
작성자
비밀번호
  1. samachun99
    Notice: Undefined index: description in C:\Bitnami\wampstack-7.3.13-0\apache2\htdocs\form.php on line 2
    어디가 문제인지 알수가 없네요 아무리 해도 똑같은 문장이 나오네요
  2. moon
    정말 감사합니다.!!
  3. softmania
    directory가 lib인데 127.0.0.1에 바로 나타나는 것은 어떻게 조정하는건가요?
    저는 file이 없다고 나오네요 너무 초보적이라 생각마시고 답을 주세요 아무리 책이나 영상을 보아도 방법이 없네요
  4. 조승현
    <!doctype html>
    <html>
    <body>
    <form action="form.php">
    <p><input type="text" name="title" placeholder="Title"></p>
    <p><textarea name="description"></textarea></p>
    <p><input type="submit"></p>
    </form>
    </body>
    </html>

    Error : method를 작성하지 않고 전송눌렀는데 url이 http://127.0.0.1......로 바뀌고 title=PHP부분이 나타나지 않아요!! form.php파일에 var_dump($_POST['title'])하면 PHP라고는 뜹니다.

    질문 : url에 나타나게 하려면 어떻게 해야할까요
  5. 햄쮸맨
    이번 시간에는 form태그에 대해서 배웠어요. form태그는 서버의 지정된 경로로 데이터를 전송하는 태그 같네용! 그리고 그 아래에 input type="text"(내용입력 부분) input type="submit"(전송확인 버튼) 같은 추가태그로 문서 작성 폼을 만들어 데이터를 입력 시키고 form을 통해서 전송하나봐요! 그런데 form태그는 보내는 데이터를 공개적으로 보내는 get방식이 있고 비밀리에 보내는 post방식이 있나봅니다. get방식은 url을 변화시킬 수 있으므로 북마크와 연계해서 각각 다른 페이지를 띄워줄때 유용하구요.post방식은 url변형 없이 비공개로 값을 전송해서 게시판에 글 같은 것을 작성할때 유용한 것 같습니다.
  6. 몽글몽글솜사탕
    감사합니다
  7. tinycaterpillar
    check your 'data' dirctory's write authority to other.

    use follow command in the shell
    chmod 777 data
    in the directory which contain 'data' directory
    대화보기
    • cary2010
      일요일 죄송합니다. 말씀하신대로 코드를 작성 했는데요 data 폴더에 파일이 생성이 안되네요 ㅠㅠ

      밑에 댓글 처럼 해도 안되네요 ㅠㅠ 혹시 이런 문제 겪어서 해결 하신분 댓글 좀 부탁드립니다
    • 허공
      190507 감사합니다.
    • 연습생
      form.php 코드안을

      <?php
      file_put_contents('../htdocs/data/'.$_POST['title'], $_POST['description']);
      ?>

      이렇게 '../htdocs/data/' 썼더니 됐어요. 절대경로를 써보라고 하더라구요.
      대화보기
      • Gihoon Pomme Ryu
        완료. 고맙습니다.
      • Gihoon Pomme Ryu
        바꾼거는 따로 없는데 하루 뒤에 정상 작동 하네요.
        대화보기
        • Gihoon Pomme Ryu
          form.html
          <!DOCTYPE html>
          <html>
          <body>
          <form action="form.php" method="post">
          <p>
          <input type="text" name="title" placeholder="Title">
          </p>
          <p>
          <textarea name="description" rows="8" cols="80"></textarea>
          </p>
          <input type="submit">
          </form>
          </body>
          </html>



          소스입니다. 정상 작동이 안되네요 ㅠ
          1. method를 post로 했는데도 url이
          http://127.0.0.1......+is
          이렇게 나옵니다.
          정상 저장 됐는데도 그러네요..
          2. php파일에서 POST로 변환시 에러가 발생합니다.

          form.php
          <?php
          file_put_contents('data/'.$_POST['title'], $_POST['description']);
          ?>
        • 로버트한
          감사합니다.^^
        • 주소를 입력하실때 영어로 된 localhost/form.html 이 아니라,
          숫자로 된 127.0.0.1/form.html 로 들어가서 제출버튼을 클릭하십시오.
          대화보기
          • powhy123
            이고잉님 강의는 마치 '스토리'가 있는 것처럼 느껴져서 재밌습니다. 감사합니다
          • 쓸기몬
            안녕하세요. 항상 좋은 강의 제공 해 주셔서 감사합니다.
            html페이지에서 title 과 description을 입력하고 submit 하면
            file_put_contents 함수를 통해 새로운 file이 생성되지 않는데 뭐가 문제인 걸까요??
          • kula
            Notice: Undefined index: title in C:\Bitnami\wampstack-7.1.12-0\apache2\htdocs\lib\form.php on line 2
            title :


            Notice: Undefined index: description in C:\Bitnami\wampstack-7.1.12-0\apache2\htdocs\lib\form.php on line 3
            descrption :

            html뿐만 아니라 php에도 title랑, descrption를 어떤 함수다 라고 선언해줘야 하나요?
          • sealwind
            사실 구글 검색했을때도 sudo chmod 777 data 어렇게 적용해보라는 답변이 있었는데, 해당명령어를 어떻게 적용하는지 몰라서 헤메고 있었습니다 ㅡ ㅡ;;

            그냥 해당폴더의 Permissions를 775 에서 777로 권한을 변경하니 되네요^^

            근데 sudo chmod 777 data은 어떻게 적용시키는건가요?
            대화보기
            • egoing
              위험 하지만 학습용 환경에서하면 sudo chmod 777 data 명령을 써보세요~
              대화보기
              • sealwind
                Codeanywhere에서 실행하면 Warning: file_put_contents(data/fsdf): failed to open stream: Permission denied in 라는 에러가 뜨는데, var_dump();로 확인해보면 정확하게 정보가 전달은 됩니다.

                혹시 Codeanywhere 같은 클라우드 개발환경에서 동작하게 하는 방법은 없을까요?
              • namimoon
                아~ 이고잉님 말씀이 맞네요. 그 부분 해결하고 보니 실제 권한에러가 발생했습니다. 고맙습니다.~~
                Warning: file_put_contents(./tile_test): failed to open stream: Permission denied in 해당경로~
                대화보기
                • egoing
                  저것은 파일이 없다는 말이에요~
                  index.php와 data 디렉토리가 같은 경로에 있는지 확인해보셔요~
                  대화보기
                  • namimoon
                    centos 에서 동일하게 했더니 아래와 같은 에러가 발생합네요.

                    Warning: file_put_contents(data/sdfsdf): failed to open stream: No such file or directory in 블라블라~

                    egoing님이 시키는대로 비트나미 설치하고 했으면 에러가 안 났을텐데..

                    제 문제는 권한문제 같네요...그냥 푸념인데..개인적으로 이럴때마다 OS를 먼저 공부해야 하는 생각이 계속 드네요 그냥 하소연 이었습니다.
                  • kelly123
                    음 아까부터 제출을 누르면
                    <?php
                    file_put_contents('data/'.$_POST['title'], $_POST['description']);
                    ?>
                    이렇게 코드가 그대로 나오고 실행은 되지 않네요..
                    대화보기
                    • egoing
                      아이고 지금 보니까 제가 예제를 잘 못 올렸네요.

                      method="get"을 method="post"로 하셔야 합니다!

                      한번 해보시고 문제 있으면 말씀해주세요~
                    • kelly123
                      이런 식으로 계속 똑같은 오류가 뜨는 데 검색해서 비슷한 오류들에 대한 대처법을 실행해봐도 변화가 없네요..ㅠㅠ

                      [Mon Feb 05 16:27:55.504565 2018] [mpm_winnt:notice] [pid 3352:tid 536] AH00418: Parent: Created child process 3628
                      [Mon Feb 05 16:27:56.115028 2018] [ssl:warn] [pid 3628:tid 456] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
                      [Mon Feb 05 16:27:56.322580 2018] [ssl:warn] [pid 3628:tid 456] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
                      [Mon Feb 05 16:27:56.344138 2018] [mpm_winnt:notice] [pid 3628:tid 456] AH00354: Child: Starting 64 worker threads.
                      대화보기
                      • egoing
                        우선 오류가 있는지 확인을 해보시면 좋을 것 같아요. 아래 보시면 환경설정 부분을 보면 오류를 출력하는 방법이 있습니다.
                        https://opentutorials.org......319

                        또 form을 전송할 때는 데이터가 URL로 전달하지 않기 때문에 코드를 수정하셨다면 form.html 쪽에서 페이지를 확실하게 리로드 한 후에 다시 시도해야 합니다. 이런 부분이 잘 되었는지 확인해보셔요~

                        또 php 쪽에서 var_dump($_POST);를 찍어보시면 값이 제대로 도착했는지 확인해 볼 수 있습니다.

                        값의 전달이 눈에 보이지 않기 때문에 좀 어렵게 느껴지실꺼에요. 화이팅 :)
                        대화보기
                        • kelly123
                          코드를 복사해서 실행해봐도 실행이 안되네요. 브라우저를 바꿔도 소용이 없고 다른 PHP파일은 잘 작동하는 데 왜 form.php 파일만 작동을 안할까요..
                        버전 관리
                        egoing
                        현재 버전
                        선택 버전
                        graphittie 자세히 보기