2012-08-07 2 views
0

나는 html과 PHP를 사용하여 mysql 데이터베이스를 업데이트하는 양식을 만들려고합니다. 데이터베이스는 키를 갱신 (자동 증가)하지만 문자열에 값을 추가하지는 않습니다. 비슷한 문제가있는 사람들을 검색했지만 코드가 다른 것과 다르기 때문에 이해할 수 없습니다 (PHP와 MySQL의 멍청이입니다). 내 문제는 HTML을 사용하여 값을 얻을 수 있다고 생각하지만 가능합니다. 잘못된은 html과 PHP를 사용하여 mysql의 값을 업데이트 할 수 없습니다

<form action=submitform.php method=GET> 
    Name:<input type="text" name="cuName" size=20 maxlength=20><br>  
    Password:<input type="password" name="password" size=20 maxlength=45><br> 
    Account:<input type="text" name="account" size=20 maxlength=45><br> 
    Phone:<input type="tel" name="phone" size=10 maxlength=10><br> 
    Email:<input type="text" name="email" size=20 maxlength=45><br> 
<input type=submit> 
</form> 

내 PHP는 어떤 도움

답변

1

귀하의 코드가 REGISTER_GLOBALS에 의존이 설정 될; 보안상의 이유로 해제됩니다.

폼에서 보낸 값을 가져 오려면 $cuName$_GET['cuName']으로 바꾸어야합니다.

또한 데이터베이스로가는 모든 값을 이스케이프 처리해야합니다. 그렇지 않으면 SQL 인젝션 취약점에 노출 될 수 있습니다.

이 두 시나리오에 대한 코드를 정리,이 같은 결과는 :

<?php 
     if (!mysql_connect(localhost, myUsername, "myPassword")) { 
       print 'There was an error connecting to the database'.mysql_error(); 
       exit(); 
     } 
     if (!mysql_select_db(myDatabaseName)) { 
       print 'Could not select db. The error was: '.mysql_error(); 
       exit(); 
     } 
     $query = "INSERT INTO Customer (`cuName`, `password`, `account`,`phone`,`email`)"; 
     $query .= "VALUES ("; 
     $query .= "'".mysql_real_escape_string($_GET['cuName'])."','"; 
     $query .= mysql_real_escape_string($_GET['password'])."','"; 
     $query .= mysql_real_escape_string($_GET['phone'])."','"; 
     $query .= mysql_real_escape_string($_GET['email'])."'"; 

     if (!mysql_query($query)) { 
      print 'There was an error inserting '.$query.'. Error was '.mysql_error(); 
     } else { 
      echo $_GET['cuName']." thank you for reserving!"; 
     } 
     print $_GET['cuName']; 
    ?> 

은 또한 어떤 에러 체크를 추가했다. 데이터베이스의 상태를 알지 못하기 때문에 항상 외부 시스템 (예 : 데이터베이스)에 의존하는 기능 결과를 확인해야합니다 (작동 중지, 작동하지 않을 수 있음). 따라서 항상 오류 메시지를 확인하고 인쇄해야합니다 . 더 나은

+0

대단히 감사합니다. – aldito2

0

당신은 어디서든 GET 값 중 하나를 정의하지 않습니다 사전에

<?php 
     mysql_connect(localhost, myUsername, "myPassword"); 
     mysql_select_db(myDatabaseName); 
     mysql_query("INSERT INTO Customer (cuName, password, 
         account, phone, email) 
        Values('$cuName', '$password', '$account', 
          '$phone', '$email')"); 
     echo $cuName ." thank you for reserving!"; 
     print ($cuName); 
    ?> 

덕분이다. $ cuName 등은 정의되지 않습니다.

각 값은 $ _GET에 연결되어야합니다. IE,

$cuName = $_GET['cuName']

그러나 당신은 또한 당신이 SQL 주입을 방지하기 위해 청소되지 않은 데이터를 삽입하지 않습니다 있는지 확인해야합니다. 이것의 예는 다음과 같습니다

$cuName = mysql_real_escape_string($_GET['cuName']);

그래서

,이 시도 :

<?php 
     mysql_connect(localhost, myUsername, "myPassword"); 
     mysql_select_db(myDatabaseName); 

     //Define Variables 
     $cuName = mysql_real_escape_string($_GET['cuName']); 
     $password = mysql_real_escape_string($_GET['password']); 
     $account = mysql_real_escape_string($_GET['account']); 
     $phone = mysql_real_escape_string($_GET['phone']); 
     $email = mysql_real_escape_string($_GET['email']); 

     mysql_query("INSERT INTO Customer (cuName, password, 
         account, phone, email) 
        Values('$cuName', '$password', '$account', 
          '$phone', '$email')") or die (mysql_error()); 
     echo $cuName ." thank you for reserving!"; 
     print ($cuName); 
    ?> 
+2

mysqli_ * 주석을 반드시 사용하십시오. – gcochard

+0

방금 ​​전 당신이 말한 것을 시도했지만, 어떤 이유로 데이터베이스가 업데이트되고 있지만 이름, 암호 등이 없기 때문에 자동 증가 키가 증가합니다. – aldito2

+0

업데이트 된 코드를 사용해 보셨습니까? –

0

사용하기 :

$cuname = $_GET['cuname']; 
이 같은

.... 를 양식 방법은 "GET"에, 내 조언이 얻는 것보다 데이터를 게시하는 것입니다 때문입니다.

관련 문제