2011-09-27 3 views
0

나는 내 초보자 php/mySQL 'Invoicer'앱을 해킹하고있다.하나 또는 다른 쿼리 제출

ID가 있는지 여부에 따라 INSERT 또는 UPDATE 중 하나를 실행하려는 양식 페이지가 있습니다. 이 ID가있는 경우 ID를 사용하여 레코드를 검색하고 이에 따라 양식을 미리 채 웁니다. 내 문제는 지금 내 조건부 비트는 입니다. 두 경우 모두 INSERT 쿼리를 실행하면 업데이트를 실행할 수 없기 때문에 내 을 이해하고 추측했습니다. .

이것이 최선의 방법이 아니더라도 나는 왜 작동하지 않는지 알고 싶습니다. 그리고 나는 분명히 process.php, 등으로 쿼리를 옮길 수있는 제안을 열었습니다. 한 블록 또는 다른 블록을 포함 시키려면 'if (isset ($ _ GET ['ID '])' '를 사용해야하는지 궁금합니다. 어떤 도움이나 제안이라도 미리 감사드립니다. 모범 사례/보안 한 번 나는, 최대 유선 넓은 스트로크)

환호를 얻었다

<?php 

    // CASE I: 'EDIT RECORD': 
    // If there's an ID ... 
    if (isset($_GET['ID']) && is_numeric($_GET['ID'])) { 
     $id = $_GET['ID']; 
     echo "<p class=\"status\"><strong>ID IS SET ... ergo we're editing/UPDATING an existing record</strong></p>"; 

     // ... retrieve the record .... 
     $query = sprintf("SELECT * FROM Invoices WHERE ID = %s", $id); 
     $result = mysql_query($query) or die(mysql_error()); 
     $row = mysql_fetch_array($result); 

     // ... assign variables to pre-populate the form 
     $id   = $row['ID']; 
     $invNumber = $row['invNumber']; 
     $invDate  = $row['invDate']; 
     // [ snip: more variables > field data ] 

     // on submit: get the form values ... 
     // no worky: if (isset($_GET['ID']) && isset($_POST['submit'])) { 
     if (isset($_POST['submit'])) { 
      $invNumber = $_POST['invoice-number']; 
      $invDate  = $_POST['invoice-date']; 
      $projNumber = $_POST['project-number']; 
      // [ snip: more variables > field data ] 


      // ... and UPDATE the db: 
      $qUpdate = "UPDATE Invoices SET invNumber='$invNumber', invDate='$invDate', projNumber='$projNumber', client='$client', task='$task', issueDate='$issueDate', subTotal='$subTotal', tax='$tax', invTotal='$invTotal', datePaid1='$datePaid1', datePaid2='$datePaid2', comments='$comments' WHERE ID='3'"; 
      $result = mysql_query($qUpdate) or die(mysql_error()); 
      if($result) { 
       echo "<p class=\"status\"><strong>SUCCESS: RECORD UPDATED!</strong></p>"; 
      } 
      else die("DAMMIT JIM I'M A DOCTOR NOT A DB ADMIN!" . mysql_error()); 

     } // CLOSE '(isset($_POST['submit'])) 
    } // END CASE I: ID present 


    // CASE II: 'NEW RECORD'; query = INSERT 
    elseif (empty($_GET['ID'])) { 
     echo "<p class=\"status\"><strong>No ID ... ergo we're INSERTING a new record:</strong></p>"; 

     // on submit: get the form values ... 
     if (isset($_POST['submit'])) { 
      $invNumber = $_POST['invoice-number']; 
      $invDate  = $_POST['invoice-date']; 
      $projNumber = $_POST['project-number']; 
      // [ snip: more variables > field data ] 

      $qInsert = "INSERT INTO Invoices (invNumber,invDate,projNumber,client,task,issueDate,subTotal,tax,invTotal,datePaid1,datePaid2,comments) 
       VALUES('$invNumber','$invDate','$projNumber','$client','$task','$issueDate','$subTotal','$tax','$invTotal','$datePaid1','$datePaid2','$comments')"; 
      $result = mysql_query($qInsert) or die(mysql_error()); 
      if($result) { 
       echo "<p class=\"status\"><strong>SUCCESS: NEW RECORD INSERTED!</strong></p>"; 
      } 
      else die("DAMMIT JIM I'M A DOCTOR NOT A DB ADMIN!" . mysql_error()); 
     } // CLOSE '(isset($_POST['submit'])) 
    } // END CASE II: No ID present 

?> 
이야했습니다

과 : 양식을 제출하면

<form id="invoiceData" method="post" action="/html/form.php">  

답변

1

, 당신은 그렇지 않으면 당신은 (제거 ID 포함) 하드 코딩 된 값 /html/form.php에 게시되기 때문에 내려 조용히되고, 다시 ID를 포함해야합니다. 이로 인해 empty($_GET['ID']) 부분이 일치하고 실행되어 INSERT가 발생합니다. 당신은 다시이 같은 모든 형태의 포스트의 행동에 ID 값을 포함 간단하게 할 수 있습니다

<form 
    id="invoiceData" 
    method="post" 
    action="/html/form.php?ID=<?php echo $_GET['ID']; ?>" 
> 

시작 할 ID 없었다 경우 때문 업데이트의 경우와 INSERT 모두에서 작동합니다,이 는 /html/form.php?ID=으로 렌더링되며 ID가 empty 인 경우와 일치합니다. 이 논리를 확실히 테스트 해 볼 수 있습니다.

희망이 도움이됩니다.

+0

int에 캐스팅 GET id 매개 변수를 추가하고이 전체 코드에 기본 보안을 추가하면 도움이 될 것입니다 – regilero

+0

mellamokb에게 감사드립니다 -이 기능은 실제로 작동하며 부팅을 강화합니다 (또한 내 구문이 그렇지 않다는 것을 알았 음) . 매우 감사! – shecky

+0

@ regilero ... 네, 그렇습니다;) – shecky

1

$_GET[ID]은 URL 매개 변수로 전달하면 설정됩니다. 만큼 당신이 (무엇이든 할 수 있습니다 값)을 <input type="hidden" name="submit" value="1" />를 할로 - 당신은 12 당신이 원하는 ID입니다

<form id="invoiceData" method="post" action="/html/form.php?ID=12"> 

<form> 작업을 변경한다면, 당신은 당신이 원하는하고있는 결과를 얻는한다 귀하의 양식 어딘가에도.

+0

감사합니다. jprofitt. – shecky

관련 문제