2012-03-15 5 views
0

У меня есть таблица, которая динамически генерируется на основе пользовательского ввода, в некоторых случаях строки имеют текстовое поле, и я хочу сохранить значения, обновленные пользователем в текстовом поле, в базе данных MySql , например:Сохранение динамически сгенерированного текстового поля из PHP

Фактический код:

echo "<tr><td>".$sql3[0]."</td><td>".$row1[2]."</td> 
     <td><input type='text' class='span1' value='".$recieved."'/> 
     </td><td>".$status."</td></tr>"; 

Упрощенный пример:

//some user input e.g Microsoft 

Table: 
item    quantity  received 
Windows 7   1000  'textfield' 
Office 2007   200  nothing required 
Windows 8   20000  'textfield' 

Теперь я хочу, чтобы сохранить значения, введенные в текстовое поле и обновлять их в базе данных. Проблема в том, что я не уверен, как определить id (id текстового поля), который можно прочитать с помощью javascript, чтобы я знал, какое текстовое поле я сейчас говорю.

Любые предложения помогут.

+0

вставьте свой HTML код – Stewie

+0

@Stewie - Пожалуйста, проверьте обновленный вопрос, возможно, это поможет! – Namit

+0

Почему бы не использовать простой ajax submit? легко, вы можете использовать PHP, позволить пользователю на той же странице. –

ответ

3

Ваш результат должен выглядеть (переносов для чтения только - не для использования в настоящем коде)

var .= '<tr class="someClass">'; 
var .= '<td>'.$row["item"].'</td>'; 
var .= '<td>'.$row["quantity"].'</td>'; 
var .= '<td>';if(!empty($row["received"])){ var .= '<input type="text" value="'.$row["received"].'" id="'.$row['id'].'" />'; }else{ var.= '<input type="text" value="default_value" id="'.$row['id'].'"/>'; } 
var .= '</td>'; 
var .= '</tr>'; 

return var; 

Теперь вы используете функцию AJAX JQuery, чтобы передать по значению идентификатора «строк ».

$(".someClass input").live('keypress', function(e){ 
    var code = (e.keyCode ? e.keyCode : e.which); 
    if(code == 13){ // if we pressed enter 
    e.preventDefault(); // stop the default submission behavior 
    var ourId = this.id; 
    var updatedText = $(this).val(); 
    $.ajax({ 
     type: 'POST', 
     url: 'path/to/my/update/file.php', 
     data: 'id='+ourId+'text='+updatedText, 
     success: function(data){ 
     //our post to the file was successful. 
     //The file returns data and that data is available as an object. 
     //We declare it as 'data' in the success: function(data) string. 
     $("#someContainer").append(data); //append our data returned to #someContainer 

     } 
    }); 
    } 
}); 

Теперь, когда мы прошли идентификатор поля ввода (который также связан непосредственно к строке мы хотим обновить) в нашем PHP файл, мы можем анализировать данные, которые нам нужны, и использовать его для обновления соответственно.

<?php 
    //include our sql.connect file 

    $ourId = $_POST['id']; 
    $updatedText = $_POST['text']; 

    $q = mysql_query("UPDATE 'our_table' SET received='".$updatedText."' WHERE id = ".$ourId); 
?> 

Надеюсь, это то, что вы хотите.

EDIT 1 - по запросу пользователя

var .= '<td>'; //open the data cell  
//the below line checks to see if the row 'received' is **NOT** a empty database result 
if(!empty($row["received"])){ 
    //our row is not empty, change the value of the input field to our $row['received'] value 
    var .= '<input type="text" value="'.$row["received"].'" id="'.$row['id'].'" />'; 
}else{ 
    //our row was empty, or our row returned null. either way, we use "default_value" as our value, which will literally print as a textbox with the words default_value in it. 
    var.= '<input type="text" value="default_value" id="'.$row['id'].'"/>'; 
} 
var . = '</td>'; //close the data cell 

EDIT 2

Измененный, чтобы отразить уникальный класс созданный только строк в нашем PHP файле.Также был изменен селектор функции нажатия клавиши, чтобы отражать только входы в пределах наших уникально сгенерированных строк.

+0

Это именно то, что я хочу, также просто для того, чтобы уточнить, что ваш код работает, когда нажатие клавиши возврата нажата на текстовое поле? Также не могли бы вы уточнить эту строку: '''; if (! Empty ($ row [" received "])) {var. = ''; } else {var. = ''; } ' – Namit

+0

Также тег' ('input') 'работает с другими текстовыми полями, которые не создаются динамически. – Namit

+0

Да. при нажатии клавиши возврата данные будут отправлены в файл php. e.preventDefault(); останавливает подачу формы и естественное «обновление» страницы, поэтому мы можем избежать этого поведения. Кроме того, вы можете изменить var. = ''; to var. = ''; то вы можете изменить $ ('input') на $ ('. someClass input'); поэтому вы только нацеливаете входные данные внутри строки, которая имеет класс .someClass. – Ohgodwhy

-2

Вы можете попробовать

item_id  mediumint(8)  

или даже int

Это будет достаточно долго, но вы также должны usr_id или не знаете, если у вас есть, что уже в виде, что было бы достаточно.

1

В HTML добавьте имя:

<input type='text' class='span1' name="received[]" value='".$recieved."'/> 

в PHP:

$received = $_REQUEST['received'] 
print_r($received); 

и вы будете знать, что делать.

В качестве альтернативы вы можете сделать received[$id] где $id является основным идентификатором строки.

+0

Возможно ли, что я могу получить значение 'полученное [some_textfield]' в javascript, чтобы я мог использовать ajax и сохранять данные. Мне нужно получить идентификатор и введенное значение в javascript – Namit

+0

ну, есть несколько способов сделать это в JS, но использование метода массива не будет работать тогда, вам придется делать это по id или если вы используете jquery, вы можете сделать обход – Stewie

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