2017-12-20 8 views
0

그래서 나는 단순한 무언가를 간과 할 수는 있지만 PHP 페이지를 통해 MySQL에서 FIELD를 업데이트하려고합니다. IF 문을 1 톤 실행했지만 위와 같은 방법으로 작동하지 않는 것 같습니다. 여기MySQL : UPDATE에서 FIELD를 대입 할 수 있습니까?

<?php 
include('config.php'); 
$username = $_POST['username']; 
$charName = $_POST['charName']; 
//ID MARKS 
$idMarks = $_POST['IDmarks']; 
//EXPERIENCE 
$EXP = $_POST['EXP']; 

$sql = "UPDATE characters 
      SET CASE 
       WHEN idMarks1 IS NULL THEN idMarks1 = '$idMarks' 
       WHEN idMarks2 IS NULL THEN idMarks2 = '$idMarks' 
       WHEN idMarks3 IS NULL THEN idMarks3 = '$idMarks' 
       WHEN idMarks4 IS NULL THEN idMarks4 = '$idMarks' 
       WHEN idMarks5 IS NULL THEN idMarks5 = '$idMarks' 
       WHEN idMarks6 IS NULL THEN idMarks6 = '$idMarks' 
       WHEN idMarks7 IS NULL THEN idMarks7 = '$idMarks' 
       WHEN idMarks8 IS NULL THEN idMarks8 = '$idMarks' 
       WHEN idMarks9 IS NULL THEN idMarks9 = '$idMarks' 
       WHEN idMarks10 IS NULL THEN idMarks10 = '$idMarks' 
       WHEN idMarks11 IS NULL THEN idMarks11 = '$idMarks' 
       WHEN idMarks12 IS NULL THEN idMarks12 = '$idMarks' 
       END 

       totalEXP = totalEXP + '$EXP', 
       remEXP = remEXP + '$EXP' 

      WHERE charName = '$charName' AND username = '$username'; 
     "; 

if ($conn->query($sql) === TRUE) { 
header("Location: ../lead.php"); 
} else { 
    echo "Error updating record: " . $conn->error; 
} 
?> 

아이디어는 업데이트가 발견 한 최초의 널 (null) 값에 새 값 ($ idMarks)을 넣고 그 다음 EXP 컬럼에 롤 것입니다. 필자는 MySQL과 관련하여 이전의 문제로 인해 배열을 사용할 수 없습니다. 요점은 idMarks 컬럼이 상처를 추적하고, 상처가 흉터 나 팔다리를 치유하고, 문신이 영구적이며, 기타 등등을 조정할 수있는 이유입니다. 다른 페이지에. 이 문제를 해결하는 방법에 대한 아이디어가있는 사람이 있습니까?

+0

실제로 작동하는 테스트에서는 int로 입력되지만 텍스트 필드에 입력되므로 다른 곳에서 파싱됩니다. – NixondisNRVA

+1

근본적으로 이는 잘못된 디자인 문제입니다. 열거 된 열로 자신을 찾을 때마다 경보 벨이 울리기 시작해야합니다. – Strawberry

+0

그렇다면 다른 열을 놓은 경우 어떻게 idMark에 여러 행의 값을 저장할 수 있습니까? – NixondisNRVA

답변

0

당신은 PHP를 가지고 있는데, 왜 SQL에서 단점을 수행합니까?

$error = false; 
for($i=1; $i<12; $i++) { 
    $sql = "UPDATE characters SET idMarks$i = '$idMarks'" 
     . " WHERE idMarks$i IS NULL AND charName = '$charName' AND username = '$username';"; 
    $sql2 = "UPDATE characters SET totalEXP = totalEXP + '$EXP', remEXP = remEXP + '$EXP'" 
     . " WHERE charName = '$charName' AND username = '$username';"; 

    if ($conn->query($sql) !== TRUE) { 
     $error = 'Failed with 1'; 
     break; 
    } else if ($conn->query($sql2) !== TRUE) { 
     $error = 'Failed with 2'; 
     break; 
    } 
} 

if (empty($error)) 
    header("Location: ../lead.php"); 

내가의 질문을 건너 뛸 것 "어디, 당신은에서 그 끔찍한 DB 방식"하지만 무리한 '나는 "성능을 최적화"하나 개의 요청을 모두 만들고 싶어'와 같은 질문을해야 만합니다.

번호가 지정된 스키마에는 SQL 성능이 좋을 수 없습니다. Normalization이 먼저 처리되며 드문 경우이지만 비정규 화가 필요할 것입니다.

+0

앉아있는 것처럼 작동하지 않지만 분명히 여기에 뭔가있는 걸로 생각합니다! 내가 말했듯이 아마 어리석은 단순한 것을 간과 할 것입니다. 고맙습니다 ... 그리고 네가 아마도 DB에 맞을 지 모르지만 이것은 진행중인 작업이고이 복잡한 작업에 대한 첫 번째 찌르기입니다. 사실은 idMarks에 처음 배열을 사용하려했지만 한번 업로드 할 시간이되면 내 삶을 그만 둘 수는 없었습니다. 어느 쪽이든, 아직 배우는 중 ... 다이아몬드는 하루에 만들어지지 않습니다. – NixondisNRVA

관련 문제