2012-03-03 7 views
2

Я начинаю, и я пытаюсь научиться добавлять, удалять, извлекать и обновлять базу данных с помощью PHP и Ajax.MySQL/PHP: обновить MySQL с помощью Ajax

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

Это моя форма:

<form onsubmit="updateuser()"> 

    ID Number: <input name="ud_id"><br> 
    First Name: <input type="text" name="ud_first"><br> 
    Last Name: <input type="text" name="ud_last"><br> 

<input type="Submit" value="Update"> 
</form> 

и это мой JavaScript:

function updateuser() { 
    var str = $('.ud_id').attr('value'); 

    if (window.XMLHttpRequest) { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     document.getElementById("txtuser").innerHTML = xmlhttp.responseText; 
     } 
    } 
    xmlhttp.open("GET", "ajaxupdate.php?q=" + str, true); 
    xmlhttp.send(); 
} 

Я думаю, что проблема возникает потому, что мой файл форма ajaxupdate.php не извлекает имя и фамилию значения из формы. Как будто я их не пропускаю (?).

Вот мой ajaxupdate.php файл:

<?php include("connection.php"); 

$id=$_GET['ud_id']; 
$first=$_GET['ud_first']; 
$last=$_GET['ud_last']; 


$query="UPDATE contacts SET first='$first', last='$last' WHERE id='$id'"; 


mysql_query($query); 
mysql_close(); 
?> 

Что я делаю неправильно, так что я могу обновить значение первой и последней из базы данных для конкретного ID?

+0

* Всегда * побег строки с [ 'mysql_real_escape_string()'] (HTTP: // PHP .net/mysql_real_escape_string) перед добавлением их в SQL-запрос. Используйте 'mysql_real_escape_string ($ first)' вместо '$ first'. – rid

+0

Вы имеете в виду замену $ first = $ _ GET ['ud_first']; с mysql_real_escape_string ($ first) = $ _ GET ['ud_first']; ?. Я довольно новый. Спасибо –

+1

Я имею в виду, что значение '$ first' никогда не должно включаться непосредственно в запрос без какой-либо обработки. Если вы это сделаете, пользователь, который отправит вам значение, отправив форму, может написать все, что захочет внутри нее, включая другие операторы SQL, которые вы не собираетесь выполнять. Это называется [SQL injection] (http://en.wikipedia.org/wiki/SQL_Injection). Чтобы предотвратить это, PHP имеет 'mysql_real_escape_string()', который возвращает строку, которую вы ее отправляете, но таким образом, что вы можете смело добавить его в запрос. Таким образом, используйте что-то вроде '$ first = mysql_real_escape_string ($ _ GET ['ud_first'])'. – rid

ответ

2

Попробуйте этот код

<script type="text/javascript"> 
function updateuser() { 
    var ud_id = document.getElementById('ud_id').value; 
    var ud_first = document.getElementById('ud_first').value; 
    var ud_last = document.getElementById('ud_last').value; 

    if (window.XMLHttpRequest) { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      document.getElementById("txtuser").innerHTML = xmlhttp.responseText; 
     } 
    } 
    xmlhttp.open("GET", "ajaxupdate.php?ud_id=" + ud_id + "&ud_first="+ud_first+"&ud_last="+ud_last, true); 
    xmlhttp.send(); 
} 
</script> 

HTML

<form name="test"> 

    ID Number: <input name="ud_id"><br> 
    First Name: <input type="text" name="ud_first"><br> 
    Last Name: <input type="text" name="ud_last"><br> 

<input type="button" onClick="updateuser()" value="Update"> 
</form> 
+1

Было бы здорово объяснить, почему это работает. Просто «попробуй, это сработает» не очень помогает. – rid

+0

Я сделал это в прошлом, поэтому, если какая-либо ошибка сообщит мне –

+0

Это здорово, я уверен, вы понимаете, почему это работает. То, что я говорю, заключается в том, что искатель выиграл бы больше, если бы объяснил, почему он работает, поэтому он тоже может понять. – rid

1

Проверить это будет работать, как ожидалось

ud_id = document.getElementById('ud_id').value; 
    ud_first = document.getElementById('ud_first').value; 
    ud_last = document.getElementById('ud_last').value; 
    xmlhttp.open("GET", "ajaxupdate.php?ud_id=" + ud_id +"&ud_first=" +ud_first+ "ud_last="+ud_last, true); 



<form onsubmit="updateuser()"> 

    ID Number: <input name="ud_id" id="ud_id"><br> 
    First Name: <input type="text" name="ud_first" id="ud_first"><br> 
    Last Name: <input type="text" name="ud_last" id="ud_last"><br> 

<input type="Submit" value="Update"> 
</form> 
+0

var str = $ ('. Ud_id'). Attr ('value'), он вызвал только это и ожидает все параметры, в моем посту, который исправлен .... –

+0

Пробовал, и он не Работа. Я делаю что-то не так –

+0

@JohnyBryne, ваш способ настройки строки запроса получает только один параметр, не волнуйтесь, создайте строку запроса, как указано выше, и она будет работать нормально –

2

В вашем JavaScript, сделайте это

function updateuser() { 
    var ud_id = $('input[name="ud_id"]').val(); 
    var ud_first = $('input[name="ud_first"]').val(); 
    var ud_last = $('input[name="ud_last"]').val(); 

    if (window.XMLHttpRequest) { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      document.getElementById("txtuser").innerHTML = xmlhttp.responseText; 
     } 
    } 
    xmlhttp.open("GET", "ajaxupdate.php?ud_id=" + ud_id + "&ud_first="+ud_first+"&ud_last="+ud_last, true); 
    xmlhttp.send(); 
} 
+0

Это та концепция, которую я искал. У меня появилась идея, хотя она не работает. Должен ли мой ajaxupdate.php быть POST или GET? –

+1

@JohnyBryne, используйте 'print_r ($ _ GET)' и посмотрим, что получится. Кроме того, запрос технически не имеет * POST, но он должен * быть POST. – rid

+0

Заметил, что ваш 'ajaxupdate.php' запрашивал' ud_id', а не 'q'. Посмотрите на отредактированный ответ –

2

Если вы хотите использовать updateuser() функцию на отправить, то он должен предотвратить форму от фактического представления. Сделайте его возвратом false, иначе форма будет отправлена ​​браузером, прежде чем функция успеет выполнить.

Браузер запускает функцию перед отправкой формы (как это делается при отправке). Если функция не возвращает false, она интерпретирует это как «все в порядке, вы можете смело представить форму». Форма затем отправляется как обычно.

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

В качестве альтернативы вы можете выполнить функцию, не помещая ее в событие отправки. См. sam_13's answer.

+0

Я очень ценю ваши усилия в создании этой работы, и мне стыдно, что все еще не работает, но я очень уверен, что проблема исходит из того, что все локали. Я изменил с чистого js на jquery, чтобы убедиться, что это проблема, и все равно это не работает. Очевидно, я использовал return false; на стороне jquery. Что касается ответа Сэма, ну, это неправильно, поскольку он не назначает идентификаторы в форме, однако я пробовал этот путь за несколько часов до моего приезда сюда. Я думаю, что я старался изо всех сил, чтобы представить себе –

+0

@JohnyBryne, ладно, сделайте это: вместо того, чтобы использовать функцию в событии формы onsubmit, сделайте обычную кнопку и используйте функцию на событии 'onclick' кнопки и удалите все '

' теги. Это все. Это должно предотвратить поведение браузера по умолчанию. – rid

+0

ОК Я установил идентификатор вручную в файле ajaxupdate.php, и он работает. Изменилось несколько вещей. Я действительно близок к решению –

0

Я пришел по этому примеру, потому что я тоже сталкиваюсь с подобной проблемой. однако я не мог не заметить, что вы не указываете метод для своей формы, и ваш AJAX предполагает, что он должен использовать метод GET. просто пища для размышлений ...ура

0

Этот код проверен и работает. Мне нужно было сделать то же самое, обновить MySql с помощью ajax и объединить вышеизложенное с более широким исследованием, которое я получил, чтобы это работало. Файл PHP называется ajaxupdate.php:

<?php 
$id= $_GET['ud_id']; 
$first= $_GET['ud_first']; 
$last= $_GET['ud_last']; 
require_once ('mysqli_connect.php'); //connection to the database 
$sql = "UPDATE contacts SET FirstName ='$first', LastName='$last' WHERE id='$id'"; 
$result = mysqli_query($dbc,$sql); 
mysqli_close($dbc); 
?> 

Файл Html называется anyNameYouWish.html:

<html> 
<head> 
</SCRIPT> 
<script language="javascript" type="text/javascript"> 
//Browser Support Code 
function ajaxFunction(){ 
    var ajaxRequest; // The variable that makes Ajax possible! 
    try{ 
     // Opera 8.0+, Firefox, Safari 
     ajaxRequest = new XMLHttpRequest(); 
    } catch (e){ 
     // Internet Explorer Browsers 
     try{ 
      ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try{ 
       ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e){ 
       // Something went wrong 
       alert("Your browser broke!"); 
       return false; 
      } 
     } 
    } 
function MsgBox (textstring) { 
alert (textstring) } 
    // Create a function that will receive data sent from the server 
    ajaxRequest.onreadystatechange = function(){ 
     if(ajaxRequest.readyState == 4){ 
      var ajaxDisplay = document.getElementById('ajaxDiv'); 
      ajaxDisplay.innerHTML = ajaxRequest.responseText; 
     } 
    } 
    var ud_id = document.getElementById('ud_id').value; 
    var ud_first = document.getElementById('ud_first').value; 
    var ud_last = document.getElementById('ud_last').value; 
    var queryString = "?ud_id=" + ud_id + "&ud_first="+ud_first+"&ud_last="+ud_last; 
    ajaxRequest.open("GET", "ajaxupdate.php" + queryString + "&random=" + Math.random(), true); 
    ajaxRequest.send(null); 
} 
</script> 
</head> 
<body> 
<form method="post" name="test" onsubmit="ajaxFunction()"> 
    ID Number: <input id="ud_id" name="ud_id"><br> 
    First Name: <input id="ud_first" type="text" name="ud_first"><br> 
    Last Name: <input id="ud_last" type="text" name="ud_last"><br> 
<input type="submit" value="Update"> 
</form> 
</body> 
</html> 
Смежные вопросы