문제

사용자가 책의 속성을 업데이트 할 수있는 양식을 구축하고 있습니다. 사용자가 "제목", "작성자"및 "설명"과 같은 것들에 대한 새 값을 입력 할 수있는 동적으로 생성 된 HTML 양식이 있습니다.

echo "<form id=changerform name=changerform action=updatesubmit.php method=post>";
echo "<span id=titlebox>Title: <input class=attributefield style='border:none' type=text size=100 id=Title value='".$item['Title']."' />Change This?</span> <br>";
echo "<span id=authorbox>Author: <input class=attributefield style='border:none' type=text id=Author value='".$item['Author']."' />Change This?</span><br>";
echo "<span id=description>Description: <textarea class=attributefield style='border:none' rows=9 cols=100 name=Description id=Description >".$item['Description']."</textarea></span>";
echo "<input type='hidden' id='bookidfield' name='bookidfield' value = '".$toChange."' />";
.

이 양식은 다음과 같은 PHP에 의해 처리됩니다.

        while($nowfield = current($_POST)){

    $col = key($_POST);

    switch($col){
        case 'Title':
        $qstring = 'UPDATE Mainbooks SET Title = :slug WHERE ItemID LIKE :bookid;';
        break;

        case 'Author':
        $qstring = 'UPDATE Mainbooks SET Author = :slug WHERE ItemID LIKE :bookid;';
        break;

        case 'Description':
        $qstring = "UPDATE Mainbooks SET Description = :slug WHERE ItemID LIKE :bookid;";
        break;

        default:
        echo "Invalid input";
        break;

        }//end switch

    $upquery = $safelink->prepare($qstring);
    $upquery->bindValue(':slug', $nowfield, PDO::PARAM_STR);
    $upquery->bindValue(':bookid', $_POST['bookidfield'], PDO::PARAM_INT);
    $upquery->execute();

next($_POST);





} //end while
.

POST에서 변경된 필드 만 전달하는 양식에만 코드가 있기 때문에 SWITCH 문으로 구성했습니다. )) 스위치를 사용하면 필요한 쿼리 만 실행됩니다.

'title'과 '저자'필드는 잘 작동합니다. 그들은 새로운 값으로 문제없이 업데이트합니다. '설명'필드는 항상 'bookidfield'의 가치를 업데이트합니다. 내가 들어가서 ': BookID'매개 변수를 내가 원하는 책의 ID로 수동으로 변경하면 해결할 수 있습니다.

내가 var_dump(_$POST) 인 경우 올바른 키 값으로 오는 것처럼 보이는 것처럼 보입니다 :

    array(4) { ["Title"]=> string(22) "Gross Boogers and Such" ["Author"]=> string(14) "Franny Panties" ["Description"]=> string(55) "This is the value I want to change the description to!!" ["bookidfield"]=> string(3) "184" }
.

그러나 SQL 테이블에서는 Book 184의 제목이 "총 부가자와 그런", "Franny Panties"로 변경되지만 "184."에 대한 설명이 변경됩니다. BindValue ()를 사용하는 것과 관련이있는 것이 있어야합니다. 또는 루프와 관련이 있습니까? 그것은 양식의 이름이 어떻게 지정되었는지입니까? 나는 그것이 무엇이든간에보기가 너무 오래보고있었습니다.

감사합니다 Stackoverflow, 당신은 훌륭합니다.

도움이 되었습니까?

해결책

귀하의 문제는 $ col이 제목, 작성자 또는 설명과 다른 경우, 스위치가 $ NOTFIELD= 184로 이전 쿼리를 실행하는 기본 대소 문자를 실행할 때 쿼리를 실행해서는 안됩니다.

스위치가 기본 경우를 실행하면 다음 값으로 "점프"를 입력하여 쿼리 실행을 건너 뜁니다.

default:
    echo "Invalid input";
    next($_POST);
    continue 2;
    break;
.

다른 팁

설명 <textarea>에 대해 HTML이 끊어졌습니다.당신은 가지고 있습니다 ...

<textarea ... name=Description id=Description />".$item['Description']."</textarea>
<!--                                          ^ there's your problem -->
.

여기서

<textarea ... name=Description id=Description>".$item['Description']."</textarea>
.


내 의견에서 언급했듯이 HTML을 생성하는 방식은 문제를 일으킬 수 있습니다.이 접근법을 취하는 것이 좋습니다 ...

// leave the PHP context
?>
<form id="changerform" action="updatesubmit.php" method="post">
    <span id="titlebox">
        Title:
        <input class="attributefield" type="text" id="Title" value="<?= htmlspecialchars($item['Title']) ?>">
        Change This?
    </span>
    <!-- you get the idea -->
</form>
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top