2015-01-11 2 views
-5

Надеюсь, для этого просто нужен двухминутный ответ от какой-то души.Новичок - попытка обновить запись базы данных из JQuery

Веб-страница PHP отображает содержимое записи базы данных. Это прекрасно работает. База данных открывается, и запись отображается правильно для заданного $ refno.

Функция, которую я пытаюсь добавить, - это обновить эту запись (заменив все, что находится в поле статуса с помощью «X»), нажав Ctrl + Shift + Z.

Я нашел несколько JQuery для прослушивания сочетаний клавиш Ctrl + Shift + Z, и это также работает. Но что не работает - это обновление!

Код (см. Ниже) содержит предупреждение (только для целей тестирования).

Если я опускаю строку с UPDATE, тогда срабатывает предупреждение, поэтому я могу сказать, что я добираюсь до этого сценария. Если я включаю строку с UPDATE, тогда предупреждение не срабатывает, и запись не обновляется.

Какая у меня ошибка?

<script type="text/javascript"> 
//CTRL+Shift+z combo 
$(document).keydown(function(e){ 
    if(e.which === 90 && e.ctrlKey && e.shiftKey){ 
    alert('Whhooppie!'); 
     UPDATE TestTable SET status='X' WHERE refno='$refno'; 
    } 
}); 
</script> 

Очень большое спасибо за подбор этого. Еще не удалось - я действительно новичок и в последние несколько дней борется, пытаясь разобраться во всем этом. И не удалось.

У вас наверняка есть идея, что я хочу сделать (обновление статуса до «X» в записи для данного $ refno), и я уверен, что ваша кодировка в правильном направлении. Но мне нужно локализовать ваш код с моей базой данных, именами таблиц и полей, и есть несколько вещей, которые я не понимаю.

В вашем первом бите кода я предполагаю, что мне не нужны строки о нажатии кнопки, так как это срабатывает Ctrl + Shift + Z. Поэтому я заменил только свою неправильную строку UPDATE на ваш раздел .ajax. Я также предполагаю, что «тако» - это всего лишь пример, но я могу ошибаться. (. Как уже упоминалось, все новые вещи для меня)

Так что мой код теперь:

<script type="text/javascript"> 
//CTRL+Shift+z combo 
$(document).keydown(function(e){ 
if(e.which === 90 && e.ctrlKey && e.shiftKey){ 
$.ajax({ 
url: "my_php_page.php", 
    data: {id:1,value:"&refno"}, 
    method: "post" 
    }) 
    .done(function(data) { 
    alert(data); 
    }); 
} 
}); 
</script> 

Для my_php_page.php: я заменил «тест» с фактическим именем базы данных (как показано ниже, как xxx), поместил пароль базы данных между метками кавычек (показано ниже как yyy), заменил «my_table» на фактическое имя таблицы и изменил «value =? where table_id =?» следующим образом:

<?php 
// print_r($_POST); 

$dsn = 'mysql:host=localhost;dbname=xxx'; 
$user = 'root'; 
$pass = 'yyy'; 

$db = new PDO($dsn, $user, $pass); 

$id  = isset($_POST['id']) ? $_POST['id'] : ''; 
$value = isset($_POST['value']) ? $_POST['value'] : ''; 

$success = false; 

if (!empty($id) && !empty($value)) { 

$query = "update TestTable set status='X' where refno='$value'"; 

$stmt = $db->prepare($query); 
$success = $stmt->execute(array($value,$id)); 
} 

if ($success) echo "it worked!"; 
    else echo "it did not work...!";; 

?> 

(нужно ли мне двойной ;; на последней строке?)

При нажатии Ctrl + Shift + Z Я получаю ни "это сработало!" ни «это не сработало ...!», и запись не обновляется.

Я уверен, что я должен приближаться, но где я иду не так.

Снова большое спасибо за помощь.

+0

вам необходимо использовать ajax для разговора с php-страницей и передать ему информацию, необходимую для выполнения обновления. php, который может выполнять материал на стороне сервера, будет содержать ваш оператор обновления. –

+1

Просто включение SQL-запроса в середине вашего Javascript просто вызовет синтаксическую ошибку. Существует много причин, по которым это не сработает, не в последнюю очередь из-за того, что ваш Javascript работает в другой среде с вашего сервера базы данных, возможно, на другой машине. Вам необходимо позвонить на ваш сервер (с помощью AJAX, pehaps) и обработать его с помощью некоторого кода на стороне сервера, чтобы обновить вашу базу данных. –

+0

Кроме того, не создавайте скрипт PHP, который будет выполнять произвольные SQL-команды, иначе кто-то может отправить вредоносную команду SQL скрипту. –

ответ

0

вы отметили его jquery, поэтому я использовал jquery ...

прочитать эту страницу: http://api.jquery.com/jquery.ajax/

и это: http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

и это: http://www.explainxkcd.com/wiki/index.php/327:_Exploits_of_a_Mom

<button id="do_stuff">do stuff!</button> 

<script> 
    $("#do_stuff").on('click',function(){ 

     $.ajax({ 
     url: "my_php_page.php", 
     data: {id:1,value:"tacos"}, 
     method: "post" 
     }) 
     .done(function(data) { 
     alert(data); 
     }); 
    }); 
</script> 

, а затем внутрь по my_php_page.php

<?php 

// print_r($_POST); 

$dsn = 'mysql:host=localhost;dbname=test'; 
$user = 'root'; 
$pass = ''; 

$db = new PDO($dsn, $user, $pass); 

$id  = isset($_POST['id']) ? $_POST['id'] : ''; 
$value = isset($_POST['value']) ? $_POST['value'] : ''; 

if (!empty($id) && !empty($value)) { 

    $query = "update my_table set value = ? where table_id = ? "; 
    $stmt = $db->prepare($query); 

    // run the query and bind the values 
    $success = $stmt->execute(array($value,$id)); 

    if ($success) echo "it worked!"; 
      // else echo "it did not work...!"; 
      else echo $stmt->errorInfo()[2]; 
} 
else echo "post params were blank"; 

?> 

это полностью функционально с табличной схемой, такой как ...

create table my_table (
    table_id int, 
    value  varchar(20) 
); 

insert into my_table values (1,'one'); 
+0

Практически там! Большое спасибо за ответы. Это был мой первый раз, когда я спрашивал о StackOverflow, и я получил удовольствие от скорости и качества ответов. Я, однако, все еще борюсь с этим. Почти там, но нужно руководство для завершения. Я редактировал свой оригинал с последующим вопросом и был бы благодарен за любую помощь. –

+0

Вы правы, я нахожусь вне этой глубины, но с ограничениями времени, чтобы закончить работу. Я попробую еще раз с вашим советом, и если не удастся, я прибегну к обновлению записей непосредственно через myphp. Жаль, что вы нашли свое время и еще раз большое спасибо за помощь. –

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