Actualizar onde id = $GET ['id']
estou a tentar criar uma actualização bem sucedida, usando o seguinte 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>
Depois uso o seguinte PHP para ler o valor e actualizar a minha base de dados:
<?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']}')");
}
?>
O que estou a fazer de errado?
5 answers
<form id="form2" name="form2" **method="post"** onsubmit="return validateForm();" action="">
Por favor, note que o seu método de formulário é post
E você está a tentar obter dados usando o método get
isset ( $_GET['id'] ) && ! empty ( $_GET['id'] )
Substitua estes por $_POST ['key_name]; para obter resultados adequados.
Use isto a sua pesquisa de actualização não é a sintaxe correcta
$wpdb->query("update ".PRO_TABLE_PREFIX."tutorial set name='{$_POST['name']}', website='{$_POST['website']}', description= '{$_POST['description']}' where id= $_GET['id'] ) ");
Se quiser que o ID esteja em $_GET ['id'], então a acção do formulário deverá ser assim
action = "<page-url>?id=<somevalue>"
Além disso, você tem que criar uma caixa de texto para inserir id e o para o formulário deve ser alterado de acordo com a entrada lá, usando jQuery ou Javascript.
Finalmente, se isto for muito complicado, mude $_GET ['id'] para $_POS ['id'] como os outros sugeriram.
Além disso, a consulta SQL está incorrecta. Outros já o assinalaram.
Tente com o código de identificação
<?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']}') ");
}
?>
1) Uma vez que o seu método da forma é POST, você teria que usar $_POST['id']
.
2) dentro do seu texto de pesquisa, a sua sintaxe mysql UPDATE
está errada, assim como para usar uma matriz com a chave dentro de um texto, você tem que envolvê-la em {
e }
marcas. Isto deve funcionar.
$wpdb->query("UPDATE " . PRO_TABLE_PREFIX . "tutorial SET name='{$_POST['name']}', website='{$_POST['website']}', description='{$_POST['description']}' WHERE id={$_POST['id']}");