Jump to content

Array


webwolf
 Share

Recommended Posts

Boas,

sou autodidata e estou a aprender bastante tentando alterar um cart que encontrei na net (plaincart), de versão simples para mais sofisticada. Até agora tenho alterado bastantes coisas e aprendido bastante mas...

O cart só tinha um porte e criei uma forma que funciona para ter varios portes configuraveis. O cliente seleciona numa combo a zona geo e aparecem os valores de portes e taxas.

A tabela dos portes e taxas é autoincrement e o que me acontece é não conseguir visualizar todos os paises depois de apagar outros no meio: 1-Portugal, 2:Ilhas, 8:Europa.

Ou seja, como posso saltar os campos vazios?

Aqui segue o codigo ke uso com um pedido de ajuda e obrigado antecipado 👍 ...

PS: preciso mesmo do autoincrement.

$sql = "SELECT sh_id, opid, 
               osid, otid, op_id
        FROM tbl_shiping, tbl_paises
	WHERE sh_id = op_id $sql2
	ORDER BY sh_id ASC"; 
$retval = mysql_query( $sql );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
$i = 0;
$array = array();
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
         $portes = $row['osid'];
         $taxas = $row['otid'];       
         $pais = $row['opid'];
         $array[$i] = $row['opid'];
         $i++;

}

$orderPais = $array;
$orderOption = '';
Link to comment
Share on other sites

Vou-te ser sincero, não percebi bem a tua duvida

Mas se o que queres é que aparece na combo 1-Portugal, 2-Ilhas, 3-Europa.

Podes fazer um re-index a tabela assim quando fizeres o teu while carregas o array "arranjado"

Agora se tens esta tabela ligada a outro sitio é mais complicado...

Explica melhor o objectivo

Link to comment
Share on other sites

Viva e obrigado por responderes,

o problema é que a tabela de porte é auto increment e preciso que continue assim.

Agora, tenho 1-Portugal, 2-Ilhas e 8-Europa.

Isto pq apaguei outros portes, 3,4,5,6 e 7.

Na combo só aparece os portes 1 e 2, salta os indexes vazios e não me aparece o 8.

É esta a minha questão, como correr a tabela e aparecer tudo o que lá esteja, mesmo com indexes vazios pelo meio.

Deu pra entender?

Abc

Link to comment
Share on other sites

Esquece o $i.

Isto funciona

$array = array();
while ($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
    $array[] = $row;
}

No fim do ciclo, o $array vai ter tantos elementos quantas linhas foram devolvidas da base de dados.

E podes aceder-lhes tal e qual como dantes (o foreach também funciona, claro).

$array[0]['osid'] # primeiro osid
$array[5]['opid'] # sexto opid

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Viva e obrigado pela dica mas...

não funciona, continua a saltar os indexes vazios.

Na combo aparece  Portugal, Ilhas que é o 1 e o 2 mas não aparece Europa que é o 8.

Já tou a dar com a tola no monitor...lol...

pmg, se puderes verificar fico-te grato

Abc

Link to comment
Share on other sites

Como é que estas a construir a combo?

Eu andei a brincar na pagina de testes (até fiz uma encomenda!) mas nao encontrei essa combo.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

👍

já vi a tua encomenda... envio em breve... 😄

Ok, a combo está em cart.php, a primeira pagina que aparece depois clicares em "Ver carro de compras" no index.

No form tem um campo "portes" que foi onde coloquei a combo.

Obrigado por estares a ajudar.

Link to comment
Share on other sites

Ok, ja vi a combo. Nao tem nada de errado.

Qual é o codigo PHP que a cria, desde o <select> até ao ultimo <option>?

Parto do principio que o codigo que vai buscar dados a base de dados é o que puseste no primeiro post ...

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Eu vou dar  :wallbash: por ser tão burro...

já está a começar a funcionar.

Ao principio criei duas tabelas,Paises e Shiping. A tbl_shiping recebia os dados da paises. Depois desisti e acabei por usar só uma tabela com os dados todos, a shiping.

No entanto, aqui no codigo esqueci-me e fiz uma chamada ah tabela Paises. Como ela nao tinha o campo Europa, nao aparecia

Burro..................

Inseri o campo Europa na tbl_paises e funcionou.

Só te posso pedir desculpas e mais uma coisinha,podes olhar pro principio do codigo e ver como posso usar só uma tabela?

O campo que estou a usar da tbl_paises(a que quero deixarde usar) é o op_id.

Volto a postar o codigo:linha 2 e 3 do sql:

$sql = "SELECT sh_id, opid, 
               osid, otid, op_id
        FROM tbl_shiping, tbl_paises
	WHERE sh_id = op_id $sql2
	ORDER BY sh_id ASC"; 
$retval = mysql_query( $sql );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
$array = array();

while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
         $portes = $row['osid'];
         $taxas = $row['otid'];       
         $pais = $row['opid'];
         $array[] = $row['opid'];
         

}

   		
$orderPais = $array;
$orderOption = '';

foreach ($orderPais as $stat) {
$orderOption .= "<option value=\"$stat\"";
if ($stat == $pais) {
	$orderOption .= 'selected = " selected"';
}

Link to comment
Share on other sites

Ter duas tabelas é boa ideia!

Nao vejo razao para desnormalizar a base de dados.

Se queres ter SELECTs mais simples no codigo PHP, faz VIEWs na base de dados e, no codigo PHP faz SELECT as views.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Boas

obrigado PMG,isto está a funcionar a...80% 😉

apenas mais uma duvida:

quandro abre a pagina e nada está selecionado na combo, aparecem logo os valores do prmero index da bd. Penso que está certo pq o array vai logo buscar os dados à bd.

Há alguma forma de contornar isto? Ou seja, nada selecionado, não há valores.

Pensei em duas formas: Começar o array no index 2 e criava um vazio no 1... mas não me parece boa programação...

ou então... preciso de ajuda 🙂

Obrigado

junto o codigo onde é feito o selectda combo


<tr class="content"> 
   <td colspan="4" align="right">Portes:
     <select name="cboOrderPais" class="box" id="cboOrderPais" onChange="viewPaises();">
      <option value="">Selecione a sua zona</option>
  <?php echo $orderOption; ?> </select> </td>
  <td align="right"><label><?php echo displayAmount($portes); ?></label></td>
  <td align="center"> </td>
    </tr>
Link to comment
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
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.