php在变量结束时丢失+(加号)

时间:2017-12-03 17:11:25

标签: javascript php jquery sql ajax

我找不到任何地方,这是我认为的独特问题。

我想添加等级结尾加上诸如B +,C +或D +。我可以添加A-,B-,C-和D-或任何其他A,B,C,D,F级。但是,当我想用​​加号添加变量时,它就消失了。有人可以在我的代码中看到任何问题。

index.php的一小部分

var subjectone = $('#selectedsubjectone :selected').val();
var courseone = $('#courseListone').val();
var gradeone = ($('#selectedGradeOne :selected').val());

var div = document.getElementById("dom-target");
var username = div.textContent;
username = username.trim().replace(/ /g, '%20');

if(gradeone != 'gradesvalue'){
  var enrolledone ="username="+username+"&subject="+subjectone+"&grade="+gradeone+"&course="+courseone;          //I CHECK THERE IS NO PROBLEM HERE. IT SHOWS WITH PLUS.
       $.ajax({
         type: "POST",
         url: "updatecourse.php",
         data: enrolledone,
         success: function(data) {}
       });

有两个类似的php文件,其中一个用于插入其中一个用于更新。 这是updatecourse.php

<?php
include_once "connection.php";

if(isset($_POST["username"]) && isset($_POST["subject"]) && isset($_POST["course"]) && isset($_POST["grade"])){

    $nick = urldecode($_POST["username"]);
    $subject=urldecode($_POST["subject"]);
    $course=urldecode($_POST["course"]);
    $grade=urldecode($_POST["grade"]);
    echo "$nick - $subject - $course - $grade";  //IT SHOWS B, NOT B+ IN HERE.
    $prep = $con->prepare("UPDATE enrolledtable SET grade=? WHERE nickname=? AND subject=? AND course=?");

    $prep->bind_param("ssss", $grade, $nick, $subject, $course);
    $send = $prep->execute();

    if ($send == TRUE) {
        echo "Courses added successfully";
        //header('Location: index.php');
        exit();
    } else {
        echo "Error: " . $con->error;
        //header('Location: index.php');
        exit();
    }
  }?>

在php部分B +变为B,C +变为C. php中的问题是什么?或者我应该在js中更改数据类型。

3 个答案:

答案 0 :(得分:1)

您面临的问题是查询中的+被解释为空格。只需使用JS encodeURIComponent()对您的成绩进行编码。

var subjectone = $('#selectedsubjectone :selected').val();
var courseone = $('#courseListone').val();
var gradeone = ($('#selectedGradeOne :selected').val());

var div = document.getElementById("dom-target");
var username = div.textContent;
username = username.trim().replace(/ /g, '%20');

if(gradeone != 'gradesvalue'){
  var enrolledone ="username="+username+"&subject="+subjectone+"&grade="+encodeURIComponent(gradeone)+"&course="+courseone;          //I CHECK THERE IS NO PROBLEM HERE. IT SHOWS WITH PLUS.
       $.ajax({
         type: "POST",
         url: "updatecourse.php",
         data: enrolledone,
         success: function(data) {}
       });

答案 1 :(得分:1)

如果你改变了这一点会发生什么:

$grade=urldecode($_POST["grade"]);

到此:

$grade=$_POST["grade"];

由于加号是一个urlencoded空间,并且$_POST变量不需要解码,我猜你在这里意外剥离

答案 2 :(得分:0)

使用JavaScript函数encodeURIComponent对变量值进行编码。