$_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)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP 如何将单引号字符串与双引号字符串连接起来。

如何将单引号 (') 捕获到 JSON.parse 的字符串中?

Python如何将单引号转换为双引号以格式化为json字符串

将单引号和双引号传递给python脚本

VS Code Auto Indent / Code Formatting 将单引号改为双引号

编辑 .plist 文件 - 是不是允许将单引号用作字符串?