Как я могу исправить эту неопределенную ошибку индекса? JQuery Ajax в PHP - PullRequest
3 голосов
/ 08 ноября 2011

Я использую Jquery, Ajax и PHP, чтобы попытаться отправить переменную для записи в базу данных mysql.Запрос Ajax выполняется, но переменная не выбирается php.Я не знаю, почему это так.

Используя firebug и console.log (), я вижу, что POST был создан для write_results.php

Если я проверю Ответ, тоговорит

Уведомление : неопределенный индекс: testcore в E: \ write_results.php в строке 2

Вот мойPHP

<?php 
  $testscore=$_POST['testscore'];  //get testscore from Ajax 
  include 'DB.php';
  $con = mysql_connect($host,$user,$pass);
  $dbs = mysql_select_db($databaseName, $con); 
     if (isset($_POST['testscore'])) {  
       $addClient  = "INSERT INTO variables (`id` ,`name`) VALUES (NULL,'$testscore')";  
       mysql_query($addClient) or die(mysql_error());  
       }

?>  

Вот мой ajax-скрипт

<script type="text/javascript">
$(document).ready(function() {  
testscore ="tryagain"; //testvalue to enter into the mysql database
  $.ajax({  
    type: "POST",  
    url: "write_results.php",  
    data: testscore,      
    success: function(){  
      $('#box2').html("success");
    } 
  })
}); 
</script>

Мои вопросы

  1. Почему $ testscore не получает значениеиз сценария AJAX?
  2. Как я могу это исправить?

Ответы [ 3 ]

6 голосов
/ 08 ноября 2011

Вы не говорите JS, как отправлять параметры POST. Измените свой JS на:

data: { 'testscore':testscore },

Это эквивалент "testscore=" + testcore в форме key=value. Он сообщает JS и PHP, что вы хотите, чтобы переменная testscore была сопоставлена ​​с ключом "testscore", который затем вы получите с помощью $_POST['testscore']

Редактировать: См. http://api.jquery.com/jQuery.ajax/, «Отправка данных на сервер»

2 голосов
/ 08 ноября 2011

В вашем php-коде вы получаете значение $ testscore из $ _POST ['testscore']. $ _POST - это суперглобальный массив, а тестовая таблица - это индекс. Индексы этого массива $ _POST взяты из имен полей формы, которую вы публикуете. В вашем случае вы используете ajax для передачи данных на страницу php. Вы можете пройти либо методом GET, либо методом POST. Поскольку вы передаете по протоколу POST, так как вы указали тип: POST в своем коде ajax, вы сможете использовать переменную $ _POST в вашем php-файле. Но вы не указываете индексы массива в своем коде ajax, который будет содержать значения.

testscore ="tryagain"; //It will only assign the value to the javascript variable

Вам необходимо указать пару ключ-значение. Вы можете сделать это одним из способов:

testscore="testscore=tryagain"; //In your php code, the testscore will be the array index and tryagain will be its value.

Вы также можете отправить пару ключ-значение в файл PHP в формате JSON, как показано ниже:

testscore={'testscore':'tryagain'}; 

Если у вас есть несколько значений (например, два) для отправки, вы можете сделать следующее:

testscore={'testscore':'tryagain','index2':'value2'}

И в вашем PHP-коде вы можете получить это, как показано ниже, если использовать post как тип в ajax:

$testscore1=$_POST['testscore']; //It will assign tryagain
$testscore2=$_POST['index2'];    //It will assign value 2
0 голосов
/ 08 ноября 2011

Попробуйте использовать data: "testscore=" + testscore, Данные должны быть отформатированы как строка запроса.

...