Help com Array! [RESOLVIDO]

1. Help com Array! [RESOLVIDO]

washington mendes da silva
wmendes

(usa Ubuntu)

Enviado em 28/02/2013 - 12:50h

Estou tentando fazer um chat em php, mas esta quase terminado.
o problema e que estou com um erro no navegador que diz assim.

Warning: Invalid argument supplied for foreach()

o arquivo ta assim!

case 'atualizar':

foreach ($chat->listar() as $v){
$ativo = ($v['nome'] == $_COOKIE['nome']) ? 'class="ativo"' : "";
printf('<p%s>[%s] - %s</p>', $ativo, $v['nome'], $v['mensagem']);
}
break;


como eu crio um array para esse $chat->listar()??? acho que o problema e esse.




  


2. Re: Help com Array! [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/02/2013 - 15:28h

wmendes escreveu:

Estou tentando fazer um chat em php, mas esta quase terminado.
o problema e que estou com um erro no navegador que diz assim.

Warning: Invalid argument supplied for foreach()

o arquivo ta assim!

case 'atualizar':

foreach ($chat->listar() as $v){
$ativo = ($v['nome'] == $_COOKIE['nome']) ? 'class="ativo"' : "";
printf('<p%s>[%s] - %s</p>', $ativo, $v['nome'], $v['mensagem']);
}
break;


como eu crio um array para esse $chat->listar()??? acho que o problema e esse.




Acho que você falou tudo, a estrutura do foreach é a seguinte:

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr é agora array(2, 4, 6, 8)
unset($value); // quebra a referência com o último elemento
?>

O erro foi:
"Warning: Invalid argument supplied for foreach()"
Aviso: Argumento inválido informado para foreach().

O argumento que você informa é o array que será percorrido.

Teste o método $chat->listar(). Veja se está retornando um array.




3. Re: Help com Array! [RESOLVIDO]

Joca (Altemir Braz Dantas Junior)
jocajuni

(usa Debian)

Enviado em 04/03/2013 - 18:35h

É isso mesmo que o alex falou entao faca o seguinte


case 'atualizar':
if(is_array($chat->listar())){
foreach ($chat->listar() as $v){
$ativo = ($v['nome'] == $_COOKIE['nome']) ? 'class="ativo"' : "";
printf('<p%s>[%s] - %s</p>', $ativo, $v['nome'], $v['mensagem']);
}
}
break;


ele so vai entrar no foreach se $chat->listar() for array entao como alex falou testa sua function listar da classe chat se ele esta retornando um array;


[]s
Altemir Braz Dantas Junior
Jocajuni


4. Caso Parecido

Sergio Murilo Cabral
murilocabral

(usa Outra)

Enviado em 08/04/2013 - 02:03h

Olá, Jocajuni.
Eu tive o mesmo problema que o Wmendes.
Eu fiz a alteração que mencionou no meu código e funcionou, porém agora fica dando o seguinte error:

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in /home/sljvirtu/public_html/chat/classes/Chat.class.php on line 28

Estou enviando os código da pagina Chat.class.php, para que vc. possa dar uma olhada e me orientar onde esta o erro, pois já verifiquei de cabo a rabo e esta tudo do jeito como manda a VideoAula.
Como a imagem não é muito boa pode haver algum ou alguns erros.

Código abaixo:

<?php
class Chat{
private $nome;
private $mensagem;
private $tempoLimite;

public function __construct(){
$this->tempoLimite = TEMPO_LIMITE;
}

public function setNome($nome){
$this->nome = $nome;
}
public function getNome(){
return $this->nome;
}

public function setMensagem($msg){
$this->mensagem = $msg;
}
public function getMensagem($msg){
return $this->mensagem;
}

public function inserir(){
$strSQL = "INSERT INTO chat SET nome = ? , mensagem = ? , datahora = NOW()";
$stmt = BD::getConn()->prepare($strSQL);
$data = $stmt->execute($data);
}

public function existeNome(){
$strSQL = "SELECT COUNT (nome) FROM chat WHERE nome = ?";
$stmt = BD::getConn()->prepare($strSQL);
$data = array($this->getNome());
$stmt->execute($data);
return ($stmt->fetchColumn() > 0) ? true : false;
}

public function excluir(){
$strSQL = "DELETE FROM chat WHERE DATE_ADD(datahora, INTERVAL ($this->tempoLimite) DAY) < NOW()";
$stmt = BD::getConn()->query($strSQL);
}

public function listar(){
$strSQL = "SELECT FROM chat ORDER BY id DESC";
return BD::getConn()->query($strSQL);
}}

?>

Desde já fico no aguardo de sua resposta e muito agradecido pela sua atenção.

Murilo Cabral



5. Caso Parecido:Continua

Sergio Murilo Cabral
murilocabral

(usa Outra)

Enviado em 08/04/2013 - 02:15h

Esqueci de dizer de que ele não passa da pagina chat.php, ele fica estático nesta pagina.
Pode dar uma olhada no que esta acontecendo no endereço:

http://www.sljvirtual.com.br/chat/chat.php - Nesse ele fica estático.


// Código PHP da chat.php

<?
require("config/config.php");
$chat = new Chat();
switch ($_POST['acao']){
case 'inserir':
$chat->excluir();
$chat->setNome($_COOKIE['nome']);
$chat->setMensagem(filter_input(INPUT_POST, 'mensagem'));
if($chat->inserir()){

printf('<p class="ativo">[%s] - %s</p>', $chat->getNome(), $chat->getMensagem());
}
break;

case 'atualizar';
if(is_array($chat->listar())){
foreach($chat->listar() as $v){
$ativo = ($v['nome'] == $_COOKIE['nome']) ? 'class="ativo"' : "";
printf('<p%s>[%s]-%s</p>', $ativo, $v['nome'], $v['mensagem']);
}
break;


}}

?>
//////////////////////////////////////

http://www.sljvirtual.com.br/chat/chat-index.php - Nesse ele dá o erro mencionado anteriormente.

Bem desculpe o trabalho, mas obrigadão pela a ajuda.

Murilo Cabral


6. Re: Help com Array! [RESOLVIDO]

Joca (Altemir Braz Dantas Junior)
jocajuni

(usa Debian)

Enviado em 08/04/2013 - 12:55h

murilocabral escreveu:

Olá, Jocajuni.
Eu tive o mesmo problema que o Wmendes.
Eu fiz a alteração que mencionou no meu código e funcionou, porém agora fica dando o seguinte error:

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in /home/sljvirtu/public_html/chat/classes/Chat.class.php on line 28

Estou enviando os código da pagina Chat.class.php, para que vc. possa dar uma olhada e me orientar onde esta o erro, pois já verifiquei de cabo a rabo e esta tudo do jeito como manda a VideoAula.
Como a imagem não é muito boa pode haver algum ou alguns erros.

Código abaixo:

<?php
class Chat{
private $nome;
private $mensagempublic function inserir(){
$strSQL = "INSERT INTO chat SET nome = ? , mensagem = ? , datahora = NOW()";
$stmt = BD::getConn()->prepare($strSQL);
$data = $stmt->execute($data);
}

Nesta funcao vc esqueceu de passar os paramentros pro banco algo do tipo

$data = array($this->getNome(), $this->getMensagem());;
private $tempoLimite;

public function __construct(){
$this->tempoLimite = TEMPO_LIMITE;
}

public function setNome($nome){
$this->nome = $nome;
}
public function getNome(){
return $this->nome;
}

public function setMensagem($msg){
$this->mensagem = $msg;
}
public function getMensagem($msg){
return $this->mensagem;
}

public function inserir(){
$strSQL = "INSERT INTO chat SET nome = ? , mensagem = ? , datahora = NOW()";
$stmt = BD::getConn()->prepare($strSQL);
$data = $stmt->execute($data);
}

public function existeNome(){
$strSQL = "SELECT COUNT (nome) FROM chat WHERE nome = ?";
$stmt = BD::getConn()->prepare($strSQL);
$data = array($this->getNome());
$stmt->execute($data);
return ($stmt->fetchColumn() > 0) ? true : false;
}

public function excluir(){
$strSQL = "DELETE FROM chat WHERE DATE_ADD(datahora, INTERVAL ($this->tempoLimite) DAY) < NOW()";
$stmt = BD::getConn()->query($strSQL);
}

public function listar(){
$strSQL = "SELECT FROM chat ORDER BY id DESC";
return BD::getConn()->query($strSQL);
}}

?>

Desde já fico no aguardo de sua resposta e muito agradecido pela sua atenção.

Murilo Cabral



public function inserir(){
$strSQL = "INSERT INTO chat SET nome = ? , mensagem = ? , datahora = NOW()";
$stmt = BD::getConn()->prepare($strSQL);
$data = $stmt->execute($data);
}

Nesta funcao vc esqueceu de passar os paramentros pro banco algo do tipo

$data = array($this->getNome(), $this->getMensagem());

ficaria assim


public function inserir(){
$strSQL = "INSERT INTO chat SET nome = ? , mensagem = ? , datahora = NOW()";
$stmt = BD::getConn()->prepare($strSQL);
$data = array($this->getNome(), $this->getMensagem());
$stmt->execute($data);
}

[]s
Altemir Braz Dantas Junior
Jocajuni


7. Re: Help com Array! [RESOLVIDO]

Joca (Altemir Braz Dantas Junior)
jocajuni

(usa Debian)

Enviado em 08/04/2013 - 13:00h

murilocabral escreveu:

Esqueci de dizer de que ele não passa da pagina chat.php, ele fica estático nesta pagina.
Pode dar uma olhada no que esta acontecendo no endereço:

http://www.sljvirtual.com.br/chat/chat.php - Nesse ele fica estático.


// Código PHP da chat.php

<?
require("config/config.php");
$chat = new Chat();
switch ($_POST['acao']){
case 'inserir':
$chat->excluir();
$chat->setNome($_COOKIE['nome']);
$chat->setMensagem(filter_input(INPUT_POST, 'mensagem'));
if($chat->inserir()){

printf('<p class="ativo">[%s] - %s</p>', $chat->getNome(), $chat->getMensagem());
}
break;

case 'atualizar';
if(is_array($chat->listar())){
foreach($chat->listar() as $v){
$ativo = ($v['nome'] == $_COOKIE['nome']) ? 'class="ativo"' : "";
printf('<p%s>[%s]-%s</p>', $ativo, $v['nome'], $v['mensagem']);
}
break;


}}

?>
//////////////////////////////////////
nada
http://www.sljvirtual.com.br/chat/chat-index.php - Nesse ele dá o erro mencionado anteriormente.

Bem desculpe o trabalho, mas obrigadão pela a ajuda.

Murilo Cabral


nessa eu trocaria a seguinte linha

$ativo = ($v['nome'] == $_COOKIE['nome']) ? 'class="ativo"' : "";
printf('<p%s>[%s]-%s</p>', $ativo, $v['nome'], $v['mensagem']);
para
$ativo = ($v['nome'] == $_COOKIE['nome']) ? 'class="ativo"' : 'class="normal"';
printf('<p %s>[%s]-%s</p>', $ativo, $v['nome'], $v['mensagem']);


[]s
Altemir Braz Dantas Junior
Jocajuni



8. Caso parecido - RESOLVIDO

Sergio Murilo Cabral
murilocabral

(usa Outra)

Enviado em 08/04/2013 - 16:16h

Valeu Jocajuni, tu é o CARA....Rsrsrsrsr
Funcionou as dicas que tu me deste.
Junto com as suas dicas e descobri um erro meu,(Eu alterei o nome de um arquivo e esqueci de alterar em uma determinada pagina) conseguimos colocar para funcionar.
Esta enviando e gravando no BD as conversas.
Agora vou descobrir como visualizar as conversas, pois faltei a essa aula....Rsrsrsr

Mas valeu mesmo as dicas, fico muito agradecido pela a atenção e a paciência.

Brigadão....

Murilo Cabral


9. Caso parecido - Quase RESOLVIDO

Sergio Murilo Cabral
murilocabral

(usa Outra)

Enviado em 08/04/2013 - 17:44h

E ae Jocajuni,
cara parou realmente de ficar estático, esta entrando apos inserir o nome e vai para a agina do CHAT.
Porém, quando digito qualquer coisa ele não esta aparecendo no painel e eu não sei como visualizar ou trocar informações simultâneas. Ou seja voltei a estaca Zero.

Esta gravando no BD certinho, cada vez que se dar o enviar ele grava no BD, porém não é visualizado.

Eu instalei o LiveZilla no Site( http://www.sljvirtual.com.br ), e vou deixar um link no rodapé da pagina com o nome de chat desse que esta dando problema.

Se vc. puder entrar pelo LiveZilla para trocarmos ideias on-line, talvez vc. possa me ajudar.

Estarei aguardando,

Murilo Cabral


10. Re: Help com Array! [RESOLVIDO]

Joca (Altemir Braz Dantas Junior)
jocajuni

(usa Debian)

Enviado em 09/04/2013 - 12:53h



troque sua function

public function listar(){
$strSQL = "SELECT FROM chat ORDER BY id DESC";
return BD::getConn()->query($strSQL);
}}


por essa

public function listar(){
$strSQL = "SELECT * FROM chat ORDER BY id DESC";
return BD::getConn()->query($strSQL);
}}


[]s
Altemir Braz Dantas Junior
Jocajuni


11. Caso parecido - Quase RESOLVIDO

Sergio Murilo Cabral
murilocabral

(usa Outra)

Enviado em 09/04/2013 - 16:48h

Fala Jocajuni, beleza????

Cara inclui o * na linha da function, porém ainda não recebo as mensagem listadas no painel.

Mas fica aqui minha dúvida:
Eu não teria que ter um outro painel para que eu pudesse receber e enviar as mensagem para a outra pessoa?
Tipo no LiveZilla sempre que alguém entra no Chat, eu sou avisado através de um sinal que alguém acabou de se conectar ao Chat.
Na vídeoaula o instrutor não fala sobre isso.
Estou enviando abaixo os endereços da videoaula no YouTube referente a esses códigos.
Quem sabe vendo o que ele faz e fala pode a te ajudar a matar essa para me ajudar.

http://www.youtube.com/watch?v=GofsAq4Ob6A&list=PL6C5286971000C0DF

Valeu mais uma vez pela a atenção e a paciência.

Grande abraço....

Murilo Cabral


12. Re: Help com Array! [RESOLVIDO]

Joca (Altemir Braz Dantas Junior)
jocajuni

(usa Debian)

Enviado em 10/04/2013 - 18:26h

Entao vi o tutorial do youtube.

Esse chat ai é só de uma sala, todo mundo que entrar nele vai cair na mesma sala.

Eu vi que vc tirou o link do ar, na verdade acho que vc errou no jquery aonde vc joga o texto
do inserir e atualizar para a div.

toda vez que vou falar com vcno livezila ta offline.

se vc quer um serviço de atendimento online gratuito veja o site http://acessa.me

se vc quiser arrumar esse chat , vc tem gtalk ou uma conta no gmail?

[]s
Altemir Braz Dantas Junior
jocajuni



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts