Jump to content
Zero Minamoto

Como usar $_REQUEST para receber dados na URL?

Recommended Posts

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>

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

<input type="hidden" name="id"/>

Cadê a "value" dele?

Se o input não tem um valor, nada será retornado dele...

Share this post


Link to post
Share on other sites
<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

Share this post


Link to post
Share on other sites
 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.

  • +1 1

Share this post


Link to post
Share on other sites
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 "/>

Share this post


Link to post
Share on other sites

"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".

Share this post


Link to post
Share on other sites

"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);
	}
?>

Share this post


Link to post
Share on other sites

 

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);
	}
}
?>

Share this post


Link to post
Share on other sites

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.

  • +1 1

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Numero 0800
      Sou bastante iniciante e estou aprendendo sobre HTML, CSS e JavaScript. Estou querendo fazer algo que acredito ser bem simples mas eu não tenho ideia de por onde começar, meu problema é o seguinte:
      Imagina um site de vendas (na parte do administrador do site) e quando o administrador clica em "Adicionar um novo produto" ele preenche um formulário, e assim  este produto aparece logo em seguida na pagina com as informações que foi inserida no formulário.
       
      A minha duvida é a seguinte ---> Como eu faço para que sempre que eu preencher um formulário o site criar automaticamente uma DIV com as informações que foram ali inseridas?
      Eu só preciso de um simples exemplo que o resto eu me viro, porque não estou conseguindo encontrar esta informação na net, só acho formulários do tipo "Crie sua conta" onde você envia informações para ficarem no servidor, mas eu quero um formulário onde ao ser preenchido ele simplesmente crie uma div nova na pagina e que todos possam ver.
       
      Por exemplo: Esse pot de agora, onde estou preenchendo um formulário e quando eu terminar ele vai criar a div automaticamente para todos poderem vem.
       
      OBS: Eu já tenho o modelo da div que eu quero, expliquem também como faz para essa div que vai ser criada seja uma copia da div anterior.
    • By joaopedropeterle
      Boa tarde pessoal!
       
      Preciso fazer os valores digitados no campo do formulário serem escritos de forma inversa, pois se trata de dinheiro, nada do que fiz deu certo até agora... meu código está assim:
       
      var valor = $("#valor"); valor.keyup(() => { valor.val(VMasker.toPattern(valor.val(), "999.999.999,99", {reverse: true})); }) #valor é a ID do campo onde será inserido... Não sei se fui bem claro, sou apenas iniciante...rsrs
    • By roohmcd
      Galera, seguinte, eu tenho um formulário com dois selects ocultos, eles serão exibidos somente quando eu selecionar uma das opções no select pai, porém toda vez que faço o envio deste ele pega o valor de um select oculto. Tem alguma maneira de fazer com ele só pegue o valor se eu selecionar a opção no select pai ?
       
      Este é meu formulário:
       
      <form id="createusers" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" class="needs-validation" oninput='userrepassword.setCustomValidity(userrepassword.value != userpassword.value ? "Senhas não conferem." : "")' novalidate> <div class="form-group"> <div class="input-group"> <div class="input-group-prepend"> <div class="input-group-text"><i class="fas fa-user-circle"></i></div> </div> <input id="username" name="username" placeholder="Usuário" type="text" aria-describedby="usernameHelpBlock" required="required" class="form-control"> <div class="invalid-feedback">Por favor, digite um nome de usuário válido.</div> </div> <small id="usernameHelpBlock" class="form-text text-muted">Digite um nome de usuário.</small> </div> <div class="form-group"> <div class="input-group"> <div class="input-group-prepend"> <div class="input-group-text"><i class="fa fa-lock"></i></div> </div> <input id="userpassword" name="userpassword" placeholder="Senha" type="password" required="required" class="form-control" aria-describedby="userpasswordHelpBlock"> <div class="invalid-feedback">Por favor, digite uma senha.</div> </div> <small id="userpasswordHelpBlock" class="form-text text-muted">Digite uma senha para o usuário. Sua senha deve ter no mínimo 6 caracteres.</small> </div> <div class="form-group"> <div class="input-group"> <div class="input-group-prepend"> <div class="input-group-text"><i class="fa fa-lock"></i></div> </div> <input id="userrepassword" name="userrepassword" placeholder="Confirme a senha" type="password" required="required" class="form-control" aria-describedby="userrepasswordHelpBlock"> <div class="invalid-feedback">Por favor, confirme a senha.</div> </div> <small id="userrepasswordHelpBlock" class="form-text text-muted">Confirme a senha.</small> </div> <div class="form-group"> <label>Informe o grupo do usuário</label> <select id="usergroup" name="usergroup" class="form-control" required> <option value="">-- Selecione uma opção --</option> <option value="neg">Negado</option> <option value="tot">Total</option> <option value="controlado">Controlado</option> <option value="restrito">Restrito</option> <option value="lib">Liberado</option> <option value="noc">No Cache</option> </select> <div class="invalid-feedback">Por favor, selecione uma opção para informar o grupo do usuário.</div> <small id="usergroupHelpBlock" class="form-text text-muted">Selecione um grupo para o usuário.</small> </div> <div class="form-group"> <label>Selecione o grupo controlado para o usuário</label> <select id="usergroup-controlado" name="usergroup" class="form-control"> <option value="c01">Controlado 01</option> <option value="c02">Controlado 02</option> <option value="c03">Controlado 03</option> </select> </div> <div class="form-group"> <label>Selecione o grupo restrito para o usuário</label> <select id="usergroup-restrito" name="usergroup" class="form-control"> <option value="r01">Restrito 01</option> <option value="r02">Restrito 02</option> <option value="r03">Restrito 03</option> <option value="r04">Restrito 04</option> <option value="r05">Restrito 05</option> <option value="r06">Restrito 06</option> <option value="r07">Restrito 07</option> <option value="r08">Restrito 08</option> <option value="r09">Restrito 09</option> </select> </div> <div class="form-group"> <button id="submitcreateuser" name="submitcreateuser" type="submit" class="btn btn-primary">Criar Usuário</button> </div> </form> E para ocultar estes selects uso os seguintes scripts:
       
      <script type="text/javascript"> (function( $ ){ $.fn.dependsOn = function(element, value,callback) { var elements = this; var isContainer = false; //add change handler to element $(element).change(function(){ var $this = $(this); var showEm = false; if ( $this.is('select') ) { var fieldValue = $this.find('option:selected').val(); if ( !value ) { showEm = fieldValue && $.trim(fieldValue) != ''; } else if (typeof(value) === 'string') { showEm = value == fieldValue; } else if ($.isArray(value)) { showEm = ($.inArray(fieldValue, value) !== -1); } } else if ($this.is('input[type="text"]')){ var fieldValue = $this.val(); if ( !value ) { showEm = fieldValue && $.trim(fieldValue) != ''; } else if (typeof(value) === 'string') { showEm = value == fieldValue; } else if ($.isArray(value)) { showEm = ($.inArray(fieldValue, value) !== -1); } } // add containers for input else if ($this.hasClass('depends-container')){ isContainer=true; var target = $this.find('input[type="text"]'); var fieldValue = target.val(); if ( !value ) { showEm = fieldValue && $.trim(fieldValue) != ''; } else if (typeof(value) === 'string') { showEm = value == fieldValue; } else if ($.isArray(value)) { showEm = ($.inArray(fieldValue, value) !== -1); } } if(isContainer){ elements.each(function(){ $(this).toggle(showEm); if(callback){ callback(); } }); }else{ elements.closest('div').toggle(showEm); if(callback){ callback(); } } }); //hide the dependent fields return elements.each(function(){ var $this= $(this); var isContainer= false; $(element).each(function(index){ var el = $(this); if(el.hasClass('depends-container') && el.find('input[type="text"]').length){ isContainer = true; el = el.find('input[type="text"]'); if(el.val() != '' && $this.is('visible') == false ){ $this.show(); if(callback){ callback(); } } } }); if(!isContainer){ $(this).closest('div').hide(); } }); }; })( jQuery ); </script> <script type="text/javascript"> $('#usergroup-controlado').dependsOn('#usergroup', ['controlado']); $('#usergroup-restrito').dependsOn('#usergroup', ['restrito']); </script> E este é o script que faz o envio do formulário, onde obtenho as informações preenchidas:
       
      <?php if(isset( $_POST['submitcreateuser'] )) { $fullname = $_POST["fullname"]; $username = $_POST["username"]; $userpassword = $_POST["userpassword"]; $userrepassword = $_POST["userrepassword"]; $networkaccess = $_POST["networkaccess"]; $usergroup = $_POST["usergroup"]; $createuser = "$username $fullname $networkaccess $usergroup $userpassword $userrepassword s -a; echo $?"; echo "<pre> >> $createuser << </pre>"; } ?> Os selects ocultos são os do grupo Controlado e Restrito, quando selecionar essas opções ele abre outro select com as opções respectivas, tipo Controlado ele irá exibir o select Controlado 01, Controlado 02, Controlado 03. E assim serve também para a opção Restrito.
       
      Tem algo de errado no meu formulário ?
    • By Ericles Boanova
      Olá,
      Estou desenvolvendo um Guia de Solução para pessoas que estão com problemas técnicos com seu notebook.
      Basicamente, no meu banco de dados (Mysql) está cadastrado id_pergunta, pergunta, sim e nao.
       
      Ex:
      id_pergunta pergunta sim não 1 Equipamento está carregado? 2 5 2 Equipamento sofreu alguma queda recentemente? 3 4 3 Entre em contato com uma autorizada para verificar se seu equipamnto possui garantia n/a   4 Faça drenagem de energia no equipamento .. .. 5 Entao carregue! .. ...  
      Então, é basicamente este o ponto que estou com dificuldades.
      Preciso transpor esta lógica do banco de dados para o php.
      Terá uma tela onde haverá diversos problemas genéricos (não liga, não da boot, etc) e a partir da seleção de uma dessas opções irá puxar a primeira questão do banco.
      Com base na resposta desta questão, será buscada a próxima questão ou será finalizado, caso o problema seja resolvido.
      Como faço o código php para este caso? para que fique nesse looping até a solução?
       
    • By EltonRodrigo
      Eu tenho um formulário com todos os campos desativados com exceção do primeiro. Ao preencher o primeiro campo, se o valor existir no banco de dados todos os campos devem ser ativados. Fiz isso utilizando o evento blur do jquery. O problema é  que o segundo campo é um select, quando clico nesse campo os mesmos não são ativados, mas se clicar no terceiro campo que é um input=text funciona. Eu não posso inverter a ordem dos campos. Segue o código:
       
      <div class="form-group"> <input type="text" class="form-control form-control-sm" name="txt_dd_n_fogo" id="txt_dd_n_fogo" required placeholder="Nº de fogo do pneu"> </div> <div class="form-group"> <select class="form-control form-control-sm" name="txt_dd_marca" id="txt_dd_marca" required disabled> <option value="">Marca do pneu</option> <option value="BRIDGESTONE">BRIDGESTONE</option> <option value="CENTAURO">CENTAURO</option> <option value="CONTINENTAL">CONTINENTAL</option> <option value="FATE">FATE</option> <option value="FIRESTONE">FIRESTONE</option> <option value="GOODYEAR">GOODYEAR</option> <option value="KUMHO">KUMHO</option> <option value="LANDE">LANDE</option> <option value="MARSHAL">MARSHAL</option> <option value="MAGGION">MAGGION</option> <option value="MASTER">MASTER</option> <option value="MICHELIN">MICHELIN</option> <option value="PIRELLI">PIRELLI</option> <option value="SEIBERLING">SEIBERLING</option> <option value="TOYO">TOYO</option> <option value="YOKOHAMA">YOKOHAMA</option> </select> </div> <div class="form-group"> <select class="form-control form-control-sm" name="txt_dd_medida" id="txt_dd_medida" required disabled> <option value="">Medida do pneu</option> <option value="205/75">205/75</option> <option value="215/75">215/75</option> <option value="215/75.17.5">215/75.17.5</option> <option value="215/80">215/80</option> <option value="235/75">235/75</option> <option value="275/70">275/70</option> <option value="275/80">275/80</option> <option value="295/80">295/80</option> <option value="385/65">385/65</option> <option value="750/16">750/16</option> <option value="900/20">900/20</option> <option value="1000/20 comum">1000/20 comum</option> <option value="1000/20 radial">1000/20 radial</option> <option value="1100/20">1100/20</option> </select> </div> <div class="form-group"> <input type="text" class="form-control form-control-sm" name="txt_dd_mm" id="txt_dd_mm" placeholder="Milímetro(Atual)" disabled> </div> <div class="form-group"> <!-- <label for="txt_de_km">KM</label> --> <input class="form-control form-control-sm" type="text" name="txt_dd_km" id="txt_dd_km" placeholder="KM" required disabled> </div> <div class="form-group"> <select class="form-control form-control-sm" name="txt_dd_estado" id="txt_dd_estado" required disabled> <option value="">Estado do pneu</option> <option value="NOVO">NOVO</option> <option value="NOVO USADO">NOVO USADO</option> <option value="NOVO CONSERTADO">NOVO CONSERTADO</option> <option value="1ª RESSOLAGEM">1ª RESSOLAGEM</option> <option value="2ª RESSOLAGEM">2ª RESSOLAGEM</option> <option value="3ª RESSOLAGEM">3ª RESSOLAGEM</option> <option value="4ª RESSOLAGEM">4ª RESSOLAGEM</option> <option value="COM AVARIAS">COM AVARIAS</option> <option value="DESCARTADO">DESCARTADO</option> <option value="RESSOLADO CONSERTADO">RESSOLADO CONSERTADO</option> <option value="VULCANIZAR">VULCANIZAR</option> </select> </div> <div class="form-group"> <textarea class="form-control" name="txt_dd_obs" id="txt_dd_obs" rows="2" placeholder="Observações" disabled></textarea> </div> <div class="custom-file"> <input type="file" name="txt_dd_img" class="custom-file-input" id="txt_dd_img" lang="pt-br" onchange="readURLdd(this);" disabled> <label class="custom-file-label" for="customFile">Escolha uma imagem</label> </div> <input type="submit" class="btn btn-primary" name="bt_dd" id="bt_salvar" value="Salvar" hidden>  
      $(function(){ $("input[name='txt_dd_n_fogo']").blur( function(){ var txt_dd_n_fogo = $("input[name='txt_dd_n_fogo']").val(); $.post('posicoes/function.php',{txt_dd_n_fogo: txt_dd_n_fogo},function(data){ if( data!='Não existe ainda!' ){ alert(data); $("input[name='txt_dd_n_fogo']").val(''); $("#txt_dd_marca").prop("disabled", true); $("#txt_dd_medida").prop("disabled", true); $("#txt_dd_mm").prop("disabled", true); $("#txt_dd_data").prop("disabled", true); $("#txt_dd_km").prop("disabled", true); $("#txt_dd_estado").prop("disabled", true); $("#txt_dd_obs").prop("disabled", true); $("#txt_dd_img").prop("disabled", true); $("#bt_salvar").prop("hidden", true); }else{ $("#txt_dd_marca").prop("disabled", false); $("#txt_dd_medida").prop("disabled", false); $("#txt_dd_mm").prop("disabled", false); $("#txt_dd_data").prop("disabled", false); $("#txt_dd_km").prop("disabled", false); $("#txt_dd_estado").prop("disabled", false); $("#txt_dd_obs").prop("disabled", false); $("#txt_dd_img").prop("disabled", false); $("#bt_salvar").prop("hidden", false); } }); }); }); Tentei criar um botão hidden sobre os todos os campos, ao ser clicado o mesmo ficava como hidden e habilitava todos os campos, até deu certo, mas ao preencher o campo nº de fogo novamente ele não executa mais a função de verificação. Precisa ficar bem amarrado, caso o usuário digite um nº que já existe os campos precisam ficar desabilitados.
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.