gpt4 book ai didi

php - PDO bindValue 适用于其他输入,为什么这个不行?

转载 作者:可可西里 更新时间:2023-11-01 07:39:38 24 4
gpt4 key购买 nike

我正在构建一个用户可以更新书籍属性的表单。有一个动态生成的 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

我将其组织为一个 switch 语句,因为表单中的代码只传递在发布中更改过的字段(“bookidfield”输入除外,它对其中的每个项目都有唯一的键.) 使用开关,只运行必要的查询。

“标题”和“作者”字段工作正常;他们毫无问题地更新到新值。但是,“描述”字段始终更新为“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 表中,它会将第 184 本书的标题更改为“Gross Boogers and Such”,将作者更改为“Franny Panties”,但会将描述更改为“184”。一定跟我使用 bindValue() 有关系吧?或者它与我的循环有关?表格是如何命名的?我看它太久了,看不出它到底是什么。

感谢 Stackoverflow,你们太棒了。

最佳答案

您的问题是,当 $col 与标题、作者或描述不同时,换句话说,当开关执行默认情况时,您正在执行上一个 $nowfield = 184 的查询。您不能执行该查询。

当 switch 执行默认情况时,您必须“跳转”到下一个值,跳过查询执行。

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

关于php - PDO bindValue 适用于其他输入,为什么这个不行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25069178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com