Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tô fazendo um teste para tentar editar dados de um banco MySQL, usei o $_REQUEST para receber a id de um campo, mas sempre que clico no botão de submit deste formulário o valor da id não é enviado, apenas o que foi escrito no formulário(mas não é salvo no banco de dados). A URL fica assim depois de apertar no botão: http://localhost/teste/editar.php?id=&new1=novoValor&new2=NovoValor&atualizar=atualizar
Aqui o painel que lista as informações JÁ SALVAS no banco, e um link de "Editar Postagem" que leva para o formulário de edição.
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8"/>
<title>Página Principal</title>
</head>
<body>
<h1>Postagens:</h1>
<?php
include_once("connection.php");
$sql = "SELECT * FROM testesinho ORDER BY id";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result)) {
$id = $row['id'];
$cA = $row['campoA'];
$cB = $row['campoB'];
?>
<p><?php echo $cA; ?></p> <p><?php echo $cB . "<a href='editar.php?id=$id'>Editar</a>"; ?></p> --- </hr>
<?php
}
?>
</body>
</html>
Aqui o próprio formulário que recebe nele mesmo suas informações:
<?php
if(isset($_REQUEST['atualizar'])) {
$nc1 = $_REQUEST['new1'];
$nc2 = $_REQUEST['new2'];
include_once("connection.php");
$id_post = $_REQUEST['id'];
$busca = "SELECT * FROM testesinho WHERE id = '$id_post";
$sql = "UPDATE testesinho SET campoA = '$nc1', campoB = '$nc2' WHERE id = '$busca'";
$query = mysqli_query($conn, $sql);
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8"/>
<title> Editar </title>
</head>
<body>
<form method="request" action="editar.php">
<input type="hidden" name="id"/>
Novo C1: <input type="text" name="new1"/>
Novo C2: <input type="text" name="new2"/>
<input type="submit" name="atualizar" value="atualizar"/>
</form>
</body><form method="GET" action="editar.php">
O method do formulário pode ser apenas GET ou POST.
A superglobal $_REQUEST deve ser usada só, e somente só, quando não é possível prever qual a origem do input (GET/POST).
Pois podem haver conflitos no input.
Tentei fazer como foi sugerido acima, mas ainda assim o problema persiste.
<input type="hidden" name="id"/>
Cadê a "value" dele?
Se o input não tem um valor, nada será retornado dele...
>
<input type="hidden" name="id"/>
Cadê a "value" dele?
Se o input não tem um valor, nada será retornado dele...
Obrigado por me lembrar!
Mas agora surgiu uma outra dúvida: O que eu coloco no value? Tentei colocar
value = "<?php $id_post; ?>"
que lá em cima estava recebendo o $_GET['id'], mas ainda assim o valor de id na URL ficou vazio quando eu enviei o formulário. Sinto que estou deixando passar algo simples, mas não faço ideia do que seja>
value = "<?php $id_post; ?>"
que lá em cima estava recebendo o $_GET['id'], mas ainda assim o valor de id na URL ficou vazio quando eu enviei o formulário. Sinto que estou deixando passar algo simples, mas não faço ideia do que seja
value = "<?php echo $id_post; ?>"
Sem o echo não vai mostrar mesmo.
>
value = "<?php echo $id_post; ?>"
Sem o echo não vai mostrar mesmo.
Okay. Coloquei o echo, e assim que tentei acessar o sistema pelo localhost: Notice: Undefined variable: id_post in C:\wamp\www\teste\editar.php on line 23 Call Stack #TimeMemoryFunctionLocation 10.0014134816{main}( )..\editar.php:0 "/>
"Undefined variable: id_post " = Variável indefinida: id_post.
id_post é o nome da sua variável? Até onde vi, as suas variáveis de id se chamam apenas "$id", e não "$id_post".
>
"Undefined variable: id_post " = Variável indefinida: id_post.
id_post é o nome da sua variável? Até onde vi, as suas variáveis de id se chamam apenas "$id", e não "$id_post".
Sim, a variável que está recebendo o id pela URL se chama $id_post. A action do form está para "editar.php", o mesmo arquivo em que o form é escrito.
<?php
if(isset($_REQUEST['atualizar'])) {
$nc1 = $_REQUEST['new1'];
$nc2 = $_REQUEST['new2'];
include_once("connection.php");
$id_post = $_REQUEST['id'];
$busca = "SELECT * FROM testesinho WHERE id = '$id_post";
$sql = "UPDATE testesinho SET campoA = '$nc1', campoB = '$nc2' WHERE id = '$busca'";
$query = mysqli_query($conn, $sql);
}
?>>
Sim, a variável que está recebendo o id pela URL se chama $id_post. A action do form está para "editar.php", o mesmo arquivo em que o form é escrito.
<?php
if(isset($_REQUEST['atualizar'])) {
$nc1 = $_REQUEST['new1'];
$nc2 = $_REQUEST['new2'];
include_once("connection.php");
$id_post = $_REQUEST['id'];
$busca = "SELECT * FROM testesinho WHERE id = '$id_post";
$sql = "UPDATE testesinho SET campoA = '$nc1', campoB = '$nc2' WHERE id = '$busca'";
$query = mysqli_query($conn, $sql);
}
?>
Agora tentei usar um isset para validar o $_GET e aí criar uma variável para armazenar ele, mas continua na mesma.
<?php
if(isset($_GET['atualizar'])) {
if(isset($_GET['id'])){
$id_post = $_GET['id'];
$nc1 = $_GET['new1'];
$nc2 = $_GET['new2'];
include_once("connection.php");
$busca = "SELECT * FROM testesinho WHERE id = '$id_post";
$sql = "UPDATE testesinho SET campoA = '$nc1', campoB = '$nc2' WHERE id = '$busca'";
$query = mysqli_query($conn, $sql);
}
}
?>Veja que a sua variável id_post está dentro de um IF, ou seja, se não existir o envio da variável "atualizar", ela não vai existir.
O seu parâmetro "atualizar" só existe quando o formulário é enviado, ou seja, antes disso, a variável id_post não existe.
Remova a variável id_post de dentro do IF.
>
Veja que a sua variável id_post está dentro de um IF, ou seja, se não existir o envio da variável "atualizar", ela não vai existir.
O seu parâmetro "atualizar" só existe quando o formulário é enviado, ou seja, antes disso, a variável id_post não existe.
Remova a variável id_post de dentro do IF.
A SUA DICA FUNCIONOU! Após eu colocar esse isset acima do isset de "atualizar", o aviso de erro sumiu. Após reenviar o formulário numa nova tentativa, vi que o valor da id foi enviado para a URL, mas ainda não havia sido alterado na URL. Então revi mais um pouco o código e vi que a linha
$busca = "SELECT * FROM testesinho WHERE id = '$id_post";
era desnecessária e estava provavelmente causando um conflito. Então coloquei ela comentário e tentei novamente, e não é que funcionou?! Muito obrigado pelo sua ajuda e paciência, não teria conseguido sem isso! Agora finalmente tenho tudo o que preciso apra criar um blog! :'D
Abraços!