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 MatheusSmidt
      Bom dia,
      Estou precisando de ajuda com o código do formulário de um sistema de cadastro.
      A página é para consulta mas tem a possibilidade de adicionar ou retirar "faltas" de cada profissional cadastrado através de botões simples e também apagar um ou múltiplos profissionais da lista, através de checkbox..
      Essa ações atualizam o banco de dados e já retornam na tela automaticamente.
      O problema é que não fui eu que estruturei o código PHP e não consigo aliar as duas funções que falei anteriormente. Quando consigo fazer funcionar o sistema de adição e redução de faltas, consigo apenas excluir o último nome da lista, mesmo selecionando vários. E quando consigo resolver a parte de excluir vários nomes, não consigo adicionar e reduzir o número de faltas.
       
      Provavelmente é um problema no "WHILE" ou na abertura e fechamento de formulário. Porém não consegui resolver.
      Se alguém conseguir resolver seria ótimo.
      Agradeço desde já. Em anexo envio um print da página para melhor entendimento.
       
       
       
       
    • By Hlameiras
      Olá!
       
      Estou tentando desenvolver um formulário dinâmico em PHP, em que o utilizador ao clicar num determinado botão possa acrescentar campos de INPUTs ou SELECTs no mesmo.
      Encontrei este exemplo que funciona mas tem limitações:
      https://www.formget.com/how-to-dynamically-add-form-fields-and-increment-name-attribute-of-the-field/
       
      O problema é que os campos adicionais são gerados pelo lado do cliente (Javascript) e não pelo lado do servidor, logo no caso de gerar SELECTS que vão buscar informação a uma Base de Dados, as opções de escolha não são apresentadas. Qual será a melhor solução para resolver este problema?
       
      Agradecido!
       
       
       
    • 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 ?
×

Important Information

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