2013-11-12 2 views
0

Я ищу сценарий jQuery AJAX вместе с PHP-скриптом, который позволяет хранить информацию на нажатие кнопки. Функция, определенная в jQuery, должна принимать три переменные, все из которых определяются методом предварительной обработки. У меня есть основа для завершения операции, но в конце всех операций - после нажатия кнопки и некоторое время прошло - данные не добавляются в соответствующую базу данных mysql.jQuery AJAX с PHP для загрузки содержимого в MYSQL DB

Вот моя JQuery функция «магазин»

<script type="text/javascript"> 
function store(ud, ld, tp) { 
$.ajax({ 
    url: 'http://www.exampledomain.com/folder/store.php', 
    type: 'POST', 
    data: 'ud='+ud+'&ld='+ld+'&tp='+tp 
    success : function() { 
     alert("WORKED!"); 
    }, 
    error : function() { 
     alert("DIDN'T WORK!"); 
    }, 
    complete : function() { 
    } 
    }); 
} 
</script> 

Вот файл store.php (очень простой, я знаю, у меня есть еще и обеспечить этот сценарий с помощью дезинфицирующего пользовательского ввода)

<?php 

require ('../mysqli_connect.php'); 

$errors = 0; 

if(isset($_POST['ud']) && is_numeric($_POST['ud'])) { 
    $ud = $_POST['ud']; 
} else { 
    ++$errors; 
} 
if(isset($_POST['ld']) && is_numeric($_POST['ld'])) { 
    $ld = $_POST['ld']; 
} else { 
    ++$errors; 
} 
if(isset($_POST['tp'])) { 
    $tp = strip_tags(stripslashes($_POST['tp'])); 
} else { 
    ++$errors; 
} 

if($errors == 0) { 

    $q = "INSERT INTO table_name (column_1, column_2, column_3, column_4) VALUES ('$ld', '$ud', NOW(), '$tp')"; 
    mysqli_query($mysqli, $q); 

} else { 

echo 'There was a problem!'; 

} 
?> 

Предположим, что у меня есть onclick = "store (3, 3, A)" как атрибут для определенного элемента. Как я могу это исправить? Если я удалю атрибут onclick, как передать необходимые параметры функции jQuery? Я ценю любую помощь!

< - EDIT ->

Новый JQuery & AJAX скрипт ...

<script type="text/javascript"> 

function store(ud, ld, tp) { 
    $.ajax({ 
     url: 'http://www.exampledomain.com/folder/store.php', 
     type: 'POST', 
     data: 'ud='+ud+'&ld='+ld+'&tp='+tp, 
      error : function() { 
      alert("error"); 
     }, 
     success : function(data) { 
      alert(data); 
     }, 
     complete : function() { 
      alert("complete"); 

     } 
    }); 
} 

$(function() { 
    $("a.rec").on("click", function() { 
    var $this = $(this), 
     ud = $this.data("ud"), 
     ld = $this.data("ld"), 
     tp = $this.data("tp"); 

    store(ud, ld, tp); 
    }); 
}); 

</script> 

Пересмотренный PHP

<?php 
if($_SERVER['REQUEST_METHOD'] === "POST"){ 

require ('../mysqli_connect.php'); 

$errors = 0; 

if(isset($_POST['ud'])) { 
    $ud = $_POST['ud']; 
} else { 
    ++$errors; 
} 
if(isset($_POST['ld'])) { 
    $ld = $_POST['ld']; 
} else { 
    ++$errors; 
} 
if(isset($_POST['tp'])) { 
    $tp = $_POST['tp']; 
} else { 
    ++$errors; 
} 

if($errors == 0) { 

    $q = "INSERT INTO table_name (column_1, column_2, column_3, column_4) VALUES ('$ld', '$ud', NOW(), '$tp')";  
    mysqli_query($mysqli, $q); 

} else { 

    echo 'There was a problem!'; 

} 

} else { 

    $url = 'http://www.exampledomain.com/error.php'; 
    ob_end_clean(); 
    header("Location: $url"); 
    exit(); 

} 
?> 

Теперь для моего HTML

<li> 
<div class="sample classes"> 
<a class="rec" data-ud="13" data-ld="10" data-tp="SCI"> 
<input type="submit" title="Something" value="Something" /> 
</a> 
</div> 
</li> 

Однако, когда эта кнопка нажата, она все равно ничего не делает!

+0

[Использовать подготовленный запрос] (http://php.net/manual/en/mysqli.prepare.php) –

+0

Незначительная опечатка может быть третьим параметром вашей функции 'store'; у вас есть 'type', но используйте' tp' в запросе. Попробуйте проверить, что данные проходят, как ожидалось, просто сбрасывая данные в вашем PHP-скрипте и проверяя его. Затем убедитесь, что запрос вызывается вообще. Убедитесь, что 'mysqli_query()' не возвращает ошибку, так как у вас нет ошибок. – Demonslay335

+0

@ Demonslay335 благодарю вас за головы! Я забыл изменить имя передаваемых переменных, поскольку я просматривал свой код, чтобы сделать его более общим (я думал, что это поможет). – CFitz

ответ

1

Как вы сказали, onclick - это то, чего вы хотите избежать. Так вы это делаете.

$(function() { //This function will be ran when the page loads 
    $(".button-class").on("click", function() { //This will run when any button is clicked 
    var $this = $(this), 
     ud = $this.data("ud"), 
     ld = $this.data("ld"), 
     tp = $this.data("tp"); 

    store(ud, ld, tp); 
    }); 
}); 

HTML

<input type="button" class="button-class" data-ud="3" data-ld="3" data-tp="A"/> 
+0

Это кажется приятным и простым. Что касается значений, которые будут переданы функции store, будет несколько кнопок с различными значениями, так что лучший способ получить такие значения с помощью функции()?Кроме того, все кнопки должны иметь одинаковый идентификатор, правильно (чтобы не создавать несколько функций для извлечения информации)? – CFitz

+0

Итак, есть несколько кнопок? И разные данные для каждой кнопки? В этом случае вы не хотите использовать идентификаторы, уникальный идентификатор. Вы хотите использовать класс, и все кнопки должны иметь этот класс. Данные также немного сложны, вы можете хранить данные с помощью 'jQuery.data'. Я обновляю свой ответ, чтобы отобразить несколько кнопок. –

+0

Действительно, есть несколько кнопок с различной информацией, заданной через PHP. Я смотрел ответ до/ниже вашего, и он упомянул способ передачи информации ... Моя проблема в том, как получить такую ​​информацию! Я не очень хорошо знаком с jQuery, но я просто добавляю атрибуты «данные» к каждой кнопке? – CFitz

0

Я считаю, что проще использовать JSON и передать переменные объекта на сервер:

<script> 
    (function(){ 

     var store = function (ud, lrid, type) { 

      var data = { 
         ud:ud, 
         lrid:lrid, 
         type:type 
       }; 

      $.ajax({ 
       url: 'http://www.exampledomain.com/folder/store.php', 
       type: 'POST', 
       data: data, 
       success : function(data) { 
        alert(data); 
       }, 
       error : function() { 
        alert("DIDN'T WORK!"); 
       }, 
       complete : function() { 
       } 
       }); 
     }; 


     $('#btn').on('click', function(){ 

      store(1,2,3); 

     }); 

    }()); 
    </script> 

Используйте этот скрипт для проверки вы получаете переменные со стороны сервера:

<?php 
# Put this in http://www.exampledomain.com/folder/store.php to test it works 
if($_SERVER['REQUEST_METHOD'] === "POST"){ 
    if(
     isset($_POST['ud']) && 
     isset($_POST['lrid']) && 
     isset($_POST['type']) 
    ) 
    { 
     $var = $_POST['ud'] . ", ".$_POST['ud'] . ", ".$_POST['type'] ." passed successfully via ajax!"; 
     echo json_encode($var); 
    } 

} 
?> 
+0

Я ценю ответ, я просмотрю некоторые документы JSON, чтобы попытаться реализовать его правильно. – CFitz

+0

Я забыл добавить атрибут dataType: "json" после данных в $ .ajax. Таким образом, это не совсем JSON, и в этом случае json_encode не требуется. –

Смежные вопросы