Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme Peixoto

botao de tamanhos

Recommended Posts

Iai galera beleza?

Estou com uma dúvida aqui que é o seguinte, estou fazendo um carrinho de compras, só que meu cliente vende sandálias e os consumidores precisam escolher o seu número. Até ai tudo bem, mas como faço o botão pra eles selecionarem igual deste site aqui:

 

Clique aqui

 

pensei no SELECT mas fica feio, se alguém souber ai, por favor me ajude.

Abç.

Compartilhar este post


Link para o post
Compartilhar em outros sites

HTML Básico, você gera um rádio button pra cada tamanho disponível, no caso o loop é só pra gerar entre o 34 pro 40

<form method="POST">
      <?php
             for( $i = 34 ; $i < 40 ; ++ $i )
                    printf( '%d<input type="radio" name="numero" value="%d">  ' , $i , $i );
      ?>
      <input type="submit" value="Enviar" name="submitForm" />
</form>
<?php
      if( isset( $_POST[ 'submitForm' ] ) ){
                 echo '<pre>';
                      printf( 'Número escolhido: %d' , $_POST[ 'numero' ] );
      }
?>

 

Depois você decora eles com um css.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem para cada modelo de sandália um tamanho mínimo e máximo armazenado no banco de dados ?

 

Se tiver, basta buscar esses valores para cada modelo visualizado e utilizar um loop como o Andrey Knupp demonstrou, iniciando pelo menor número e finalizando no maior número desponível na loja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey ajudou muito cara, só que é o seguinte, quando for selecionar o tamanho, ai não pode ser um submit, tem que ser um link que vai jogar as informações para carrinho.

 

tem como trocar o submit por um link?

Obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer de duas maneiras, usar o atributo action do FORM para onde os dados serão enviados, utilizando o método GET.

Ou então gerar os links com os parâmetros ao invés de radio button, assim quando a pessoa clicar no link, já vai direto pra página que você apontou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer de duas maneiras, usar o atributo action do FORM para onde os dados serão enviados, utilizando o método GET.

Ou então gerar os links com os parâmetros ao invés de radio button, assim quando a pessoa clicar no link, já vai direto pra página que você apontou.

 

Acho mais fácil a primeira opção, ai no action eu coloco o link do carrinho?

 

carrinho.php?acao=add&id='.$ln['id'].'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente, coloca o link do carrinho.

<?php
printf( '<form method="POST" action="%s.php?acao=%s&id=%d">' , 'carrinho' , 'add' , ( integer ) $ln[ 'id' ] ); 
             for( $i = 34 ; $i < 40 ; ++ $i )
                    printf( '%d<input type="radio" name="numero" value="%d">  %s' , $i , $i , "\n" );
?>
      <input type="submit" value="Enviar" name="submitForm" />
</form>

 

Saída aqui:

<form method="POST" action="carrinho.php?acao=add&id=0">
      34<input type="radio" name="numero" value="34">  
      35<input type="radio" name="numero" value="35">  
      36<input type="radio" name="numero" value="36">  
      37<input type="radio" name="numero" value="37">  
      38<input type="radio" name="numero" value="38">  
      39<input type="radio" name="numero" value="39">  
      <input type="submit" value="Enviar" name="submitForm" />
</form>

 

Se você quiser submeter o formulário, você pode utilizar um evento 'onClick' no radio, dessa forma:

printf( '%d<input type="radio" name="numero" onclick="this.form.submit()" value="%d">  %s' , $i , $i , "\n" );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey, está funcionando perfeitamente, só que não estou dando conta de tornar obrigatório a escolha do tamanho, no carrinho eu fiz assim:

<?php
      if( ( $_POST[ 'numero' ] ) == 0 ){
	   echo '<script>alert("Escolha um tamanho")</script>';

   }else
                      echo 'Número escolhido: ' , $_POST[ 'numero' ] ;


?>

 

funciona beleza, só que da erro quando altera a quantidade de produtos, ou remove produtos, aparece novamente a mensagem "Escolha um tamanho" e da erro na página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

To fazendo assim:

aqui a pessoa escolhe a numeração e envia o form para o carrinho:

<form action="carrinho&acao=add&id=<?php echo $dados['id'] ?>" method="post" enctype="multipart/form-data" name="form1" id="form1">
      <?php
             for( $i =  $dados['detamanho']  ; $i <= $dados['atamanho'] ; ++ $i )
                    printf( '%d<input type="radio" name="numero" value="%d">  ' , $i , $i );
      ?>
      <input type="submit" value="Colocar na Sacola" name="submitForm" />
</form>

 

e isso aqui esta no começo do código do carrinho:

<?php
      if( count( $_POST[ 'numero' ] ) == '' ){
	   echo '<script>alert("Escolha um tamanho")</script>';
	   	echo '<script>history.go(-1);</script>';


   }else
                      echo 'Número escolhido: ' , $_POST[ 'numero' ] ;


?>

 

Só que quando altera alguma coisa no carrinho, volta a dar a mensagem "Escolha um tamanho"

 

O carrinho completo ta ai:

<?php
      if( count( $_POST[ 'numero' ] ) == '' ){
	   echo '<script>alert("Escolha um tamanho")</script>';
	   	echo '<script>history.go(-1);</script>';


   }else
                      echo 'Número escolhido: ' , $_POST[ 'numero' ] ;


?>

<?php 
     session_start();  


     if(!isset($_SESSION['carrinho'])){
        $_SESSION['carrinho'] = array();
     }

     //adiciona produto

     if(isset($_GET['acao'])){

        //ADICIONAR CARRINHO
        if($_GET['acao'] == 'add'){
           $id = intval($_GET['id']);
           if(!isset($_SESSION['carrinho'][$id])){
              $_SESSION['carrinho'][$id] = 1;
           }else{
              $_SESSION['carrinho'][$id] += 1;
           }
        }

        //REMOVER CARRINHO
        if($_GET['acao'] == 'del'){
           $id = intval($_GET['id']);
           if(isset($_SESSION['carrinho'][$id])){
              unset($_SESSION['carrinho'][$id]);
           }
        }

        //ALTERAR QUANTIDADE

	 //Se existir $_POST['prod'] então começa..
        if( isset( $_POST['prod'] ) )

        if($_GET['acao'] == 'up'){

           if(is_array($_POST['prod'])){
              foreach($_POST['prod'] as $id => $qtd){
                 $id  = intval($id);
                 $qtd = intval($qtd);
                 if(!empty($qtd) || $qtd <> 0){
                    $_SESSION['carrinho'][$id] = $qtd;
                 }else{
                    unset($_SESSION['carrinho'][$id]);
                 }
              }
           }
        }

     }

?>


<?php
       $i = 1;
       if(!isset($_SESSION))
{
session_start();
}  

       if(!isset($_SESSION['carrinho'])){
               $_SESSION['carrinho'] = array();
       }
                       if(count($_SESSION['carrinho']) == 0){
                                'Carrinho vazio.';
                       }else{
                               require("conexao.php");
                               $peso	= 0;
                               $total	= 0;
							$form = '';//iniciando a variavel
                               foreach($_SESSION['carrinho'] as $id => $qtd){
                               $sql   	= "SELECT *  FROM novidades WHERE id= '$id'";
                               $qr     = mysql_query($sql) or die(mysql_error());
                               $ln     = mysql_fetch_assoc($qr);

                               $nome  	= $ln['nome'];
                               $preco 	= $ln['preco'];
                               $sub   	= number_format($ln['preco'] * $qtd, 2, ',', '.');
                               $opreco = $ln['preco'];
                               $total 	+= $ln['preco'] * $qtd;
							$peso 	= $ln['peso'];
							$frete  = 0;
                               $aid	=  $ln['id'];



               $form .= '
<input type="hidden" name="item_id_' 	. $i . '" value="'.$aid.'">
<input type="hidden" name="item_descr_' . $i . '" value="'.$nome.'">
<input type="hidden" name="item_quant_' . $i . '" value="'.$qtd.'">
<input type="hidden" name="item_valor_' . $i . '" value="'.$opreco.'">
<input type="hidden" name="item_frete_' . $i . '" value="'.$frete.'">
<input type="hidden" name="item_peso_' 	. $i . '" value="'.$peso.'">';
$i++;
                               }

                               $total = number_format($total, 2, ',', '.');                                
                       }
					?>





<table>
   <caption>Carrinho de Compras</caption>
   <thead>
         <tr>
           <th width="244" bgcolor="#0099FF">Produto</th>
           <th width="79" bgcolor="#0099FF">Quantidade</th>
           <th width="200" bgcolor="#0099FF">Valor Unitário</th>
           <th width="100" bgcolor="#0099FF">SubTotal</th>
           <th width="64" bgcolor="#0099FF">Remover</th>
     </tr>
   </thead>
           <form action="carrinho&acao=add&id=<?php echo $ln['id'] ?>&acao=up" method="post">
   <tfoot>
          <tr>
           <td colspan="5"><input type="submit" value="Atualizar Carrinho" /></td>
           <tr>
           <td colspan="5"><a href="produtos.php">Continuar Comprando</a></td>
   </tfoot>

   <tbody> 
              <?php 
                    if(count($_SESSION['carrinho']) == 0){
                       echo '<tr><td colspan="5">Carrinho vazio.</td></tr>';
                    }else{
                       require("conexao.php");
                                                              $total = 0;
                       foreach($_SESSION['carrinho'] as $id => $qtd){
                             $sql   = "SELECT *  FROM novidades WHERE id= '$id'";
                             $qr    = mysql_query($sql) or die(mysql_error());
                             $ln    = mysql_fetch_assoc($qr);

                             $nome  = $ln['nome'];
                             $preco = $ln['preco'];
                             $sub   = number_format($ln['preco'] * $qtd, 2, ',', '.');

                             $total += $ln['preco'] * $qtd; 

                          echo '<tr align="center">        
                                <td>'.$nome.'</td>
                                <td><input type="text" size="3" name="prod['.$id.']" value="'.$qtd.'" /></td>
                                <td>R$ '.$preco.'</td>
                                <td>R$ '.$sub.'</td>
                                <td><a href="carrinho&acao=add&id='.$ln['id'].'&acao=del&id='.$id.'">Remove</a></td>
                             </tr>';
                       }
                          $total = number_format($total, 2, ',', '.');
                          echo '<tr align="right" bgcolor="#CCCCCC">
                                   <td colspan="4">Total</td>
                                   <td width="100">R$ '.$total.'</td>
                             </tr>';
                    }
              ?>

    </tbody>

       </form>
</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca um campo do tipo hidden no formulário também, assim você vai ter o número da sandália quando o produto for atualizado no carrinho.

echo '<tr align="center">        
      <td>'.$nome.'</td>
      <td><input type="hidden" name="numero" value="'.$ln[ 'numero' ].'" />
          <input type="text" size="3" name="prod['.$id.']" value="'.$qtd.'" /></td>
      <td>R$ '.$preco.'</td>
      <td>R$ '.$sub.'</td>
      <td><a href="carrinho&acao=add&id='.$ln['id'].'&acao=del&id='.$id.'">Remove</a></td>
    </tr>';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey não estou conseguindo, atualmente meu form que manda o produto pro carrinho está assim:

<form action="carrinho&acao=add&id=<?php echo $dados['id'] ?>" method="post" enctype="multipart/form-data" name="form1" id="form1">
      <?php
             for( $i =  $dados['detamanho']  ; $i <= $dados['atamanho'] ; ++ $i )
                    printf( '%d<input type="radio" name="numero" value="%d">  ' , $i , $i );



      ?>

      <input type="submit" value="Colocar na Sacola" name="submitForm" />
      <input type="hidden" name="numero" value="" />
</form>

 

No campo hidden no value não sei oque coloco, pra mim era a variavel $tamanho mais não dá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca isso aqui:

$_GET[ 'numero' ] 

 

E você falou que o problema é quando altera alguma coisa no carrinho.

Não é aqui que você faz a alteração ?

echo '<tr align="center">        
      <td>'.$nome.'</td>
      <td><input type="hidden" name="numero" value="'.$_GET[ 'numero' ].'" />
          <input type="text" size="3" name="prod['.$id.']" value="'.$qtd.'" /></td>
      <td>R$ '.$preco.'</td>
      <td>R$ '.$sub.'</td>
      <td><a href="carrinho&acao=add&id='.$ln['id'].'&acao=del&id='.$id.'">Remove</a></td>
    </tr>';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, sim eu fiz confusão e tbm acho que te confundi.

ta assim, o form antes do carrinho com os tamanhos e tal, ta assim:

 

<form action="carrinho&acao=add&id=<?php echo $dados['id'] ?>" method="post" enctype="multipart/form-data" name="form1" id="form1">
      <?php
             for( $i =  $dados['detamanho']  ; $i <= $dados['atamanho'] ; ++ $i )
                    printf( '%d<input type="radio" name="numero" value="%d">  ' , $i , $i );



      ?>

      <input type="submit" value="Colocar na Sacola" name="submitForm" />
</form>

 

ai no carrinho coloquei o hidden do jeito que você fez no exemplo ai

 

						  echo '<tr align="center">        
      <td>'.$nome.'</td>
      <td><input type="hidden" name="numero" value="'.$_GET[ 'numero' ].'" />
          <input type="text" size="3" name="prod['.$id.']" value="'.$qtd.'" /></td>
      <td>R$ '.$preco.'</td>
      <td>R$ '.$sub.'</td>
      <td><a href="carrinho&acao=add&id='.$ln['id'].'&acao=del&id='.$id.'">Remove</a></td>
    </tr>';

 

Só que está acontecendo esse erro:

Notice: Undefined index: numero in C:\wamp\www\DE-PAULA\CALCADOS\carrinho.php on line 168

 

a linha 168 é essa aqui:

<td><input type="hidden" name="numero" value="'.$_GET[ 'numero' ].'" />

 

Andrey, consegui arrumar o erro aqui, só que se tiver mais de 1 produto no carrinho ele puxa somente o tamanho do último item add, para todos que tiverem no carrinho

 

o carrinho ta assim:

<title>Carrinho de Compras</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<?php    
		   //esse $tamanho está puxando da página anterior para mostrar o nº escolhido.
		   		$tamanho = isset($_POST['numero']) ? $_POST['numero'] : false;


      if( isset( $_POST[ 'submitForm' ] ) == 0){
	   echo '<script>alert("Escolha um tamanho")</script>';

   }else
                      echo 'Número escolhido: ' , $tamanho ;
?>

<?php 
     session_start();  


     if(!isset($_SESSION['carrinho'])){
        $_SESSION['carrinho'] = array();
     }

     //adiciona produto

     if(isset($_GET['acao'])){

        //ADICIONAR CARRINHO
        if($_GET['acao'] == 'add'){
           $id = intval($_GET['id']);
           if(!isset($_SESSION['carrinho'][$id])){
              $_SESSION['carrinho'][$id] = 1;
           }else{
              $_SESSION['carrinho'][$id] += 1;
           }
        }

        //REMOVER CARRINHO
        if($_GET['acao'] == 'del'){
           $id = intval($_GET['id']);
           if(isset($_SESSION['carrinho'][$id])){
              unset($_SESSION['carrinho'][$id]);
           }
        }

        //ALTERAR QUANTIDADE

	 //Se existir $_POST['prod'] então começa..
        if( isset( $_POST['prod'] ) )

        if($_GET['acao'] == 'up'){

           if(is_array($_POST['prod'])){
              foreach($_POST['prod'] as $id => $qtd){
                 $id  = intval($id);
                 $qtd = intval($qtd);
                 if(!empty($qtd) || $qtd <> 0){
                    $_SESSION['carrinho'][$id] = $qtd;
                 }else{
                    unset($_SESSION['carrinho'][$id]);
                 }
              }
           }
        }

     }

?>


<?php
       $i = 1;
       if(!isset($_SESSION))
{
session_start();
}  

       if(!isset($_SESSION['carrinho'])){
               $_SESSION['carrinho'] = array();
       }
                       if(count($_SESSION['carrinho']) == 0){
                                'Carrinho vazio.';
                       }else{
                               require("conexao.php");
                               $peso	= 0;
                               $total	= 0;
							$form = '';//iniciando a variavel
                               foreach($_SESSION['carrinho'] as $id => $qtd){
                               $sql   	= "SELECT *  FROM novidades WHERE id= '$id'";
                               $qr     = mysql_query($sql) or die(mysql_error());
                               $ln     = mysql_fetch_assoc($qr);

                               $nome  	= $ln['nome'];
                               $preco 	= $ln['preco'];
                               $sub   	= number_format($ln['preco'] * $qtd, 2, ',', '.');
                               $opreco = $ln['preco'];
                               $total 	+= $ln['preco'] * $qtd;
							$peso 	= $ln['peso'];
							$frete  = 0;
                               $aid	=  $ln['id'];



               $form .= '
<input type="hidden" name="item_id_' 	. $i . '" value="'.$aid.'">
<input type="hidden" name="item_descr_' . $i . '" value="'.$nome.'">
<input type="hidden" name="item_quant_' . $i . '" value="'.$qtd.'">
<input type="hidden" name="item_valor_' . $i . '" value="'.$opreco.'">
<input type="hidden" name="item_frete_' . $i . '" value="'.$frete.'">
<input type="hidden" name="item_peso_' 	. $i . '" value="'.$peso.'">';
$i++;
                               }

                               $total = number_format($total, 2, ',', '.');                                
                       }
					?>





<table>
   <caption>Carrinho de Compras</caption>
   <thead>
         <tr>
           <th width="244" bgcolor="#0099FF">Produto</th>
           <th width="79" bgcolor="#0099FF">Quantidade</th>
           <th width="200" bgcolor="#0099FF">Valor Unitário</th>
           <th width="100" bgcolor="#0099FF">SubTotal</th>
           <th width="64" bgcolor="#0099FF">Remover</th>
     </tr>
   </thead>
           <form action="carrinho&acao=add&id=<?php echo $ln['id'] ?>&acao=up" method="post">
   <tfoot>
          <tr>
           <td colspan="5"><input type="submit" value="Atualizar Carrinho" /></td>
           <tr>
   </tfoot>

   <tbody> 




              <?php 




                    if(count($_SESSION['carrinho']) == 0){
                       echo '<tr><td colspan="5">Carrinho vazio.</td></tr>';
                    }else{
                       require("conexao.php");
                                                              $total = 0;
                       foreach($_SESSION['carrinho'] as $id => $qtd){
                             $sql   = "SELECT *  FROM novidades WHERE id= '$id'";
                             $qr    = mysql_query($sql) or die(mysql_error());
                             $ln    = mysql_fetch_assoc($qr);

                             $nome  = $ln['nome'];
                             $preco = $ln['preco'];
                             $sub   = number_format($ln['preco'] * $qtd, 2, ',', '.');

                             $total += $ln['preco'] * $qtd; 

                          echo '<tr align="center">        
					   <td>'.$nome.' '.$tamanho.'</td>
					   <td><input type="hidden" name="numero" value="'.$tamanho.'" />
						   <input type="text" size="3" name="prod['.$id.']" value="'.$qtd.'" /></td>
					   <td>R$ '.$preco.'</td>
					   <td>R$ '.$sub.'</td>
					   <td><a href="carrinho&acao=add&id='.$ln['id'].'&acao=del&id='.$id.'">Remove</a></td>
					 </tr>';
                       }
                          $total = number_format($total, 2, ',', '.');
                          echo '<tr align="right" bgcolor="#CCCCCC">
                                   <td colspan="4">Total</td>
                                   <td width="100">R$ '.$total.'</td>
                             </tr>';
                    }
              ?>

    </tbody>

       </form>
</table>

 

Ao invés de cada produto ter seu tamanho, todos estão com o mesmo tamanho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém sabe como posso fazer isso ai?

Não faça 'up' em tópicos, espere por uma resposta.

 

Ok, eu acho que você deveria separar o seu código em funções, motivos, se der problema com alguma delas, você vai saber exatamente qual foi, outra fica mais organizado, e fica até melhor de mesclar código quando necessário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém sabe como posso fazer isso ai?

Não faça 'up' em tópicos, espere por uma resposta.

 

Ok, eu acho que você deveria separar o seu código em funções, motivos, se der problema com alguma delas, você vai saber exatamente qual foi, outra fica mais organizado, e fica até melhor de mesclar código quando necessário.

Desculpas ai Andrey, é que estou desorientado com isso já.

quando você fala em separar o código, é tipo ali no começo do carrinho onde tem:

//ADICIONAR CARRINHO

//REMOVER CARRINHO

//ALTERAR CARRINHO

?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, algo mais ou menos nesse sentido.

<?php
      session_start();
      function addCartItem( $ItemCode , $Quanty , $Number , $Parameter = 'add' ){
               if( isset( $_REQUEST[ $Parameter ] ) ){
                     $_SESSION[ 'carrinho' ][ 'produtos' ][ $ItemCode ] = $ItemCode;
                     $_SESSION[ 'carrinho' ][ 'quantidade' ][ $ItemCode ] = $Quanty;
                     $_SESSION[ 'carrinho' ][ 'numero' ][ $ItemCode ] = $Number;
               }
      }
      function removeCartItem( $ItemCode , $Parameter = 'del' ){
               if( isset( $_REQUEST[ $Parameter ] ) ){
                     if( array_key_exists( $ItemCode , $_SESSION[ 'carrinho' ][ 'produtos' ] ) ){
                            unset( $_SESSION[ 'carrinho' ][ 'produtos' ][ $ItemCode ] );
                            unset( $_SESSION[ 'carrinho' ][ 'quantidade' ][ $ItemCode ] );
                            unset( $_SESSION[ 'carrinho' ][ 'numero' ][ $ItemCode ] );
                     } else { 
                            return 'Não Podemos remover um produto inexistente em seu carrinho';
                     }
               }
      }

      addCartItem( 123 , 1 , 39 );
      addCartItem( 3625 , 2 , 38 );
      addCartItem( 3626 , 3 , 35 );
      removeCartItem( 3625 );
      echo '<pre>';
      print_r( $_SESSION );
      session_unset();

 

Saída:

Array
(
   [carrinho] => Array
       (
           [produtos] => Array
               (
                   [123] => 123
                   [3626] => 3626
               )

           [quantidade] => Array
               (
                   [123] => 1
                   [3626] => 3
               )

           [numero] => Array
               (
                   [123] => 39
                   [3626] => 35
               )

       )

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey, fiquei mais confuso ainda ;/

pq parece ser um problema simples, oque está acontecendo é que todos produtos do carrinho está com o mesmo tamanho do ultimo item postado e não cada um com seu tamanho escolhido.

Sabe quando tudo está quase pronto e uma coisinha só te deixa louco? então esse é meu caso ;/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.