$_POST 正在删除单引号(或如何将单引号放入 $_POST)[重复]
Posted
技术标签:
【中文标题】$_POST 正在删除单引号(或如何将单引号放入 $_POST)[重复]【英文标题】:$_POST is removing a single quote (OR how to get a single quote into a $_POST) [duplicate] 【发布时间】:2021-09-21 05:40:24 【问题描述】:首先想说我仍然是一个初学者开发人员,但在很短的时间内取得了长足的进步,我有点难过。是的,我知道我的代码在布局上可能不是很漂亮,但仍在学习,至少一切正常。
我正在创建类似于节目客户端门户的东西。一位客户通过录取表格报名参加演出。当他们提交表单时,它会转到 Monday.com,在 Dropbox 中创建一个文件夹和子文件夹,然后将所有内容插入我的 mysql 数据库。然后我还有另一个页面(资产),他们可以根据节目上传文件。现在,如果他们已经注册了多个节目,则在此页面的顶部我有一个下拉框,其中包含分配给他们使用的 ID 的所有节目。当他们点击他们想要添加文件的节目,然后点击“为资产上传选择节目”按钮时,它会返回数据库以检索保管箱路径和文件请求 url,并将其放入这些变量所在的代码中被分配。所以,除了单引号(撇号)的节目外,一切都很好。当我添加一个测试节目并且一切都变得疯狂时,我注意到了这一点。在星期一和 Dropbox 的代码中使其正确,甚至将其插入到数据库中时,我能够弄清楚一切。在数据库列中,它有“Michael's”而不是“Michael\'s”,所以这正是它应该在那里的样子。在下拉列表中,它实际上显示“Michael's”,但是当我在单击按钮后进行回显时,它显示“Michael”所以单引号肯定是问题所在,经过大量搜索,这就是我不知道如何解决它的地方通过网络。
在下拉列表中列出(显示测试,我真的做到了吗!!,达德利,神奇的 MA,让我们看看这是否有效,迈克尔的)。
代码是:
<div class="topdiv">
<h2 style="text-align: center;">Assets Upload</h2><br>
</div>
<?php
$userid = $_SESSION["userid"];
$sql = "SELECT * FROM intake WHERE userid = ?;";
$stmt = mysqli_stmt_init($con);
if(!mysqli_stmt_prepare($stmt, $sql))
echo "There was an internal error!";
exit();
else
mysqli_stmt_bind_param($stmt, "s", $userid);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
?>
<form class="formcenter" action="assets.php" method="post">
<select name="show" id="show">
<?php
while ($rows = mysqli_fetch_assoc($result))
$show = $rows['showtitle'];
echo "<option value='$show'>$show</option>";
?>
</select>
<input type="submit" name="chooseShow" value="Choose Show For Asset Upload"><br><br>
</form>
<?php
if(isset($_POST["chooseShow"]))
$showTitle = $_POST["show"]; //WHEN I DO AN ECHO OF THIS IT SHOWS "MICHAEL" NOT "MICHAEL'S"
$sql = "SELECT * FROM intake WHERE userid = ? and showtitle = ? ;";
$stmt = mysqli_stmt_init($con);
if(!mysqli_stmt_prepare($stmt, $sql))
echo "There was an internal error!";
exit();
else
mysqli_stmt_bind_param($stmt, "ss", $userid, $showTitle);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$rows = mysqli_fetch_assoc($result);
$path = $rows['dbxPath'];
$requestURL = $rows['requestURL'];
echo $show; //THERE JUST TO SEE WHAT IT WAS OUTPUTTING
echo $showTitle; //THERE JUST TO SEE WHAT WAS OUTPUTTING
?>
当我在代码 $show = "Michael's" 和 $showTitle = "Michael" 的末尾执行两个回显时。所以我知道正确的方法正在通过,但只是无法抓住它放入最后一个 $sql 变量以用作 $showTitle 授予,我假设 $show 显示“Michael's”,因为它是最后一个节目在循环。但是当我在 mysqli_stmt_bind_param 语句中测试 $show 而不是 $showTitle 时,它确实有效,所以我知道这是可能的。只需要知道如何将完整的“Michael's”放入我的 $showTitle 变量中。
感谢您花时间浏览这个冗长的(试图为您提供尽可能多的信息)问题,并感谢您提供任何帮助和建议。
-迈克尔
【问题讨论】:
这个问题经常被问到,我会尝试用完整的解释来寻找答案,但发生的事情是option value=''
上的报价关闭得太早了。使用 htmlentities() 和 ENT_QUOTES 选项来转义内部引号以在 HTML 属性中使用。 $show = htmlentities($rows['showtitle'], ENT_QUOTES);
【参考方案1】:
你的问题在这里:
echo "<option value='$show'>$show</option>";
变量$show
中的单引号干扰了包裹value
的单引号。
改成这样:
echo '<option value="'.$show.'">'.$show."</option>";
这显式地连接字符串的各个部分,而不是对其进行插值。它可以更好地控制使用的引号和位置。
【讨论】:
这工作@Tangentially!非常感谢!以上是关于$_POST 正在删除单引号(或如何将单引号放入 $_POST)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将单引号 (') 捕获到 JSON.parse 的字符串中?
Python如何将单引号转换为双引号以格式化为json字符串