Usando id que esta na URL, para pegar dados no banco de dados

Minha duvida e a seguinte, tenho uma pagina de produto http://127.0.0.1/ecommerce/produto.php?id=20, e ao clicar em um botão compra, terá uma tela de confirmação da compra, qual a melhor maneira de estar conseguindo pegar os dados que estão cadastrados no id = 20.

1 curtida

Use assim:

(PHP 5 >= 5.2.0, PHP 7)

<?php
     
    $id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
  
    if (!empty($id)))
    {
       //o id é um número
    }
    else 
    {
      // o id é inválido ou nulo
    }

PHP < 5.2

<?php

    $id = isset($_GET['id']) && is_numeric($_GET['id']) ? (int)$_GET['id']: NULL;
  
    if (!empty($id))
    {
	  //o id é um número	
    }
    else
    {
         //o id é inválido ou nulo	
    }

As duas formas estão corretas, mas, se o seu PHP é maior ou igual 5.2 faça o primeiro método.

Link Referencias para leitura:

Bom cara, não sei se implementei corretamente mas segue abaixo o código da pagina de checkout.php:

<!DOCTYPE html>
<html>
	<?php
		
		$conexao = mysqli_connect("127.0.0.1","root","","WD43");
		$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
		$dados = mysqli_query($conexao, "select * from produtos where id = '$id' ");
		$produto = mysqli_fetch_array($dados);
	?>
	<head>
		<meta charset="UTF-8">
		<title>Checkout Mirror Fashion</title>
		<meta name="viewport" content="width=device-width">
		<link rel="stylesheet" href="css/bootstrap.css">
	</head>
	
	<body>
		<div class="jumbotron">
			<div class="container">
				<h1>Ótima escolha!</h1>
				<p>Obrigado por comprar na Mirror Fashion!
				Preencha seus dados para efetivar a compra.</p>
			</div>	
		</div>
		
		<div class="panel panel-default">
			<div class="painel-heading">
				<h2 class="painel-title">Sua compra </h2>
			</div>
		</div>
		
		<div class="painel-body">
			<img src="img/produtos/foto<?= $produto['id']?>-<?= $produto['cor']?>.png" class="img-thumbnail img-responsive">
			<?php
	  
					if (!empty($id))					
										
				?>
			
			<dl>				
				<div class="container">
					<dt>Produto</dt>
					<dd><?= $produto['nome'] ?> </dd>

					<dt>Preço</dt>
					<dd><?= $produto['preco'] ?> </dd>

					<dt>Cor</dt>
					<dd><?= $produto['cor'] ?></dd>
					
					<dt>Tamanho</dt>
					<dd><?= $produto['tamanho'] ?></dd>				
				</div>					
			</dl>
		</div>
		
		
	</body>
</html>

Ve o que posso estar fazendo de errado ainda não puxa os dados

Cadê a checagem igual eu fiz se o id realmente foi preenchido.

Se não viu!

if (!empty .....

E ai se ele não encontrar você coloca um desvio no seu código!

Outra coisa se o número for inteiro faça assim:

$dados = mysqli_query($conexao, "select * from produtos where id = $id");

ou

$dados = mysqli_query($conexao, "select * from produtos where id = ". $id);

Ou seja, retire as asp simples., já que é um número a ser pesquisado.

Então quando passo o sql desta maneira ele retorna esse erro:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\Arquivos de programas\EasyPHP-DevServer-14.1VC9\data\localweb\ecommerce\checkout.php on line 9,

será que pode não estar pegando o Id da pagina do produto?

Depois dessa linha

$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);

faça assim

echo $id;

verifique se ele está pegando o $id;

Você comece a aprender a debugar para que consiga resolver esses problemas básicos, nós, nunca vamos conseguir resolver isso já visto que o código roda ai!