2012-03-13 2 views
2

저는 MySQL과 PHP에 매우 익숙하며 언젠가 제 자신을 가르쳐 왔습니다. 누구든지 내 코드를 작성해 줄 것을 기대하지는 않지만이 스크립트를 진행하는 최선의 방법에 대한 제안을 찾고 있습니다.비어 있지 않은 양식의 필드 만 업데이트하는 방법

특정 세트의 제품에서 "기술 수준"을 업데이트 할 수있는 일련의 사용자가 있습니다. 그 순간, 나는 그 모든 일을했습니다. 그러나 사용자가 제출할 때마다 모든 기술 수준을 업데이트해야하는 것은 아닙니다.

즉, 필드를 공백으로 남겨두고 다른 필드에 기술 수준을 입력하여 입력 한 필드 만 업데이트하도록 할 수 있습니다.

저는 dev 서버에서이 모든 것을하고 있습니다. 그래서 현재 제가 작업하고있는 코드가 있습니다.

mysql_connect("127.0.0.1","root","time2start") or die("Connection Failed"); 
mysql_select_db("joomla_dev_15") or die ("Database Connection Failed"); 
$user = $_POST['user']; 
$USP = $_POST['USP']; 
$USPV = $_POST['USPV']; 
$VSP = $_POST['VSP']; 
echo "$user<br />"; 
echo "$USP<br />"; 
echo "$USPV<br />"; 
echo "$VSP<br />"; 

$query = "UPDATE `joomla_dev_15`.`enterprise_storage` SET `$user` = '$USP' WHERE `enterprise_storage`.`id` = 1;"; 
if(mysql_query($query)) 
{ 
    echo "updated<br />"; 
}else{ 
    echo "FAILURE"; 
} 

$query = "UPDATE `joomla_dev_15`.`enterprise_storage` SET `$user` = '$USPV' WHERE `enterprise_storage`.`id` =2;"; 
if(mysql_query($query)) 
{ 
    echo "updated<br />"; 
}else{ 
    echo "FAILURE"; 
} 

$query = "UPDATE `joomla_dev_15`.`enterprise_storage` SET `$user` = '$VSP' WHERE `enterprise_storage`.`id` =3;"; 
if(mysql_query($query)) 
{ 
    echo "updated<br />"; 
}else{ 
    echo "FAILURE"; 
} 

도움이나 의견을 보내 주시면 감사하겠습니다.

+1

+1 올바른 태도라면 지금 당장 도움을받을 시간이 없어야합니다. –

+2

사용자가 의도적으로 해당 필드를 비워두면이를 고려 했습니까? 사용자가 비워두기를 원하기 때문에 스크립트가 필드 오른쪽으로 업데이트되지 않습니까? – Joseph

+0

어쨌든 mysql 문을 작성해야하므로 값을 반복하고 SQL 쿼리에 공백이 아닌 공백 만 포함하면됩니다.또한 양식을 현재 데이터베이스 값으로 채우는 것을 고려하십시오. – bkconrad

답변

-1

양식 값이 비어 있는지 확인하고 데이터베이스에 게시하지 마십시오. 또한 데이터베이스에 입력하기 전에 사용자 입력을 정리해야합니다. 예를 들어 http://php.net/manual/en/function.mysql-real-escape-string.php을 참조하십시오.

+3

와우, 두 개의 downvotes? 그것은 예상치 못한 일입니다. 적어도 내 대답에 대해 싫어하는 것을 말해 줄 수 있습니다. – Aerik

+0

나는 downvote를 didnt하지만 나는 당신이 대답을 생각하고 좀 더 자세하게 설명 할 필요가 있다고 말할 것입니다. –

+0

클렌징이 필요하다는 것에 동의합니다, 나는 아직 그 시점에 있지 않습니다. 빈 입력에 대해 무슨 뜻인지 알 겠지만, 실제로 빈 입력을 허용하고 싶지는 않습니다. 내 의견을 통해이를 해결하기 위해 adidasadida를 찾고 있습니다. 당신이 그것의 아래 표를받을 자격이있다라고 생각하지 마라 :) – user1267673

0

어쩌면 이걸 완전히 이해하지 못하고 있지만 UPDATE 문 앞에 변수를 확인해도 충분할 수 있습니다.

$user = $_POST['user']; 
$USP = $_POST['USP']; // Make sure to escape this 

if (!empty(trim($USP))) { // Added a trim so that when space is entered, it will still be considered empty 
    $query = "UPDATE `joomla_dev_15`.`enterprise_storage` SET `$user` = '$USP' WHERE `enterprise_storage`.`id` = 1;"; 
    if(mysql_query($query)) 
    { 
    echo "updated<br />"; 
    }else{ 
    echo "FAILURE"; 
    } 
} 
else { 
    echo "Empty String. Nothing to Do" 
} 
+0

당신 말이 맞아, 나는 이것을 아주 잘 설명했다고 생각하지 않는다. 내가하려는 일을 설명하는 가장 좋은 방법은 특정 사용자의 "기술"집합을 형식으로 가져 오는 것입니다. 이 양식에서는 데이터베이스에있는 현재 기술 수준 항목을 가져 와서 텍스트 상자의 "기본값"을 현재 가지고있는 것과 동일하게 만듭니다. 이렇게하면 사용자는 양식을 계속해서 완벽하게 작성하지 않고도 자신의 기술 수준을 모두 또는 1대로 업데이트 할 수 있습니다. – user1267673

0

나는 저에게 만족스러운 방식으로 알아낼 수있었습니다.

이 코드가 반드시 악의적 인 공격으로부터 보호되거나 보호되는 것은 아니며, 이는 단순히 dev_server이므로 개념을 증명할 수 있으며 나중에 다시 돌아와 보안을 설정합니다.

이 또한 나 자신을 가르쳐, 그래서이 사용자의 능력을 현재의 디폴트 값을 얻기 위해이

을 할 수있는 가장 효율적인 방법 가장 가능성이없는,이 쿼리를 실행했다

$result = mysql_query("SELECT id , user FROM enterprise_storage WHERE id =1"); 
if (!$result) { 
echo 'Could not run query: ' . mysql_error(); 
exit; 
} 
$row1 = mysql_fetch_array($result); 

이렇게하면이 특정 쿼리를 기반으로 반환 된 각 행에 변수를 할당 할 수있었습니다. 따라서이 경우 제품 ID "1"에 대한 기술 수준을 반환하는 사람 (이 예에서는 "사용자")이 표시됩니다.

변수를 지정하려는 몇 가지 항목에 대해이 동일한 쿼리를 실행하면 각 텍스트 상자에 대한 기본 값으로 내 HTML 양식이 장소 :

Please enter your skill level on the following products:</br> 
USP: <input type="text" name="USP" value=<?php echo $row1[user]?> /><br /> 
USPV: <input type="text" name="USPV" value=<?php echo $row2[user]?> /><br /> 
VSP: <input type="text" name="VSP" value=<?php echo $row3[user]?> /><br /> 

나는 그와 관련이없는 때문에 지금의 HTML의 나머지 부분을 생략했습니다. 결국이 방법은 기본값을 양식 필드에 배치하므로 사용자가 원하지 않는 경우 해당 값을 업데이트 할 필요가 없으므로 문제가 해결됩니다.

모든 제안 주셔서 감사합니다!

관련 문제