Как передать значение переключателя в другую программу и вставить значение в базу данных, используя php и jquery

0

У меня есть форма с несколькими переключателями. Что я хочу сохранить значения переключателя в базе данных, как 1 для "Да" и 0 для "Нет". Я использую пару сценариев a.php, b.php для того же самого, a.php получит значения переключателя и переходит к b.php в качестве параметра. Затем b.php вставляем в базу данных. Проблема здесь в том, что поле базы данных для значения кнопки всегда обновляется с 0. Я попытался реализовать с помощью javascript и некоторой другой php-логики. Но не повезло. Кроме того, я создал другой небольшой скрипт для проверки значения радио, который правильно печатает, который работает нормально. Проблема в том, что я не знаю, как получить правильное значение в "рекомендации" в b.php

Я действительно ценю твою помощь.

a.php выглядит следующим образом:

<div id="result">
<label for="sel1">Would You recomend</label>
                    <div class="pull-left">

  <input name='recommend' type='radio' value=1>Yes

  <input name='recommend' type='radio' value=0>No 

<button class="btn btn-primary btn-sm" id="submit" type="submit" value="submit">submit</button>

b.php

<?php
require_once './config.php';

$pid = intval($_POST["pid"]);
$uid = intval($_POST["uid"]);
$score = intval($_POST["score"]);
$recommend = intval($_POST["recommend"]);

$aResponse['error'] = FALSE;
$aResponse['message'] = '';
$aResponse['updated_rating'] = '';

$return_message = "";
$success = FALSE;


$sql = "INSERT INTO 'tbl_product_rating' ('product_id', 'user_id', 'ratings_score', 'recommend_score') VALUES "
        . "( :pid, :uid, :score, :recommend)";
$stmt = $DB->prepare($sql);

try {

  $stmt->bindValue(":pid", $pid);
  $stmt->bindValue(":uid", $uid);
  $stmt->bindValue(":score", $score);
 $stmt->bindValue(":recommend", $recommend);

  //$stmt->execute(':pid' => $pid, ':uid' => $uid, ':score' => $score, ':recommend' => $recommend));
  $stmt->execute();
  $result = $stmt->rowCount();
  if ($result > 0) {
    $aResponse['message'] = "Your rating has been added successfully";
  } else {
    $aResponse['error'] = TRUE;
    $aResponse['message'] = "There was a problem updating your rating. Try again later";
  }
} catch (Exception $ex) {
  $aResponse['error'] = TRUE;
  $aResponse['message'] = $ex->getMessage();
}

if ($aResponse['error'] === FALSE) {
  // now fetch the latest ratings for the product.
  $sql = "SELECT count(*) as count, AVG(ratings_score) as score FROM 'tbl_products_ratings' WHERE 1 AND product_id = :pid";
  try {
    $stmt = $DB->prepare($sql);
    $stmt->bindValue(":pid", $pid);
    $stmt->execute();
    $products = $stmt->fetchAll();

    if ($products[0]["count"] > 0) {
      // update ratings
      $aResponse['updated_rating'] = "Average rating <strong>" . round($products[0]["score"], 2) . "</strong> based on <strong>" . $products[0]["count"] . "</strong> users";
    } else {
      $aResponse['updated_rating'] = '<strong>Ratings: </strong>No ratings for this product';
    }
  } catch (Exception $ex) {
    #echo $ex->getMessage();
 }
}

echo json_encode($aResponse);
?>

Jquery, который я использую в a.php для отправки значения переключателя в b.php:

<script>
$document.ready(function(){
 $('input[type="radio"]').click(function(){
 var recommend = $(this).val();
$.ajax({
 url:"b.php",
 method:"POST",
 data:{recommend:recommend},
// data:{recommend:$('#recommend').val($("[type='radio'] :checked").val())},
 success: function(data){
 $('#result').html(data);
 }
 });
 });
});
</script>

jquery, чтобы получить pid, uid, score..

<script>
  $(document).on('click', '#submit', function() {
<?php
if (!isset($USER_ID)) {
  ?>
      alert("You need to have a account to rate?");
      return false;
<?php } else { ?>

      var score = $("#score").val();
      if (score.length > 0) {
        $("#rating_zone").html('processing...');
        $.post("update_ratings.php", {
          pid: "<?php echo $_GET["pid"]; ?>",
          uid: "<?php echo $USER_ID; ?>",
          score: score

        }, function(data) {
          if (!data.error) {
            // success message
            $("#avg_ratings").html(data.updated_rating);
            $("#rating_zone").html(data.message).show();
          } else {
            // failure message
            $("#rating_zone").html(data.message).show();
          }
        }, 'json'
                );
      } else {
        alert("select the ratings.");
      }

<?php } ?>
  });
</script>

Я могу вставить значение 1, если "YES" для переключателя с указанным jquery, но он вставляет 0 для других полей, таких как product_id..etc.I хочу, чтобы только одна запись была вставлена в db с правильным значением переключателя вместе с другими полями. Я предоставил полный код для вставки (b.php) с ajax, передающим значение b.php из a.php. Пожалуйста, предложите.

Я хочу вывод в mysql, как показано ниже:

ratings_id product_id user_id ratings_score recommend_score
1          17637       1      4              0

2          17638       2      2              1

Как это происходит сейчас:

ratings_id product_id user_id ratings_score recommend_score
    3           0         0       0              1

    6           17639     2      4              0
  • 0
    С одной стороны, идентификаторы должны быть уникальными. Проверьте свой HTML.
  • 1
    у вас дважды одинаковый id : id='newsletter' - это не сработает.
Показать ещё 3 комментария

3 ответа

0

Пример HTML:

<input type="radio" name="color" id="rdoColor" value="green" />Green<br />
<input type="radio" name="color" id="rdoColor" value="Blue" />Blue<br />

Пример кода JQuery:

$(document).on("click", "input[id=rdoColor]", function(){

      $.post(serverPath+"/colorHandler.php", {action: "saveColor", color: $(this).val()}, function(data){
        var response = $.parseJSON(data); 
        // use this response as u need
      });
  });

Пример PHP (colorHandler.php):

$jsonStr = "";
define('DB_SERVER', 'DBserver:port');
define('DB_NAME', 'DBName');
define('DB_USER', 'dbUser');
define('DB_PASS', 'dbPass');

try {
    $dbCon = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_NAME, DB_USER, DB_PASS);
    $dbCon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "INSERT INTO colorTable (colorName) VALUES (?)";
    $stmt= $dbCon->prepare($sql);
    $stmt->execute(array($_POST["color"]));

    if( $dbCon->lastInsertId() ){

        $jsonStr = '{
                "status":"Success",
                "Message":"Color Saved"
            }';
        echo $jsonStr;      
    }else{

        $jsonStr = '{
                "status":"Failure",
                "Message":"Color was not Saved"
            }';
        echo $jsonStr;      
    }
}catch(PDOException $e){
        $jsonStr = '{
                    "status":"Failure",
                    "Message":"Database server not found!"
                }';
        echo $jsonStr;
}
0

Измените идентификатор на атрибут класса.

 <script type="text/javascript">
    $(document).ready(function() {
        $("input[type=radio]").click(function () {
            var recommend = $(this).val();
            console.log(recommend);
            $.ajax({
                url:"b.php",
                method:"POST",
                data:{
                    recommend:recommend
                },
                success: function(data){
                   //your code here
                },
                error: function (error) {
                    console.log(error);
                }
            });
        });

    });

</script>
 <input name="recommend" class='newsletter' type='radio' value=1>Yes

 <input name="recommend" class='newsletter' type='radio' value=0>No 
  • 0
    Я удалил имя, идентификатор и добавил атрибут класса, но не повезло. :(
  • 0
    попробуйте в ajax data:{recommend: $("input[type='radio'] :checked").val()) если у вас нет других входных радиотэгов на странице
Показать ещё 5 комментариев
0

В вашем ajax, который срабатывает, когда пользователь нажимает на радиокнопку, вы не отправляете другие значения, необходимые для вставки (pid, uid, score). Я полагаю, что они включены в половину показанной формы.

Предполагая, что у вас есть эти данные в вашей форме

<input name="pid" id="pid">
<input name="uid" id="uid">
<input name="score" id="score">

EDIT: поскольку теперь вы показываете больше кода, я обновил код ниже (чтобы соответствовать тому, как вы отправляете pid & uid в обычной форме-submit).

вы можете добавить их в объект данных с чем-то вроде этого:

data:{
   recommend:recommend,
   pid: "<?php echo $_GET["pid"]; ?>",
   uid: "<?php echo $USER_ID; ?>",
   score: $('#score').val(),
},

Также измените двойные идентификаторы #newsletter как предложили другие.

  • 0
    Я использую другой скрипт для передачи значения uid, pid, score в b.php. Пожалуйста, посмотрите и предложите. Что не так с моим кодом.
  • 0
    Другой скрипт - это обычная форма отправки. Я обновил этот ответ, чтобы он соответствовал тому, как вы получаете и отправляете pid & uid в этой форме. В любом случае, вам нужно включить эти значения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню