마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

게시판이 여러개인데 댓글이 한곳에 몰려요

0 추천
게시판이 7개있는데 만약 두번째 게시판에서 댓글을 쓰면 모든게시판에 댓글이 다달립니다. 기본키를 idx로 잡아서 그런거 같은데, 즉  두번째 개시판에서 1번게시물에 댓글을 쓰면 모든 게시판의 1번 게시물에 댓글이 달립니다. 저희가 실력이 모자라 db테이블을 7개씩 잡았는데{(book,book1.......book6),{review,review1.....review6)} 무엇이 문제인지 자세히 설명해 주실수 있나요? book1에서 댓글쓰면 review1에 댓글이 저장되도록 하고싶습니다.

 

<자바파일>

public class ReViewWriteActivity1 extends Activity {
    Context mContext;
    EditText contents;
    EditText id;
    EditText pass;

    String result1 = "";
    String message = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_review_write);
        initSetting();
    }

    private void initSetting() {
        contents = (EditText) findViewById(R.id.contents);
        id = (EditText) findViewById(R.id.id);
        pass = (EditText) findViewById(R.id.pass);
        

 

        Button write1 = (Button) findViewById(R.id.btn_write);
        write1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                 if (TextUtils.isEmpty(contents.getText().toString())) {
                    Toast.makeText(ReViewWriteActivity1.this, "내용을 입력해주세요!",
                            Toast.LENGTH_SHORT).show();

                }else if (TextUtils.isEmpty(id.getText().toString())) {
                    Toast.makeText(ReViewWriteActivity1.this, "닉네임을 입력해주세요!",
                            Toast.LENGTH_SHORT).show();

                }else if (TextUtils.isEmpty(pass.getText().toString())) {
                    Toast.makeText(ReViewWriteActivity1.this, "패스워드를 입력해주세요!",
                            Toast.LENGTH_SHORT).show();

                } else {
                    new rewviewTask().execute();
                }

            }
        });

        

    }

    ProgressDialog mProgressDialog;

    
    private class rewviewTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialog = ProgressDialog.show(ReViewWriteActivity1.this, "",
                    "등록 중....", true);
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                checkVisionData();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

 

        private void checkVisionData() throws UnsupportedEncodingException,
                IOException {
            URL url = new URL("http://worry04.cafe24.com/hub/insert_review1.php");

            HttpURLConnection http = (HttpURLConnection) url.openConnection();

            http.setDefaultUseCaches(false);
            http.setRequestMethod("POST");
            http.setDoOutput(true);
            http.setRequestProperty("content-type",
                    "application/x-www-form-urlencoded");
            StringBuffer buffer1 = new StringBuffer();

            buffer1.append("contents").append("=")
            .append(contents.getText().toString()).append("&");
            
            buffer1.append("pass").append("=")
            .append(pass.getText().toString()).append("&");
            
            buffer1.append("user_id").append("=")
            .append(id.getText().toString()).append("&");
            
            Intent gt1 = getIntent();
            String b_idx =gt1.getStringExtra("b_idx");
            
            buffer1.append("b_idx").append("=")
                    .append(b_idx).append("&");
            
            

            OutputStreamWriter outStream = new OutputStreamWriter(
                    http.getOutputStream(), "UTF-8");
            PrintWriter writer = new PrintWriter(outStream);
            writer.write(buffer1.toString());
            writer.flush();

            InputStreamReader tmp = new InputStreamReader(
                    http.getInputStream(), "UTF-8");
            BufferedReader reader = new BufferedReader(tmp);
            StringBuilder builder = new StringBuilder();
            String str;
            while ((str = reader.readLine()) != null) {

                builder.append(str);
            }

            
            Pasingversiondata(builder.toString());
        }

        private void Pasingversiondata(String data) {

            try {

                JSONObject student = new JSONObject(data);

                if (student.getString("success") == null) {
                    result1 = "0";
                } else {
                    result1 = student.getString("success");
                }

                if (student.getString("message") == null) {
                    message = "";
                } else {
                    message = student.getString("message");
                }

            } catch (JSONException e) {
                Log.d("tag", "Parse Error");
            }
            

        }

        protected void onPostExecute(Void result) {
            mProgressDialog.dismiss();
            if(result1.equals("1")){
                Toast.makeText(ReViewWriteActivity1.this, "리뷰 등록 완료 되었습니다!", Toast.LENGTH_SHORT)
                .show();
                setResult(RESULT_OK);
                finish();
                
                
            }else{
                Toast.makeText(ReViewWriteActivity1.this, "리뷰 등록이 실패 되었습니다! ", Toast.LENGTH_SHORT)
                .show();
            }
        
            
        }
    }

}

 

insert_review1 <php>파일

<?php
 
$response = array();
 
   
    $b_idx = $_POST["b_idx"];  //앱으로 부터 인덱스
    $contents = $_POST["contents"];  //앱으로 부터 내용
    $pass = $_POST["pass"];  //앱으로 패스워드
    $user_id = $_POST["user_id"];  //앱으로 닉네임

 

    $connect = mysql_connect("localhost","worry04","aa1536zz@") or die("SQL server에 연결할 수 없습니다.");
    mysql_select_db("worry04",$connect);
    //DB 연결

 

    $result = mysql_query("INSERT INTO review1(b_idx , contents,pass, user_id  ) VALUES('$b_idx' , '$contents' , '$pass' , '$user_id' )");

     if ($result) {

         $result = mysql_query("update book1 set review_count = review_count+1  where  b_idx= '$b_idx' ");

        $response["success"] = 1;
        $response["message"] = "Ok";     
    } else {
        $response["success"] = 0;
        $response["message"] = "Error";
    }

    
     echo json_encode($response);

?>

select_review1 <php파일>

 

<?php
 
$return_arr = array();
 
 
 
    $connect = mysql_connect("localhost","worry04","aa1536zz@") or die("SQL server에 연결할 수 없습니다.");
    mysql_select_db("worry04",$connect);
    //DB 연결

    $result = mysql_query("select * from  book1 order by idx desc ");

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        $row_array['idx'] = $row['idx'];
        $row_array['user_id'] = $row['user_id'];
        $row_array['title'] = $row['title'];
        $row_array['contents'] = $row['contents'];
        $row_array['pass'] = $row['pass'];
        $row_array['reg_date'] = $row['reg_date'];
        $row_array['review_count'] = $row['review_count'];
        

        array_push($return_arr,$row_array);
    }

    
     echo json_encode($return_arr);

?>
익명사용자 님이 2015년 12월 16일 질문

1개의 답변

0 추천
흠...저도 작업을 한 적이 있는데 특정 게시물에 댓글을 달았는데 다른 게시물까지고 영향이 있다는 건 게시물의 특정 키 (게시물 PrimaryKey)의 정보를 비교 안해주셨는거 아닌가요????

저 같은 경우에는 정말 간단하게 게시물 DB와 댓글 DB를 저장하는 테이블을 따로 만든 후에

댓글 DB 컬럼에는 댓글번호, 게시물번호, 제목, 내용 이렇게 만들어서 저장후 불러왔거든요

근데 PHP문 저장하는 부분과 불러오는 부분 보니까 상위 게시물에 대한 Key정보를 저장 하고 불러오는 부분이 보이지 않아서 그 문제가 아닌가 싶습니다!!!!!!

저도 잘 알지 못하고 도움만 받는 1인이라....허접한 답변 입니다...많은 도움이 되시길 바랍니다 ㅠㅠㅠㅠ
갭알자 (420 포인트) 님이 2015년 12월 16일 답변
제가 댓글을 이해못하게 쓴 것 같아 다시 말씀드릴게요 ㅠㅠㅠㅠㅠ
일단 댓글에 대한 정보를 저장하는 DB에 댓글을 작성한 게시물의 PrimaryKey가 저장이 되어야 합니다.
그리고 PHP문에서 게시물을 불러올 때 게시물의 번호를 가지고 비교흫하여 댓글을 가져오면 되는거죠!!!!
이렇게 하는 방식이 정확히 맞다는 건 아니지만 저는 그렇게 햇습니다 ㅠㅠㅠ
도움이 되셨으면합니다!!!ㅎㅎㅎ
저희가 아직초보라그런데 어떤걸 어디에 추가하면 되는지 자세히좀...알수있을까요?ㅎㅎㅎ휴ㅠㅠ
흠.....자세히 다 가르쳐 드리기엔 좀 그렇구요..
대충 흐름은 말씀드릴게요.
우선 게시물에 필요로한 DB정보는 (일반 게시물 일 때) 게시물 번호(PK = Primaey Key), 작성일자, 제목, 내용, 작성자 이렇게 저장이 되겠죠??
그럼 게시물 DB는 작성이되었습니다. 댓글 DB는
댓글 번호(PK) 게시물번호 작성일자 제목 내용 이렇게 저장이 되겟쬬~?
게시물번호를 왜저장을 하냐면 게시물번호를 가지고 어떤 게시물에 댓글이 달렸는지 판별을 하기위해서죠 한마디로 게시물에 댓글을 달때 게시물을 고유 번호를 이미 가지고 있을거 아니예요. 어떤 특정 게시물을 불러올 때 어떻게 불러왔나요??? 특정 키로 게시물을 검색해서 불러왔겠죠?? 그키를 가지고와서 판단을 하는거예요 판단은 소스에서 하는 것보단 PHP문에서 쿼리문을 약간 조정하는게 좋겠죠~?? 예를들면 A라는 테이블에 1번 게시물에 댓글이 달렸다.
SELECT * FROM 댓글테이블 WHERE 게시물번호 = '현재게시물의 번호'
이렇게 검색을 하면 현재 게시물에 달린 댓글을 볼 수있겠죠~??
지금 하셔야 할 작업은 우선적으로 DB에서 특정 게시물의 댓글테이블 정보를 가져올 수 있는지가 우선이고 후에 소스작업을 하시는게 좋을 듯하네요
DB에서 값을 제대로 불러왔으면 소스에서는 간단하게 댓글을 뿌려 주기만 하면 되니까요~~
어렵게 생각하지마세요`!!저도 님과 마찬가지로 초보자이지만 흐름만 잘 파악하고 하면 금방 하실거예요~!! 그럼 화이팅입니다!!
아 참고로 위에 언급된 특정 키는 게시물의 고유 번호입니다.!!!헷갈리지마세요~!!
...