2012-12-04 2 views
0

입니다. ID로 업데이트하려면 업데이트 양식과 쿼리를 작성하려고 노력하고 있습니다. 하지만 그가 모든 필드를 업데이 트하는 양식에 데이터를 넣을 때도 그는 "0"을 얻는 데이터베이스에서 어떤 데이터도 갖지 못합니다. 데이터가있는 필드 만 업데이트해야합니다.id로 업데이트 만하고 필드는

나를 도와 줄 수 있습니까?

나는 항상 정의되지 않은 변수를 가지고 있습니다. 그리고 첫 번째와 두 번째 필드 만 업데이트합니다!

감사합니다, here's 내 코드 :

당신은 당신이 그들을 업데이트 할 값이있는 경우 업데이트 할 만 나열 컬럼에 쿼리를 변경해야
if (isset($_POST['alterar'])) { 

    $id_cliente = $_POST["id_cliente"]; 
    $nome_cliente = $_POST["nome_cliente"]; 
    $telefone_cliente = $_POST["telefone_cliente"]; 
    $morada_cliente = $_POST["morada_cliente"]; 
    $email_cliente = $_POST["email_cliente"]; 
    $servico = $_POST["servico"]; 
    $n_pecas = $_POST["n_pecas"]; 
    $tp_arranjo = $_POST["tp_arranjo"]; 
    $descricao = $_POST["descricao"]; 

    } 

    $query = "UPDATE `clientes` SET "; 
if ($nome_cliente) $columns[] = "`nome_cliente`  = '{$nome_cliente}'"; 
if ($telefone_cliente) $columns[] = "`telefone_cliente`= '{$telefone_cliente}'"; 
if ($morada_cliente) $columns[] = "`morada_cliente` = '{$morada_cliente}'"; 
if ($email_cliente) $columns[] = "`email_cliente` = '{$email_cliente}'"; 
if ($servico) $columns[] = "`servico`   = '{$servico}'"; 
if ($n_pecas) $columns[] = "`n_pecas`   = '{$n_pecas}'"; 
if ($tp_arranjo) $columns[] = "`tp_arranjo`  = '{$tp_arranjo}'"; 
if ($descricao) $columns[] = "`descricao`  = '{$descricao}'"; 

$columns = implode(",",$columns); 
$query .= $columns . " WHERE id_cliente='$id_cliente'"; 


    mysql_query($query); 

    ?> 
+1

좋은 [sql injection holes] (http://bobby-tables.com). 서버 pwn3d를 가지고 즐기십시오. –

+0

새 코드에서 mysql_ * 함수를 사용하지 마시고 *넣어주십시오. (ifet ($ _ POST [ 'alterar'])) {'사용자의 데이터베이스 코드''}' – GBD

+0

더 많은 것을 설명 할 수 있습니다 – Nation

답변

1

. 이를 위해서는 조건에 따라 동적으로 쿼리 문자열을 작성해야합니다.

예 :

$query = "update `clientes` set "; 
if ($nome_cliente) $columns[] = "`nome_cliente`= '{$nome_cliente}'"; 
if ($telefone_cliente) $columns[] = "`telefone_cliente`= '{$telefone_cliente}'"; 
//etc.. 

$columns = implode(",",$columns); 
$query .= $columns . " where id_cliente='$id_cliente'"; 

참고 : 다른 사람이 언급 한 것처럼,이 안전하지 않습니다! 사용자 입력을 데이터베이스에 전달하기 전에 사용자 입력을 항상 위생적으로 처리해야합니다.

+0

그게 나에게 항상 내가 정의되지 않은 변수를 준다! 그리고 첫 번째와 두 번째 필드 만 업데이트합니다! – Nation

+0

나는 의사 코드로 당신에게 원리를 보여 주었다. 당신은 여전히 ​​적절한 코딩까지 틈을 메워야 만한다. 처음에는 $ _POST 변수에서 값을 받고 다른 변수에 할당합니다. 그것들이 존재하는지 (그리고 그것들을 위생적으로하는지) 검사하거나 false 또는 무엇인가의 기본값을 주어야한다. 그렇지 않으면'isset ($ variable)'등으로 조건 변수들을 감싼다. IOW 그 대답의 목적은 다음과 같다. 귀하의 질문에 대답, PHP는 101 수업을 제공하지;) –

+0

공정한 충분한 감사! ;) – Nation