如何通过在php中输入来更新条目?

时间:2013-08-26 06:18:48

标签: php mysql

我是php的新手,想要创建一个表单,用户必须在不同的行中输入数据,每行代表一个数据点。我想以这样的方式设计它,即无论何时对任何行输入数据,该特定数据点都会更新并存储在mysql服务器中,而无需等待其余条目。只要在特定单元格中输入数据,就应该发生这种情况。按返回应触发mysql服务器更新。有可能在PHP中这样做,或者我需要使用其他技术

3 个答案:

答案 0 :(得分:2)

据我所知,PHP是一种服务器端语言,它不提供与客户端的交互,因为它只是在服务器上运行。对于类似的东西,你应该使用Javascript / JQuery并在按下返回键后触发事件,例如:

$(document).keydown(function (e) {
        var keyCode = e.keyCode || e.which,
        key = {enter: 13}; //You can add more key definitions here
        switch (keyCode) {
            case key.enter: { //key.enter refers to 13
                alert('Enter was pressed');
                //Inside here you can do your post calls to PHP but I'm not very sure on what you want to accomplish once the key is pressed down.
            }
        }
});

以下是与您类似的问题:Detect Enter key is pressed with jquery 您可以在http://jquery.com/找到有关JQuery的更多信息。 可以在此处找到JQuery API的文档:http://api.jquery.com/

答案 1 :(得分:1)

在我的回答中,我专注于你问题中的部分,你提到更新应该一次发生一个单元格,并假设你不希望提交整个表格 - 可能有不需要的假人尚未输入的单元格的数据。

使用 PHP无法做到这一点。 PHP在服务器上运行,代码无法对浏览器中发生的事件做出反应。您需要将PHP服务器代码与JavaScript客户端代码相结合。

由于用户应该继续进入相同的表单,指出如何提交表单的解决方案是不够的。表单提交时,页面也会重新加载。

要实现一次发送一个单元,需要Ajax。如果要支持旧版本的特别是Internet Explorer,使用跨浏览器可能会使Ajax有点复杂。因此,我建议您使用jQuery来处理Ajax请求。 jQuery为您处理跨浏览器问题。

jQuery还可以帮助您从表单字段中获取数据。如果您让PHP代码输出HTML类似于:

<input type="text" class="datapoint" name="datapoint1" value="default value" />
<input type="text" class="datapoint" name="datapoint2" value="default value" />
... 

那么你在jQuery中学习的目的是如何编写类似于:

的东西
$(document.ready(function() {  // This is a way to have jQuery bind the desired actions when the page is built in the browser. 
    $('.datapoint')  // Finds all elements in the document with class="datapoint"
    .on("change", function () {  // Binds an action to execute when the value is changed - detected when the input loose focus, i.e. when the user moves to the next cell
         var params = { name: $(this).attr('name'), value: $(this).attr('value') };  // Extracts name and value from the input field changed
         $.ajax({
             url: updatevalue.php, 
             data: params
         });
    }); 
}); // Ends the $(document.ready(function() {

在服务器上,您需要使用updatevalue.php(或您选择的其他网址)支持此代码,类似于:

$name = $_REQUEST['name']; 
$value = $_REQUEST['value']; 

switch ($name) {
    case 'something': 
        // Prepare PDO statement
        break; 
    case 'something else': 
        // Prepare some other PDO statement
        break; 

    ... 
}

... execute PDO ... 

对于PHP初学者,我建议学习使用PDO进行数据库访问。请确保在PDO中使用预准备语句,请参阅PHP手册以了解如何执行此操作。

另外,请记住使用name值来构建类似于此的动态SQL表达式:

$query = 'UPDATE myTable SET '.$name.'=:value'; // Very bad idea!

因为这会在您的应用程序中引入巨大的安全漏洞。

仍然缺少一些东西。您的WHERE条款中包含哪些内容?

根据您的用例的具体情况,快速且我希望相当容易理解的方法是在HTML中使用data属性。浏览器支持不完整,但它适用于所有现代浏览器。上面的片段更改为:

var params = { name: $(this).attr('name'), value: $(this).attr('value'), recordid: $(this).data('recordid') };
...
<input type="text" class="datapoint" name="datapoint1" data-recordid='1234' value="default value" />

到目前为止,答案并未回答您的问题,因为这不会让您的用户按Enter键更新单元格。它确实让用户通过输入字段进行选项卡,并在用户离开字段时更新数据库。

要让用户按Enter键更新单个值,您还必须:

  1. 确保点击输入不提交完整表格。
  2. 确保按Enter键触发输入上的更改事件。
  3. 对于那些,您可以修改Ignacio Belhot Colistro:使用

    的答案
    $('.datapoint').keydown(function (e) {
    

    而不是$(document). ...

    e.preventDefault(); 
    $(this).blur(); // As if the user tabbed or clicked to focus on some other element
    

    而不是alert

    警告:这是一种简单的代码编写方式。但是,为页面中的许多元素构造和附加新函数到keydown事件是非常低效的。如果您有很多字段,那么这种方法可能会给您带来性能问题。在这种情况下,使用一些现成的插件(如Buttle Butkus答案中的那个)可能是您最好的解决方案。

    上述注意事项适用于我的所有代码段。他们都应该调整和完成。但是这个答案已经太冗长了,我相信这可能是初学者实现你要求的详细功能的最现实的方式。

    我希望这可以帮助你至少开始朝着一个好的方向前进。

答案 2 :(得分:-1)

您需要使用javascript和ajax。

就个人而言,我使用了jeditable jquery插件。您可以将其设置为在ENTER上更新,或者让它需要单击按钮。输入可以是文本框或下拉菜单等。这非常酷。

http://www.appelsiini.net/projects/jeditable

示例:

http://www.appelsiini.net/projects/jeditable/default.html

我建议你现在开始处理它,并在堆栈溢出时发布有关代码的问题。您当前的问题不是真正的代码问题,而且会被低估。