2013-01-01 22 views
1

我想创建一个成功的更新,使用下面的HTML:

<form id="form2" name="form2" method="post" 
    onsubmit="return validateForm();" action=""> 

    Id <input type="text" class="txt" name="id" /> 
    <br /> 
    Name <input type="text" class="txt" name="name" /> 
    <br /> 
    Website <input type="text" class="txt" name="website" /> 
    <br /> 
    Description <input type="text" class="txt" name="description" /> 
    <br /> 
    <input type="submit" id="submit" value="Submit"/> 
</form> 

然后我用下面的PHP读取值和更新我的数据库:

<?php 
    global $wpdb; 
    if (isset($_GET['id']) && !empty($_GET['id']) && 
    isset($_POST['name']) && !empty($_POST['name']) && 
    isset($_POST['website']) && !empty($_POST['website']) && 
    isset($_POST['description']) && !empty($_POST['description'])) 
    { 
     $wpdb->query("update where id = $_GET['id'] ".PRO_TABLE_PREFIX 
      ."tutorial (name, website, description) " 
      ."values('{$_POST['name']}', '{$_POST['website']}', '{$_POST['description']}')"); 
    } 
?> 

我在做什么错了?

+0

,而不是此更新其中id = $ _GET [“身份证”]试试这个更新其中id = $ _ POST [“身份证”]不混合起来 – drsndodiya

+1

@RabNawaz:你可以有GET和POST中的参数相同的请求(例如,通过将表单发布到包含URL参数的URL)。不常见,但可能。 –

+0

您是否正在“更新”(更改解释$ _GET的内容)或第一次“插入”您的数据? – Xfile

回答

0

试图用POST ID

<?php 
    global $wpdb; 
if (isset ($_POST['id']) && ! empty ($_POST['id']) && 
isset ($_POST['name']) && ! empty ($_POST['name']) && 
isset ($_POST['website']) && ! empty ($_POST['website']) && 
isset ($_POST['description']) && ! empty ($_POST['description'])) 
{ 
$wpdb->query("INSERT ".PRO_TABLE_PREFIX."tutorial (name, website, description) 
values('{$_POST['name']}','{$_POST['website']}','{$_POST['description']}') "); 
} 
?> 
+0

它只是增加一个新的条目不更新旧的:( – user1890857

+0

使用插入查询... – Codesen

1

你是比代码不工作更严重的问题。您正在将原始GET/POST数据插入到SQL查询中,而不进行任何转义或过滤。在继续之前,请阅读this documentation。否则,您的应用程序将容易受到SQL注入攻击,即使用您的插件的服务器将被黑客入侵。

+3

张贴这条评论是好得多的答案 –

+0

和MySQL查询是坏..其更新但实际上它的插入:P – Xfile

+0

@Xfile如果你不做查询,你将如何检索,插入,删除,更新数据库呢? – itachi

0

2件事。

1)由于您的表单方法是POST,您将不得不使用$_POST['id']

2)在您的查询字符串中,您的mysql UPDATE语法不正确,并且要在字符串中使用带有键的数组,您必须将其包装在{}标记中。这应该工作:

$wpdb->query("UPDATE " . PRO_TABLE_PREFIX . "tutorial SET name='{$_POST['name']}', website='{$_POST['website']}', description='{$_POST['description']}' WHERE id={$_POST['id']}"); 
+0

工作,但增加了一个重复的条目 – user1890857

+0

你的任何表列是唯一的还是主要的?如果是,则不能有两行具有相同的值。 – Supericy

+0

其还更新了id:( – user1890857

0

使用此您更新查询是不正确的语法

$wpdb->query("update ".PRO_TABLE_PREFIX."tutorial set name='{$_POST['name']}', website='{$_POST['website']}', description= '{$_POST['description']}' where id= $_GET['id']) "); 
+1

)您的建议还包括原始代码中的SQL注入漏洞。请至少添加一条注释,以便其他人不使用此代码作为示例。 –

2
<form id="form2" name="form2" **method="post"** onsubmit="return validateForm();" action=""> 

请注意,你的形式方法后

和您尝试使用来获取数据get method

isset ($_GET['id']) && ! empty ($_GET['id'])

用$ _POST ['key_name];替换它们; 以获得正确的结果。

0

如果你想在ID将在$ _GET [“身份证”],然后形成动作应该是这样的

action = "<page-url>?id=<somevalue>" 

而且,你必须创建一个文本框输入ID和对形式应该根据那里的输入进行更改,使用jQuery或Javascript。

最后,如果这太复杂了,请像其他人所建议的那样将$ _GET ['id']更改为$ _POS ['id']。

此外,SQL查询不正确。其他人已经指出了。