Ir para conteúdo

POWERED BY:

Arquivado

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

mrbomber

[Resolvido] Erro com in_array

Recommended Posts

Galera montei um sistema de permissao de usuarios multinivel dinamico, usando como base o phpsecurepages - na verdade so paroveitei uma tabela e o form dele...

 

localmente usando o xampp funciona q é uma maravilha...

mandei pra o servidor e da o erro;

 

Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/camaravc/public_html/x/estrutura/users/alterar_form.php on line 72

 

meu alterar_form.php;

 

<?
$id = $_GET[id];

$sql = mysql_query("SELECT * FROM phpsp_users where primary_key='$id'");
$dados=mysql_fetch_array($sql);
?>
<form action="?pg=../estrutura/users/alterar_db.php" method="post">
<input type=hidden name="id" value="<? echo $id; ?>"> 

<h3>Alteração  de Usuário</h3>

<table width="440" border="0" align="center" cellpadding="2" cellspacing="0"> 
<tr><td colspan="2" align="right" style="border-bottom:1px solid #cccccc">*Campos Obrigatórios</td>
</tr>
		<tr> 
		  <td width="140" align="right" valign="middle" style="border-bottom:1px solid #cccccc"><strong>*Nome:</strong></td>
		  <td width="320" valign="middle" style="border-bottom:1px solid #cccccc"> 
			<strong>
			<input name='nome' type='text' id="nome" value="<? echo $dados[nome]?>" size=45>
		  </strong></td>
		</tr>
	
		<tr> 
		  <td width="140" align="right" valign="middle" style="border-bottom:1px solid #cccccc">*Login:</td>
		  <td width="320" valign="middle" style="border-bottom:1px solid #cccccc"> 
			<? if($usernivel == "1" OR $usernivel == "2") {?>
			<input name='bu' type='text' value="<? echo $dados[user]?>" disabled size=45>
			<input name='user_login' type="hidden" value="<? echo $dados[user]?>" size=45>
			<? } else {?>
			<input name='user_login' type='text' value="<? echo $dados[user]?>" size=45>
			<? }?>
</td>
		</tr>
	<tr> 
	  <td width="140" align="right" valign="middle" style="border-bottom:1px solid #cccccc">*Senha:</td>
		  <td width="320" valign="middle" style="border-bottom:1px solid #cccccc"> 
			<strong>
			<input name='user_senha' type='password' id="user_senha" value="<? echo "$dados[password]";?>" size=45>
	  </strong></td>
	</tr>
<? if($usernivel == "1") {?>
	<tr>
	  <td align="right" valign="middle" style="border-bottom:1px solid #cccccc">*Nivel:</td>
	  <td valign="middle" style="border-bottom:1px solid #cccccc">
	  <input name='usuario_nivel' type='radio' value='1' <? if($dados[userlevel] == "1") { echo "checked";}?>> Usuário Master</td>
	</tr>
	<tr>
	  <td align="right" valign="middle" style="border-bottom:1px solid #cccccc">Permissão:</td>
	  <td valign="middle" style="border-bottom:1px solid #cccccc">
	  
	  
	  <? /* o parâmetro $string, é o WHERE `idRepresentante` = 2, por exemplo, ai o método só retorna todos os check, e marca apenas os que forem relacionados ao representante de id 2. Se você não passar nada, o método preenche a lista de checks, toda desmarcada. */
$listagem = "SELECT * FROM menu order by id";
$query = mysql_query($listagem);

		$sqlxx = ("SELECT id_menu FROM permissao WHERE primary_key = $primary_key "); // o 1 aqui, você troca pelo id do usuário corrente
			
		$consulta2 = mysql_query($sqlxx);
					
		if(mysql_num_rows($consulta2)!=0) // só realiza o fech, se existir resposta, para não retornar erro, caso não tenha NENHUM favorito
		{
			while($dadosRel = mysql_fetch_assoc($consulta2))
			{
				$vetorFav[] = $dadosRel['id_menu']; // aqui eu guardo tudo oque tá no banco, relacionado à tal usuário no $vetorFav
			}
		}
			
	while ($linha=mysql_fetch_array($query)){
	$id = $linha["id"];
	$projeto = $linha["nome"];
	
  if( in_array( $linha['id'], $vetorFav ) ) //confere se existe o id_empre atual do loop, dentro de $vetorFav

			$checked = 'checked="checked" '; // se tiver, é pq precisa mostrar marcado
		else
			$checked = ''; // caso contrário, não precisa por nada.. e imprime um "VAZIO" no input
			
	echo	 '<input type="checkbox" value="'.$id.'" name="vereador[]" '.$checked.'/>'.$projeto.'<br />';
	}//fecha while
	?>
	  
	  
	  </td>
	</tr>
	<? } else {?>
	  <input name='usuario_nivel' type='hidden' value='3'><br>
	<? }?>
</table>
	
	  <table align="center">
		<tr> 
		  <td width="436" colspan="2"> <p align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"> 
			  <input type='submit' value='Alterar'>
			  </font></p></td>
		</tr>
  </table>
  
  <? if($usernivel == "1"){ echo "<input name='nivel2' type='hidden' value='$dados[userlevel]'>";}?>
  
</form>

o que pode esta acontecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A consulta está retornado algo ??

while($dadosRel = mysql_fetch_assoc($consulta2))
			{
				echo $dadosRel['id_menu'], '<br />'; 
				$vetorFav[] = $dadosRel['id_menu']; // aqui eu guardo tudo oque tá no banco, relacionado à tal usuário no $vetorFav
			}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, tenta fazer o seguinte... Antes da função in_array, dá um print_r pra ver se ficou um array mesmo.

echo '<pre>';
print_r($vetorFav);
echo '</pre>';
if( in_array( $linha['id'], $vetorFav ) )

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim retorna e retorna com o erro

 

essa classe foi ate tu que me passou aqui uma vez.. achoq foi William....

 

so q assim... so retorna desmarcado e com o erro

 

Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/camaravc/public_html/x/estrutura/users/alterar_form.php on line 72
Cpanel

Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/camaravc/public_html/x/estrutura/users/alterar_form.php on line 72
Newsletter

Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/camaravc/public_html/x/estrutura/users/alterar_form.php on line 72
Conteúdo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uia :lol:

bacana.. eu tava reconhecendo o código.. e principalmente aquele comentário ali no começo dele.. hehe

 

Faz oque o @Carlos disse, mas posta tb a estrutura dessas tabelas, pq só vai falhar o in_array, se o laço não funcionar, e pra isso a query que deve estar com problemas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

local funciona q é uma maravilha... mas no servidor....

 

olha so o q acontece local, matias_rezende:

 

: Array
(
	[0] => 4
	[1] => 5
	[2] => 10
	[3] => 20
	[4] => 25
	[5] => 30
	[6] => 35
	[7] => 50
	[8] => 60
	[9] => 70
	[10] => 80
	[11] => 81
	[12] => 82
	[13] => 84
	[14] => 85
	[15] => 86
	[16] => 87
	[17] => 88
	[18] => 98
	[19] => 99
	[20] => 100
	[21] => 191
)

Newsletter

Array
(
	[0] => 4
	[1] => 5
	[2] => 10
	[3] => 20
	[4] => 25
	[5] => 30
	[6] => 35
	[7] => 50
	[8] => 60
	[9] => 70
	[10] => 80
	[11] => 81
	[12] => 82
	[13] => 84
	[14] => 85
	[15] => 86
	[16] => 87
	[17] => 88
	[18] => 98
	[19] => 99
	[20] => 100
	[21] => 191
)

Conteúdo

no servidor buga... so aparece o erro...

 

minhas tables:

--
-- Estrutura da tabela `menu`
--

CREATE TABLE IF NOT EXISTS `menu` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `nome` varchar(20) NOT NULL DEFAULT '',
  `url` varchar(255) NOT NULL DEFAULT '',
  `subcat` char(3) NOT NULL DEFAULT 'sim',
  `target` varchar(15) NOT NULL DEFAULT '_top',
  `nivel` char(2) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=194;

-- --------------------------------------------------------

--
-- Estrutura da tabela `permissao`
--

CREATE TABLE IF NOT EXISTS `permissao` (
  `primary_key` int(255) NOT NULL,
  `id_menu` int(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

seria algumaconfiguracao no php.ini do servidor web?

 

mas o mais estranho, q como eu ja havia pego aqui William, e havia usado em outro modulo do sistema funciona legal... so q fui implementar ai e nao funcionou....

Compartilhar este post


Link para o post
Compartilhar em outros sites

A conexão com o banco de dados está certa ? troque isso:

$consulta2 = mysql_query($sqlxx);
por:
$consulta2 = mysql_query($sqlxx)or die( mysql_error() );

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim a consulta ta certa

nao da erro na consulta... olha so os prints:

 

LOCAL:

 

Imagem Postada

 

 

 

online:

 

Imagem Postada

 

 

os mesmos arquivos q estao local estao online....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pergunta idiota a minha, mas... existem dados na base de dados do servidor???

 

Provavelmente é isto, já que só cria o array $vetorFav se a qtde de linhas for diferente de zero... Senão tiver resultado, pula isto, não cria o array e aí o parâmetro fica errado na função in_array.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim... tem dados e pra tirar a prova, ja deletei e refiz as tabelas....

 

as tabelas phpsp_users e permissao tem dados e os primary_key batem certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, vamos tentar algumas coisas... Pra ver se está entrando no IF e no while...

if(mysql_num_rows($consulta2)!=0) // só realiza o fech, se existir resposta, para não retornar erro, caso não tenha NENHUM favorito
		{
			echo 'AQUI 1';
			$x = 2;
			while($dadosRel = mysql_fetch_assoc($consulta2))
			{
				echo '<br/>AQUI'.$x.'<br/>'.$dadosRel['id_menu'];
				$vetorFav[] = $dadosRel['id_menu']; // aqui eu guardo tudo oque tá no banco, relacionado à tal usuário no $vetorFav
				$x++;
			}
		}

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troca:

while ($linha=mysql_fetch_array($query)){
	$id = $linha["id"];
	$projeto = $linha["nome"];
	
  if( in_array( $linha['id'], $vetorFav ) ) //confere se existe o id_empre atual do loop, dentro de $vetorFav

			$checked = 'checked="checked" '; // se tiver, é pq precisa mostrar marcado
		else
			$checked = ''; // caso contrário, não precisa por nada.. e imprime um "VAZIO" no input
			
	echo	 '<input type="checkbox" value="'.$id.'" name="vereador[]" '.$checked.'/>'.$projeto.'<br />';
	}//fecha while
por:

while ($linha=mysql_fetch_array($query))
		{			
			if( mysql_num_rows($consulta2)!=0 )
			{
				if( in_array( $linha['id'], $vetorFav ) ) //confere se existe o id_empre atual do loop, dentro de $vetorFav
					$checked = 'checked="checked" '; // se tiver, é pq precisa mostrar marcado
				else
					$checked = ''; // caso contrário, não precisa por nada.. e imprime um "VAZIO" no input
			}
			echo '<input type="checkbox" value="'.$linha['id'].'" name="vereador[]" '.$checked.'/>'.$linha['nome'].'<br />';
		}//fecha while
Eu tava desenvolvendo esse método qndo postei pra ti então..

resolvi o problema depois de você ter pego..

 

VÊ ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

local:

 

AQUI 1
AQUI2
4
AQUI3
5
AQUI4
10
AQUI5
20
AQUI6
25
AQUI7
30
AQUI8
35
AQUI9
50
AQUI10
60
AQUI11
70
AQUI12
80
AQUI13
81
AQUI14
82
AQUI15
84
AQUI16
85
AQUI17
86
AQUI18
87
AQUI19
88
AQUI20
98
AQUI21
99
AQUI22
100
AQUI23

online so o erro......

 

ah sim... cadastra certinho... so na hor ade mostrar q ta bugando....

e o checked local tb nao funfa... mesmo nao estando relacionando ele marca tudo

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso William... o erro.... pimba!

 

resolveu

 

 

so o checked q nao ta funcionando... ta cadastrando certim... mas nao mostra o checked

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá, não 'resolvemos' o erro.. apenas ocultamos ele.

porque então significa que não está passando do if.. por isso parou de dar o erro... e isso é ruim.. pois se tem dados, deveria entrar nele.

 

Vamos ver parte por parte:

$listagem = "SELECT * FROM `menu` ";

E

$sqlxx = "SELECT id_menu FROM `permissao` WHERE `primary_key` = {$primary_key} ";
echo $sqlxx;
			
		$consulta2 = mysql_query($sqlxx) or die(mysql_error());
diga oque retorna.

Se não funcionar, aparentemente não tem nada relacionado mesmo no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hummmm e o + estranho:

 

local printa checked em tds os chekboxes... (sendo q so era pra printar alguns)

 

ja online..... nao printa nenhum... (tambem no mesmo raciocio, de acordo com o banco de dados era pra printar alguns)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Roda isso aqui no banco:

SELECT * FROM `menu` JOIN `permissao` ON menu.id = permissao.id_menu

se retornar conjunto vazio, é pq realmente não tem nada relacionado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E com:

SELECT * FROM `menu` JOIN `permissao` ON menu.id = permissao.id_menu WHERE `primary_key` = 15

?

Não tô vendo erros no código... =X

 

Deve ser pq ele é meu... espera mais alguém ai..

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.