2015-05-07 2 views
0

У меня возникла очень странная проблема с jQuery $ .post и php.php не получает jquery post variables (работает на одном mac, а не на другом)

Моя главная страница вызова следующей функции:

function sell(){ 
var table = document.getElementById('saleTab'); 
var count = table.getElementsByTagName('tr').length; 
var listID = new Array(); 
var listPrice = new Array(); 
var listQTY = new Array(); 
count--; 

var discount = document.getElementById('discountAmount').innerHTML; 

while(count > 0){ 
    var allRow = table.getElementsByTagName('tr'); 
    var allColumn = allRow[count].getElementsByTagName('td'); 
    listID[count-1] = allColumn[0].getElementsByTagName('input').item(0).value; 
    listPrice[count-1] = allColumn[2].getElementsByTagName('input').item(0).value; 
    listQTY[count-1] = allColumn[3].getElementsByTagName('input').item(0).value; 
    count--; 
} 

$.post('handler/addSales.php', 
    {id:listID, price:listPrice, qty:listQTY, discount:discount}, 
    function (data){ 
     //document.getElementById('searchResults').innerHTML = data; 
     //console.log(data); 
    }); 
    location.reload(); 

}

Когда функция вызывается переменные правильно отправлены на страницу addSales.php. поджигатель консоль сообщает следующее после выхода при продаже теоретический один элемент:

discount  
id[] itemname 
price[] 5,50 
qty[] 1 

так что переменная после отсылаются, но файл PHP не получает их должным образом. вот PHP файл addSales.php:

<?php 
require_once('../connection.php'); 
require_once('../functions.php'); 

if(!empty($_POST)){ 
    $id = $_POST['id']; 
    $price = $_POST['price']; 
    $qty = $_POST['qty']; 
    $count = count($id); 
    $count--; 
    $discount = euroToDollar($_POST['discount']); 

    mysql_query("INSERT INTO sales (date, time, discount) values (CURRENT_DATE(), CURRENT_TIME(), '$discount')") or die(mysql_error()); 
    $lastEntry = mysql_insert_id(); 

    while($count >= 0){ 
     $newPrice = euroToDollar($price[$count]); 
     mysql_query("INSERT INTO sales_item (salesID, itemID, qty, sellingPrice) VALUES ('$lastEntry', '$id[$count]', '$qty[$count]', '$newPrice')") or die(mysql_error()); 
     $newQTY = fetchRecord('item', 'qty', $id[$count]) - $qty[$count]; 
     //$newQTY = $newQTY - $qty[$count]; 
     mysql_query("UPDATE item SET qty = '$newQTY' WHERE id = '$id[$count]'") or die(mysql_error()); 
     $count--; 
    } 
} 
mysql_close(); 

>

Обратите внимание, что этот скрипт работает на Macbook Pro моего borther с MAMP установлен (PHP 5.4.10) и не работает на моем Macbook Pro !
только 2 отличия: версия для мам. Мой macbook имеет последнюю версию mamp (php 5.6.7). и факт, что я не могу включить xcache из настроек мама на моем mac (он останавливает/запускает сервер и возвращается к отключенному), в то время как он включен на ноутбуке моего брата. Это заставляет меня сходить с ума, так как я не вижу причины, по которой он не должен работать на моем mac.

Любая помощь приветствуется,

Это то, что мои состояния лог ошибок:

[07-May-2015 22:38:34 Европа/Берлин] PHP Warning: session_start(): Не удается отправить куки сессии - заголовки, уже отправленные (вывод запущен в /Applications/MAMP/htdocs/GESTIONALE_BIRRE/index.php:2) в /Applications/MAMP/htdocs/GESTIONALE_BIRRE/index.php в строке 3 [07-May-2015 22:38 : 34 Europe/Berlin] PHP Warning: session_start(): Не удается отправить ограничитель кеша сеанса - уже отправленные заголовки (вывод запущен в /Applications/MAMP/htdocs/GESTIONALE_BIRRE/index.php-2) в/Applications/MAMP/htdocs/GESTIONALE_BIRRE /index.php в строке 3

ОБНОВЛЕНИЕ Я поменял скрипты во всех файлах на mysqli и удалил все сеансы. функция продажи javascript осталась прежней, и это пороговое значение передало переменные через метод post должным образом. новый код addSales.php файла:

<?php 
require('../connection.php'); 
require('../functions.php'); 

if($_POST){ 
    $id = $_POST['id']; 
    $price = $_POST['price']; 
    $qty = $_POST['qty']; 
    $count = count($id); 
    $count--; 
    $discount = euroToDollar($_POST['discount']); 

    $mysqli->query("INSERT INTO sales (date, time, discount) values (CURRENT_DATE(), CURRENT_TIME(), '$discount')"); 
    $lastEntry = mysql_insert_id(); 

    while($count >= 0){ 
     $newPrice = euroToDollar($price[$count]); 
     $mysqli->query("INSERT INTO sales_item (salesID, itemID, qty, sellingPrice) VALUES ('$lastEntry', '$id[$count]', '$qty[$count]', '$newPrice')"); 
     $newQTY = fetchRecord('item', 'qty', $id[$count], $mysqli) - $qty[$count]; 
     //$newQTY = $newQTY - $qty[$count]; 
     $mysqli->query("UPDATE item SET qty = '$newQTY' WHERE id = '$id[$count]'"); 
     $count--; 
    } 
} 

$mysqli->close(); 
?> 

Теперь журнал ошибок не показывает никаких сообщений об ошибках, в отличие от ранее, но сценарий addSales все еще не работает.

+0

Расширение 'mysql' устарело от PHP 5.5. Я бы предположил, что первое, что вы делаете, это заменить это использование 'mysqli' или' PDO' для доступа к базе данных. –

+0

Кроме того, функция 'euroToDollar()' преобразует запятую десятичный разделитель с периодом, который может потребоваться на основе типа поля базы данных? –

+0

Наконец, у вас абсолютно нет ошибок при обращении к базе данных. Вам необходимо добавить код для обработки неожиданного сбоя и зарегистрировать наши сообщения об ошибках. Это очень поможет вам в отладке кода. –

ответ

0

Ошибки, которые вы видите, не связаны с jQuery, они говорят, что сеанс уже запущен. Где бы вы звоните session_start, вы должны назвать это так:

if (session_status() == PHP_SESSION_NONE) { 
    session_start() 
} 

Однако, если ваш живой сервер работает PHP < 5.4, вы должны сделать это следующим образом:

if (session_id() == "") { 
    session_start() 
} 
+0

Я изменил строку 3 в индексе php с session_start() до вашего первого варианта. Я все равно получаю такое же сообщение об ошибке в журнале. используя PHP 5.6.7 – 4e20

+0

Если вы читаете журнал, он сообщает вам, что 'index.php' отправил заголовки, что означает какой-то другой файл. Сделайте поиск в кодовой базе для 'session_start' и выполните одно и то же изменение – charmeleon

+0

Я обновил все файлы в mysqli и удалил ВСЕ session_start или что-то по сравнению с сеансами. Проблема сохраняется. проверьте обновленное исходное сообщение – 4e20

0

Если бы все изменить сценарии для mysqli для текущей версии php и кажется, что проблема была вызвана местоположением.перезагрузить(); вне возврата $ .post в функции javascript. Это не позволяло функции работать правильно.

Так что я изменил код из:

$.post('handler/addSales.php', 
{id:listID, price:listPrice, qty:listQTY, discount:discount}, 
function (data){ 
    //document.getElementById('searchResults').innerHTML = data; 
    //console.log(data); 
}); 
location.reload(); 

к:

$.post('handler/addSales.php', 
{id:listID, price:listPrice, qty:listQTY, discount:discount}, 
function (data){ 
    //document.getElementById('searchResults').innerHTML = data; 
    //console.log(data); 
    location.reload(); 
}); 

И это сработало !!