본문 바로가기
PHP

[PHP]update.php에서 코드짤 때 주의할 점 [INSERT, UPDATE 처리]

by 개발하자구 2023. 3. 3.

zcompany.edit.php에서 보내준 form의 submit 에 의해 $_POST["name"]; 으로 받아주는데

 

여기서 선행되어야할 점은

1. update를 위한 $cidhidden을 통해 들어왔는지 echo로 확인

2. insert를 위한 $modehidden을 통해 들어왔는지 echo로 확인

 

잘 들어온걸 확인하고나서 고려해야할 점은

mode를 기준점으로

if (modenewinsert 쿼리문) else(update 쿼리문) 으로 구분한다.

 

if ($mode == "new"){ 
    
    $sql = "insert into zcompany
                ( cname, cnumber, ceo, address, tel
                , hp, smoney, tmoney, dtstart) 
                values
                ( '$cname', '$cnumber', '$ceo', '$address', '$tel'
                , '$hp', $smoney, $tmoney, '$dtstart')";                   
}else{
    $sql = "update zcompany set 
                                cname='$cname'
                                , cnumber='$cnumber'
                                , ceo='$ceo'
                                , address='$address'
                                , tel='$tel'
                                , hp='$hp'
                                , smoney=$smoney
                                , tmoney=$tmoney
                                , dtstart='$dtstart' 
                            where id=$cid
                           ";
}

또는 

if ((int)$cid==0){ 
  // 자료읽기
    $sql = "INSERT INTO zcompany ( 
                  cname, cnumber, ceo, address, tel
                , hp, smoney, dtstart, email
            ) VALUES ( 
                  '$cname', '$cnumber', '$ceo', '$address', '$tel'
                , '$hp', $smoney, '$dtstart', '$email'
    )";                   
}else{
    $sql = "UPDATE zcompany SET
                  cname   = '$cname'
                , cnumber = '$cnumber'
                , ceo     = '$ceo'
                , address = '$address'
                , tel     = '$tel'
                , hp      = '$hp'
                , smoney  = $smoney                
                , dtstart = '$dtstart'
                , email   = '$email'
            WHERE id=$cid
    ";
}
sql_query($sql);

 

$mode != "new" 와 (int)$cid==0 는 같은 의미. mode가 기준이면 앞의 것을, cid가 기준이면 뒤의 것을 쓰면 됨.
 

● 형 변환 처리

 

우리는 사용자가 input란에 어떤걸 넣던지 간에 DB로 잘 저장되게끔 프로그램을 짜놔야한다.

그렇게 짜놓는 방법 중 하나가 형 변환 처리.

 

나 같은 경우 $smoney, $tmoneydataType이 숫자형이었기 때문에 사용자가 문자형으로 input란을 기재했을경우 DB에 저장되지 않는 문제가 발생함. 결국 (int)로 형변환 해주면서 해결.

 

(int) 형변환을 했을 경우. 들어오는값이 null이든, empty, 문자형이든 숫자가 0으로 치환되버림.

 

$smoney  = (double)trim($_POST["smoney"]);
 
$smoney  = (double)trim($_POST["smoney"]);

 

 

전체 코드는

<?php
include_once('./_common.php');
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

$href_list = G5_URL."/work/zcompany.list.php";

$cid = $_POST["cid"];
$mode = $_POST["mode"];
if ($mode!="new") if((int)$cid==0) alert("잘못된 접근입니다.", $href_list);

// 자료읽기
$cname   = trim($_POST["cname"]);
$cnumber = trim($_POST["cnumber"]);
$ceo     = trim($_POST["ceo"]);
$address = trim($_POST["address"]);
$tel     = trim($_POST["tel"]);
$hp      = trim($_POST["hp"]);
$smoney  = (double)trim($_POST["smoney"]);
$dtstart = trim($_POST["dtstart"]);
$email   = trim($_POST["email"]);


if ((int)$cid==0){ 
  // 자료읽기
    $sql = "INSERT INTO zcompany ( 
                  cname, cnumber, ceo, address, tel
                , hp, smoney, dtstart, email
            ) VALUES ( 
                  '$cname', '$cnumber', '$ceo', '$address', '$tel'
                , '$hp', $smoney, '$dtstart', '$email'
    )";                   
}else{
    $sql = "UPDATE zcompany SET
                  cname   = '$cname'
                , cnumber = '$cnumber'
                , ceo     = '$ceo'
                , address = '$address'
                , tel     = '$tel'
                , hp      = '$hp'
                , smoney  = $smoney                
                , dtstart = '$dtstart'
                , email   = '$email'
            WHERE id=$cid
    ";
}
sql_query($sql);  
alert("저장되었습니다.", $href_list);    
?>