Jump to content
viegasss

Array

Recommended Posts

viegasss

Boas estou a trabalhar em php... o meu array não estou a guardar bem, só guardar bem..

index.php

<?php
include("./dao_jogos.class.php");
include("./jogos.class.php");
$Novo_Jogo = new DaoJogo();
$Novo_Jogo->addjogo(new Jogos("Jogo 1", 5, "PC", "Não", "..."));
$Novo_Jogo->addjogo(new Jogos("Jogo 2", 150, "XBox ONE", "Sim", "...."));
$Novo_Jogo->addjogo(new Jogos("Jogo 3", 50, "PS4", "Sim", "..."));
if(isset($_POST["guardar"])){
// Inserir o jogo no Array
$nome = $_POST["nome"];
$preco = $_POST["preco"];
$plataforma = $_POST["plataforma"];
$estado = $_POST["estado"];
$obs = $_POST["obs"];
$Novo_Jogo->addjogo(new Jogos($nome,$preco,$plataforma,$estado,$obs));

}
?>

gere_jogo.php

    <?php
    class DAOJogo{
    public $Novojogo = array();         public function addjogo(Jogos $objetoJogo){
            $this->Novojogo[] = $objetoJogo ;         }

        public function novoJogo($nome,$preco,$plataforma,$estado,$obs){
            $this->addjogo(new Jogos($nome,$preco,$plataforma,$estado,$obs));
        }         public function verjogos(){
        foreach ($this->Novojogo as $objetoJogo) {
            echo $objetoJogo->mostrarJogos();         }
    }
    }
    ?>

Edited by pwseo
syntax highlight.

Share this post


Link to post
Share on other sites
tiago.f

Oi,

A questão não é clara.

Qual é a dúvida? (Sugiro leres o que escreveste)

Share this post


Link to post
Share on other sites
viegasss

Oi,

A questão não é clara.

Qual é a dúvida? (Sugiro leres o que escreveste)

Tens razão... lapso meu... o meu array de objectos só guarda a primeira vez em que é inserido depois ...

Não sei se estou a criar mal o array de objectos... porque não é normal... o array guardar uma unica vez

Share this post


Link to post
Share on other sites
tiago.f

ok...podes definir "a primeira vez" ?

<?php

include("./dao_jogos.class.php");

include("./jogos.class.php");

$Novo_Jogo = new DaoJogo();

$Novo_Jogo->addjogo(new Jogos("Jogo 1", 5, "PC", "Não", "..."));

até aqui guarda, mas a instrução a seguir já não, é isso?

$Novo_Jogo->addjogo(new Jogos("Jogo 2", 150, "XBox ONE", "Sim", "...."));

PS: identa o código pff

Edited by tiago.f

Share this post


Link to post
Share on other sites
viegasss

ok...podes definir "a primeira vez" ?

<?php

include("./dao_jogos.class.php");

include("./jogos.class.php");

$Novo_Jogo = new DaoJogo();

$Novo_Jogo->addjogo(new Jogos("Jogo 1", 5, "PC", "Não", "..."));

até aqui guarda, mas a instrução a seguir já não, é isso?

$Novo_Jogo->addjogo(new Jogos("Jogo 2", 150, "XBox ONE", "Sim", "...."));

PS: identa o código pff

Não! ele guarda os 3 por defeito.... e mostra sempre os 3 .... quando eu introduzo o 4 elemento e guarda o 4 mas quando vou introduzir o 5 ele substitui o 4 elemento

Eu vou deixar-te aqui o meu index.php completo...

<?php
include("./dao_jogos.class.php");
include("./jogos.class.php");
$Novo_Jogo = new DaoJogo();
$Novo_Jogo->addjogo(new Jogos("Jogo 1", 5, "PC", "Não", "..."));
$Novo_Jogo->addjogo(new Jogos("Jogo 2", 150, "XBox ONE", "Sim", "...."));
$Novo_Jogo->addjogo(new Jogos("Jogo 3", 50, "PS4", "Sim", "..."));
if(isset($_POST["guardar"])){
 // Inserir o jogo no Array

 $nome = $_POST["nome"];
 $preco = $_POST["preco"];
 $plataforma = $_POST["plataforma"];
 $estado = $_POST["estado"];
 $obs = $_POST["obs"];
 $Novo_Jogo->addjogo(new Jogos($nome,$preco,$plataforma,$estado,$obs));
}
?>
<!DOCTYPE html>
<html lang="pt">
 <head>
<meta charset="utf-8">
<title>Lista de Jogos</title>
 </head>
<body>

  <form action="index.php" method="POST">
	 <p>Jogo: <input type="text" name="nome"></p>
	 <p>Preço:<input name="preco" cols="40" rows="4" name="preco"></p>
	  <p>Plataforma:
	  <select name="plataforma" >
		 <option value="pc">PC</option>
		 <option value="XBOX">Xbox</option>
		 <option value="ps4">PS4</option>
		 <option value="nitendo">Nitendo</option>
	 </select>
	</p>
	 <p>Novo? <input name="estado" type="checkbox"/>
	 <p>Observações: <textarea name="obs" type="radio" value="azul" checked="checked"></textarea></p>
	 <p><input name="guardar" type="submit" value="Adicionar"/></p>
  </form>
  <form action="index.php" method="POST">
	  <input type="submit" value="Ver jogos" name="verjogos">
  </form>
  <!-- Div para mostrar a tabela de todos os dados -->
  <div class="div1">
	<?php
	  echo "<H3>LISTA DE JOGOS:</H3>";
	  echo "<table border=1px align=center>";
	  echo "<th>ID</th><th>NOME JOGO</th><th>PREÇO</th><th>PLATAFORMA</th><th>NOVO</th><th>OBSERVAÇÕES</th>";
	  $Novo_Jogo->verjogos();
	  echo "</table>";
	?>
  </div> <br>

 </body>
</html>

Share this post


Link to post
Share on other sites
tiago.f

Mas estás a persistir a variavel $Novo_jogo nalgum lado? ... é que cada vez que o teu script corre estás a inicializar a variavel $Novo_jogo (criar uma nova classe - vazia)

Já agora, se esperas que as tuas variaveis globais se mantenham de entre pedidos, isso não vai acontecer: tirando a variavel $_SESSION, não e guardado estado entre pedidos.

Edited by tiago.f

Share this post


Link to post
Share on other sites
viegasss

Então... mas eu tenho que criar o Objecto para chamar as Function que tenho na classo DaoJogo...

Não estou a perceber mesmo

Share this post


Link to post
Share on other sites
tiago.f

Tens,certo.

Mas o teu problema é que a segunda vez que submetes o formulário a tua variável $Novo_jogo volta "ao início".

É isso que te está a acontecer certo? O máximo que te mostra são os jogos 1,2,3 + o que inseres no formulário, certo?

Share this post


Link to post
Share on other sites
viegasss

Sim é isso mesmo...

Como consigo corrigir isso? Sabes alguma maneira ?

Share this post


Link to post
Share on other sites
tiago.f

Bem...

Como disse, por natureza, o protocolo HTTP é stateless, e nesse sentido também o é o apache+php.

A cada pedido recebido pelo servidor, a execução do código começa do zero, i.e., esquece variáveis globais, classes estáticas, etc - podes usá-las claro, mas não persistem entre pedidos.

A excepção a isto, do lado do servidor, é a variável $_SESSION - nesta podes guardar informação que persiste entre pedidos - mas não persistem para sempre: a sessão perde-se quando o cookie respectivo expira.

Isto tudo para dizer que podes usar a $_SESSION mas não é solução permanente e não vai persistir os dados.

Tens portanto várias opções:

- serialização do teu objecto para um ficheiro no final do script, e deserialização no início do teu programa

- guardar a info numa BD e ler daí

- etc, etc

Share this post


Link to post
Share on other sites
viegasss

eu já estive haver algumas coisas mas não estou a ver como vou utilizar...

o próximo passo e fazer numa BD... mas 1 tenho guardar no array e mostrar :S

Share this post


Link to post
Share on other sites
tiago.f

Pois, não conheço o teu projecto nem a finalidade.

No meu caso, uso Eloquent como ORM nos projectos de php que precisam de BD.

De certeza que também serve para o que queres, mas pode ser um "canhão para matares uma mosca"

Vê aqui: https://laravel.com/docs/5.2/eloquent

Não recomendo outros pq não uso mais nenhum mas talvez alguém aqui no fórum conheça outros igualmente interessantes..

Edited by tiago.f

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

×
×
  • 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.