Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Já olhei em todo o codigo mas não consigo encontrar a solução dessa mensagem:
Catchable fatal error: Argument 1 passed to UsuarioController::RetornarUsuarios() must be an instance of string, string given, called in C:\wamp\www\Site_Vereadores\Admin-bc\View\UsuarioView\UsuarioView.php on line 49 and defined in C:\wamp\www\Site_Vereadores\Controller\UsuarioController.php on line 23
se alguém já passou por esse problema por favor me digam como conseguiram resolver.
estou tentando migrar para o padrao MVC.
vou mostrar o que foi feito onde indica o erro
public function RetornarUsuarios(string $termo, int $tipo) {
if ($termo != "" && $tipo >= 1 && $tipo <= 4) {
echo "ok";
return $this->usuarioDAO->RetornarUsuarios($termo, $tipo);
} else {
return null;
}
}
essa é a outra parte que correlaciona esse código
public function RetornarUsuarios(string $termo, int $tipo) {
try {
$sql = "";
switch ($tipo) {
case 1:
$sql = "SELECT cod, nome, usuario, status, permissao FROM usuario WHERE nome LIKE :termo ORDER BY nome ASC";
break;
case 2:
$sql = "SELECT cod, nome, usuario, status, permissao FROM usuario WHERE email LIKE :termo ORDER BY nome ASC";
break;
case 3:
$sql = "SELECT cod, nome, usuario, status, permissao FROM usuario WHERE cpf LIKE :termo ORDER BY nome ASC";
break;
case 4:
$sql = "SELECT cod, nome, usuario, status, permissao FROM usuario WHERE usuario LIKE :termo ORDER BY nome ASC";
break;
}
$param = array(
":termo" => "%{$termo}%"
);
$dataTable = $this->pdo->ExecuteQuery($sql, $param);
$listaUsuario = [];
foreach ($dataTable as $resultado) {
$usuario = new Usuario();
$usuario->setCod($resultado["cod"]);
$usuario->setNome($resultado["nome"]);
$usuario->setUsuario($resultado["usuario"]);
$usuario->setStatus($resultado["status"]);
$usuario->setPermissao($resultado["permissao"]);
$listaUsuario[] = $usuario;
}
return $listaUsuario;
} catch (PDOException $ex) {
if ($this->debug) {
echo "ERRO: {$ex->getMessage()} LINE: {$ex->getLine()}";
}
return null;
}
}use a função code do forum para colocar o código formatado como código pra ajudar na hora de ler. é só selecionar o código, clicar em <> e escolher a linguagem PHP e clicar em Inserir. isso ajuda demais na hora da gente ler. não sei como que tá a parte de conexão com o banco mas talvez vai ter que passar a variável dela como public antes do restante aí tipo se é
$con = new PDO...
botar assim
public function RetornarUsuarios(string $termo, int $tipo) {
public $con;
...>
12 minutos atrás, marsolim disse:
use a função code do forum para colocar o código formatado como código pra ajudar na hora de ler. é só selecionar o código, clicar em <> e escolher a linguagem PHP e clicar em Inserir. isso ajuda demais na hora da gente ler. não sei como que tá a parte de conexão com o banco mas talvez vai ter que passar a variável dela como public antes do restante aí tipo se é
Muito obrigado pela dica esse é o código do banco de dados.
>
12 minutos atrás, marsolim disse:
$con = new PDO...
botar assim
public function RetornarUsuarios(string $termo, int $tipo) {
public $con;
...Essa foi a ligação que fiz com o banco de dados:
public function getConnection() {
try {
if (self::$connection == null) {
self::$connection = new PDO("mysql:host={$this->server};dbname={$this->database};charset=utf8", $this->user, $this->password);
self::$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
self::$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
self::$connection->setAttribute(PDO::ATTR_PERSISTENT, true);
}
return self::$connection;
} catch (PDOException $ex) {
if ($this->debug) {
echo "<b>Error on getConnection(): </b>" . $ex->getMessage() . "<br/>";
}
die();
return null;
}
}Comentei uma partes do código e funcionou mas não consigo fazer as partes comentadas funcionarem.
Tem como vocês darem uma olhadinha e me dizerem o que estou fazendo de errado?
Banco:
class Banco {
private static $connection;
private $debug;
private $server;
private $user;
private $password;
private $database;
public function __construct() {
$this->debug = true;
$this->server = "localhost";
$this->user = "root";
$this->password = "";
$this->database = "brasilclassificados";
}
/**
* Create a database connection or return the connection already open using Singletion Design Patern
* @return PDOConnection|null
*/
public function getConnection() {
try {
if (self::$connection == null) {
self::$connection = new PDO("mysql:host={$this->server};dbname={$this->database};charset=utf8", $this->user, $this->password);
self::$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
self::$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
self::$connection->setAttribute(PDO::ATTR_PERSISTENT, true);
}
return self::$connection;
} catch (PDOException $ex) {
if ($this->debug) {
echo "<b>Error on getConnection(): </b>" . $ex->getMessage() . "<br/>";
}
die();
return null;
}
}
UsuarioDAO
public function RetornarUsuarios(/*string $termo, int $tipo*/) {
try {
$sql = "SELECT cod, nome, usuario, status, permissao FROM usuario";
// switch ($tipo) {
// case 1:
// $sql = "SELECT cod, nome, usuario, status, permissao FROM usuario WHERE nome LIKE :termo ORDER BY nome ASC";
// break;
// case 2:
// $sql = "SELECT cod, nome, usuario, status, permissao FROM usuario WHERE email LIKE :termo ORDER BY nome ASC";
// break;
// case 3:
// $sql = "SELECT cod, nome, usuario, status, permissao FROM usuario WHERE cpf LIKE :termo ORDER BY nome ASC";
// break;
// case 4:
// $sql = "SELECT cod, nome, usuario, status, permissao FROM usuario WHERE usuario LIKE :termo ORDER BY nome ASC";
// break;
// }
// $param = array(
// ":termo" => "%{$termo}%"
// );
$dataTable = $this->pdo->ExecuteQuery($sql/*, $param*/);
$listaUsuario = [];
UsuarioController
public function RetornarUsuarios(/string $termo, int $tipo/) {
/ if ($termo != "" && $tipo >= 1 && $tipo <= 4) {/
return $this->usuarioDAO->RetornarUsuarios($termo, $tipo); return null;
}*/
}
UsuarioView
$listaUsuariosBusca = $usuarioController->RetornarUsuarios(/*$termo, $tipo*/);UsuarioController
public function RetornarUsuarios(/string $termo, int $tipo/) {
/ if ($termo != "" && $tipo >= 1 && $tipo <= 4) {/
return $this->usuarioDAO->RetornarUsuarios($termo, $tipo); return null;
}*/
}por que não passa o tipo diretamente pra não precisar de switch e coisas que tais? aí pode usar só uma linha sql
$sql = "SELECT cod, nome, usuario, status, permissao FROM usuario WHERE '$tipo' LIKE :termo ORDER BY nome ASC";
ou pode botar os tipos numa array e usar o índice da array pra passar o tipo pra consulta
$arr_tipo = array('nome', 'email, 'cpf', 'usuario');
$ret_tipo = $arr_tipo[$tipo - 1];
$sql = "SELECT cod, nome, usuario, status, permissao FROM usuario WHERE '$ret_tipo' LIKE :termo ORDER BY nome ASC";
só aí já enxuga um pouco o códigoNotei que está utilizando o mesmo nome de função
public function RetornarUsuarios(string $termo, int $tipo)
para rotinas de código diferentes, não teria que ter nomes diferentes para cada rotina de função?Então quer dizer que isso pode está causando o erro? ok vou mudar
Já tem uns 20 anos que eu não programo absolutamente nada. Eu estudei programação de computadores foi na década de 80. Atualmente eu estou tentando aprender PHP, Java e Python. E tentando me lembrar do C e C++. Em 2015/2016 estudei o HTML5 com CSS3 e o Bootstrap.
>
2 minutos atrás, gedmilson disse:
Então quer dizer que isso pode está causando o erro? ok vou mudar
Eu já programei em PASCAL ná década de 80, lembrei que no PASCAL a rotina de lógica de função tem que ter nomes diferentes.
Faz mais ou menos esse tempo que ando apanhando no ramo da programação
>
3 minutos atrás, gedmilson disse:
Faz mais ou menos esse tempo que ando apanhando no ramo da programação
Quando eu consegui resolver um problema técnico com projeto de telecomunicação e projeto de CFTV, eu ganhei do meu ex-chefe uma promoção de cargo com aumento de salário (1996) e desde então eu não pensei mais em programação de computadores. Meu foco tem sido Servidor Windows e suporte técnico-administrativo para advogados, contadores, recursos humanos, etc.
Mas o pessoal do trabalho andou acabando com a minha paciência, aturei eles de 1992 até 2014, em 2014 pedi demissão.
Meu stress do ex-emprego foi todo embora. Agora estou com o meu cérebro bom para estudar programação de novo.
Eu achei parte da sintaxe da rotina de função que usou nesse seu código, muito semelhante a rotina de função do PASCAL.
Entendo..
Estou tentando criar um site que fiscalize o trabalho dos vereadores e faça o povo votar em seus projetos.
o voto de cada cidadão entraria como um abaixo assinado para depois ser votado pelos vereadores.
O problema é que não estou nem conseguindo inserir uma simples consulta no banco de dados.
Faz um teste trocando o nome da função, porque a função fica na memória na hora da execução do software,
e você está usando códigos diferentes para cada função. Isso pode estar criando um loop infinito em algo.
tentei mudar mas continua aparecendo a mesma mensagem de erro.
Catchable fatal error: Argument 1 passed to UsuarioController::RetornaUsuar() must be an instance of string, string given, called in C:\wamp\www\Site_Vereadores\Admin-bc\View\UsuarioView\UsuarioView.php on line 60 and defined in C:\wamp\www\Site_Vereadores\Controller\UsuarioController.php on line 23
Achei o seguinte com relação a esse erro = Catchable fatal error: Argument
Parece que esse erro é causado por falha de comunicação entre o servidor com o IIS (no caso do Windows)
https://forums.iis.net/t/1176451.aspx?PHP+5+3+5+won+t+connect+to+SQL2008
http://stackoverflow.com/questions/34880572/php-catchable-fatal-error-on-server
http://stackoverflow.com/questions/14535353/php-catchable-fatal-error
>
32 minutos atrás, gedmilson disse:
tentei mudar mas continua aparecendo a mesma mensagem de erro.
Catchable fatal error: Argument 1 passed to UsuarioController::RetornaUsuar() must be an instance of string, string given, called in C:\wamp\www\Site_Vereadores\Admin-bc\View\UsuarioView\UsuarioView.php on line 60 and defined in C:\wamp\www\Site_Vereadores\Controller\UsuarioController.php on line 23
Acho que eu já achei a causa do erro = C:\wamp\www\Site_Vereadores\Admin-bc\View\UsuarioView\UsuarioView.php
Está com o IIS instalado no seu computador?
Tem algum domínio de internet que seja seu? para você poder testar o código online?
cria uma pasta dentro do domínio de internet para uso com testes online.
Esse erro pelo que eu li e entendi ele é falha de comunicação com o servidor de rede.
A sua máquina utilizada é um servidor windows? servidor linux? ou máquina windows comum?
Em servidor Windows e máquina Windows comum tem que ter o IIS instalado.
Internet Information Services (IIS) 8.0 Express
https://www.microsoft.com/pt-br/download/details.aspx?id=34679
servidor windows
wampserver
Já baixei e instalei
>
2 minutos atrás, gedmilson disse:
servidor windows
wampserver
Olha qual é a versão do IIS que está instalado, se for uma versão velha do IIS, instala primeiro a versão nova do IIS, depois reinicia o servidor, e somente então é que desinstala a versão velha do IIS, e depois tem que reiniciar a máquina novamente.
onde vejo a intalação IIS
eu estalei a versão 8.0 mas não sei onde fica instalada
No item painel de controle, tem dentro dele o item de instalar/desinstalar programas, clica nele e aparece uma janela com a informação do que existe instalado dentro do computador (funciona igual tanto no windows de servidor de rede, como no windows de máquina de usuário comum). Lá tem como ver detalhado exatamente o que existe instalado na máquina.
IIS 8.0 Express
>
Agora, gedmilson disse:
IIS 8.0 Express
Se somente aparece o IIS 8 instalado, pode ser que não estivesse nenhum IIS instalado na máquina, ou essa versão IIS 8 retirou a versão velha do IIS automático durante a instalação dele.
Testa de novo se o erro acontece. Se o erro se repetir, o melhor é testar o código direto em um dominio de internet ativo.
Boa noite
Continua dando o mesmo erro. E se eu instalar uma nova versão do wamp será se pode resouvler?
a mensagem diz que tem que ser passada uma instância de uma string e está sendo passada uma string. tem que ver aí o que é essa string que tá sendo passada no lugar da instância.