Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas com mysql_fetch_array()


Isadora Córdova

Pergunta

Esse é o erro: "

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\CB_online\bastidorescadastrados.php on line 35"

e esse é o código: " <html>

<head>

<title>Bastidores</title>

</head>

<body BGCOLOR="#D9D9F3" link="black" vlink="black" alink="black">

<?php

$data = date("Y-m-d");

$hora = date("H:i:s");

$novadata = substr($data,8,2) . "/" . substr($data,5,2) . "/" . substr($data,0,4);

$novahora = substr($hora,0,2) . ":" . substr($hora,3,2);

echo "<hr><h1><center>Bastidores Cadastrados</center></h1><DIV ALIGN='RIGHT'>Hora: $novahora - Data: $novadata </DIV>";

echo "<hr><br>";

//"botões"

echo "<table align='right'><tr>";

echo "<td><form method='post' action='index.php'><input type='submit' name='voltar' value='Ir Para Página Inicial'</form>";

echo "<td><form method='post' action='cadastrobastidor.php'><input type='submit' name='cadastrobastidor' value='Cadastrar Novo Bastidor'</form>";

echo "<td><form method='post' action='controlebastidor.php'><input type='submit' name='controlebastidor' value='Ir Para Controle de Bastidor'</form>";

echo "</tr></table><br><br>";

echo "<hr>";

$conexao = mysql_connect("localhost","root","");

$db = mysql_select_db("cbonline");

$sql = "SELECT * FROM bastidor,posicao,local,funcao,cabo,equipamento,responsavel ORDER BY idbastidor ASC";

$resultado = mysql_query($sql);

$linha = mysql_fetch_array($resultado);

while ($linha) {

$idbastidor = $linha["idbastidor"];

$bastidor = $linha["bastidor"];

$area = $linha["area"];

$posicao = $linha["posicao"];

$cabo = $linha["cabo"];

$local = $linha["local"];

$equipamento = $linha["equipamento"];

$funcao = $linha["funcao"];

echo "Bastidor: <font size=5><b>$bastidor</b></font>";echo "<br>";

echo "Responsável: $area";echo "<BR>";

echo "Posicao: $posicao";echo "<BR>";

echo "Local: $local";echo "<BR>";

echo "Equipamento: $equipamento";echo "<BR>";

echo "Cabo: $cabo";echo "<BR>";

echo "Função: $funcao";echo "<BR>";

echo "<hr>";

}

echo "<hr>";

?>

</body>

</html> "

eu preciso muito que isso funcione... =S

Desde já agradeço, Isadora

Link para o comentário
Compartilhar em outros sites

23 respostass a esta questão

Posts Recomendados

  • 0

Desculpe, pensei que "bastidor,posicao,local,funcao,cabo,equipamento,responsavel" fossem campos de uma única tabela. Considerando que sejam todas tabelas, só tem sentido você realizar a busca no BD de variás tabelas ao mesmo tempo se houver uma correlação entre elas. Digamos que haja um id comum que correlaciona cada uma das tabelas, aí você deveria fazer a busca usando "join" (http://dev.mysql.com/doc/refman/4.1/pt/join.html) e a sintaxe vai depender do tipo de comparação e o tipo de resultados que deseja que saia. Do jeito que você está fazendo a busta os resultados serão totalmente desconexos.

O erro que teu código apresenta é aqui:

$linha = mysql_fetch_array($resultado);

while ($linha) {
Substitua o trecho acima por:
while ($linha = mysql_fetch_array($resultado)) {

Editado por svjets
Link para o comentário
Compartilhar em outros sites

  • 0

Tenho outro problema agora, eu fazendo o que o jefferson disse, ele lê os dados mas ele não está pegando o idbastidor, que seria o meu controle maior...

Ai quando faço a tabela(html) que integra todas as tabelas do DB ele faz uma confusão, unindo todos os dados de todas as tabelas de diferentes formas =S

Link para o comentário
Compartilhar em outros sites

  • 0

então, ta ai...

-- phpMyAdmin SQL Dump

-- version 3.2.0.1

-- http://www.phpmyadmin.net

--

-- Servidor: localhost

-- Tempo de Geração: Jan 12, 2011 as 07:12 PM

-- Versão do Servidor: 5.1.36

-- Versão do PHP: 5.3.0

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

--

-- Banco de Dados: `cbonline`

--

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

--

-- Estrutura da tabela `bastidor`

--

CREATE TABLE IF NOT EXISTS `bastidor` (

`idbastidor` int(11) NOT NULL AUTO_INCREMENT,

`bastidor` varchar(45) NOT NULL,

`idresponsavel` int(11) NOT NULL,

`idposicao` int(11) NOT NULL,

PRIMARY KEY (`idbastidor`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=46 ;

--

-- Extraindo dados da tabela `bastidor`

--

INSERT INTO `bastidor` (`idbastidor`, `bastidor`, `idresponsavel`, `idposicao`) VALUES

(44, 'l', 0, 0),

(45, '3', 0, 0);

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

--

-- Estrutura da tabela `cabo`

--

CREATE TABLE IF NOT EXISTS `cabo` (

`idcabo` int(11) NOT NULL AUTO_INCREMENT,

`cabo` varchar(45) DEFAULT NULL,

`idfuncao` int(11) NOT NULL,

`idbastidor1` int(11) NOT NULL,

`idbastidor2` int(11) NOT NULL,

PRIMARY KEY (`idcabo`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ;

--

-- Extraindo dados da tabela `cabo`

--

INSERT INTO `cabo` (`idcabo`, `cabo`, `idfuncao`, `idbastidor1`, `idbastidor2`) VALUES

(24, '2', 0, 0, 0),

(25, '3', 0, 0, 0);

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

--

-- Estrutura da tabela `equipamento`

--

CREATE TABLE IF NOT EXISTS `equipamento` (

`idequipamento` int(11) NOT NULL AUTO_INCREMENT,

`equipamento` varchar(45) DEFAULT NULL,

`idbastidor` int(11) NOT NULL,

PRIMARY KEY (`idequipamento`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

--

-- Extraindo dados da tabela `equipamento`

--

INSERT INTO `equipamento` (`idequipamento`, `equipamento`, `idbastidor`) VALUES

(13, '2', 0),

(14, '3', 0);

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

--

-- Estrutura da tabela `funcao`

--

CREATE TABLE IF NOT EXISTS `funcao` (

`idfuncao` int(11) NOT NULL AUTO_INCREMENT,

`funcao` varchar(45) DEFAULT NULL,

PRIMARY KEY (`idfuncao`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;

--

-- Extraindo dados da tabela `funcao`

--

INSERT INTO `funcao` (`idfuncao`, `funcao`) VALUES

(17, '2'),

(18, '3');

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

--

-- Estrutura da tabela `local`

--

CREATE TABLE IF NOT EXISTS `local` (

`idlocal` int(11) NOT NULL AUTO_INCREMENT,

`local` varchar(45) DEFAULT NULL,

PRIMARY KEY (`idlocal`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;

--

-- Extraindo dados da tabela `local`

--

INSERT INTO `local` (`idlocal`, `local`) VALUES

(15, '2'),

(16, '3');

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

--

-- Estrutura da tabela `posicao`

--

CREATE TABLE IF NOT EXISTS `posicao` (

`idposicao` int(11) NOT NULL AUTO_INCREMENT,

`posicao` varchar(45) DEFAULT NULL,

`idlocal` int(11) NOT NULL,

PRIMARY KEY (`idposicao`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;

--

-- Extraindo dados da tabela `posicao`

--

INSERT INTO `posicao` (`idposicao`, `posicao`, `idlocal`) VALUES

(18, '2', 0),

(19, '3', 0);

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

--

-- Estrutura da tabela `responsavel`

--

CREATE TABLE IF NOT EXISTS `responsavel` (

`idresponsavel` int(11) NOT NULL AUTO_INCREMENT,

`area` varchar(45) DEFAULT NULL,

PRIMARY KEY (`idresponsavel`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=25 ;

--

-- Extraindo dados da tabela `responsavel`

--

INSERT INTO `responsavel` (`idresponsavel`, `area`) VALUES

(23, '2'),

(24, '3');

Não fui eu quem fiz, foi o coordenador do meu estágio, como não sei muito não entendo exatamente, mas pra mim essas tabelas não estão interligadas =/

e o que está acontecendo é que o idbastidor está sempre igual a zero!

Link para o comentário
Compartilhar em outros sites

  • 0

Como ele não esta pegando? existe algum campo com o mesmo nome idbastidor?

Pelo que vi existe, não sei muito SQL mais pelo que você pode fazer?

porque você quer fazer uma consulta de todas tabelas do banco?

o erro poder esta ocorrendo quando você faz o while()

while($row = mysql_fetch_array($sql)){
$row["idbastidor"];

}
Existem outros idbastidor entendeu? tenta fazer assim: não sei se irá dar certo
$row["b.idbastidor"];

Editado por Jefferson Oliveira
Link para o comentário
Compartilhar em outros sites

  • 0

O que acontece é que deste jeito a pesquisa retorna as tabelas concatenadas mesmo e ainda duplica resultados. Se as tabelas que estão sendo lidas tiverem 2 linhas ele vai gerar uma saída com 2^(número de tabelas) seria como por exemplo usando 2 tabelas com 2 linhas de dados cada uma:

linha1.col1.tab1 linha1.col2.tab1 linha1.col1.tab2 linha1.col2.tab2

linha1.col1.tab1 linha1.col2.tab1 linha2.col1.tab2 linha2.col2.tab2

linha2.col1.tab1 linha2.col2.tab1 linha1.col1.tab2 linha1.col2.tab2

linha2.col1.tab1 linha2.col2.tab1 linha2.col1.tab2 linha2.col2.tab2

Vendo a estrutura do seu BD, há correlações diretas e indiretas entre as tabelas. A tabela "bastidor", por exemplo, se correlaciona diretamente com a tabela "posicao" através do campo "idposicao", e se correlaciona indiretamente com a tabela "local" pois as tabelas "bastidor" e "local" não em campos em comum, porém ambas têm campo em comum com a tabela "posicao". Então, para obter uma saída do jeito que você quer, terá que observar todas essas correlações na hora de fazer a busca, senão ocorrerá o problema de duplicações indesejadas. Para uma busca por essas 3 tabelas, por exemplo, para evitar as duplicações teria que fazer o seguinte:

$sql = "SELECT b.*,p.*,l.* FROM bastidor b,posicao p,local l WHERE b.idposicao=p.idposicao AND p.idlocal=l.idlocal ORDER BY b.idbastidor ASC";

Não tenho certeza pois nunca precisei usar busca em multiplas tabelas, no máximo em duas, mas é possível que a função JOIN do mysql (a qual coloquei o link da definição dela no manual) ajude a fazer isso mais facilmente, senão, você terá que ajustar todas as correlações a fim de ligar todas as tabelas usando a lógica do exemplo de "select" acima.

Editado por svjets
Link para o comentário
Compartilhar em outros sites

  • 0

Então svjets...

Eu preciso chamar todos os dados de todas as tabela, porque é um programa de controle de bastidor e cabeamento, e os dados de cada bastidor estão em diferentes tabelas...

Ficou complexo, mas acho que entendi a lógica do que você falou, vou tentar fazer assim, caso contrario vou ver se coloco tudo em uma única tabela...

=S

Obrigada pela ajuda pessoal, se eu tiver mais alguma dúvida eu posto aqui ;D

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que não vai dar certo (heheh) mas, tente isso:

$sql = "SELECT b.*,p.*,l.*, f.*, c.*, e.*, r.* FROM bastidor b,posicao p,local l, funcao f, cabo c, equipamento e, responsavel r WHERE b.idposicao=p.idposicao AND p.idlocal=l.idlocal AND c.idbastidor1=b.idbastidor AND f.idfuncao=c.idfuncao AND e.idbastidor=b.idbastidor AND r.idresponsavel=b.ideresponsavel ORDER BY b.idbastidor ASC";

Editado por svjets
Link para o comentário
Compartilhar em outros sites

  • 0

while ($linha = mysql_fetch_array($resultado)) {

Eu percebi agora um furo meu...

Mas não to conseguindo fazer do mesmo jeito...

Eu tenho que pegar o valor da idresponsavel, que só passa a existir depois de eu cadastrar o responsavel, e salvar esse id na variavel id responsavel da tabela bastidor...ai talvez eu consigo pegar os valores certos...

Não sei se vocês me entenderam!

Link para o comentário
Compartilhar em outros sites

  • 0

Tinha um errinho:

$sql = "SELECT b.*,p.*,l.*, f.*, c.*, e.*, r.* FROM bastidor b,posicao p,local l, funcao f, cabo c, equipamento e, responsavel r WHERE b.idposicao=p.idposicao AND p.idlocal=l.idlocal AND c.idbastidor1=b.idbastidor AND f.idfuncao=c.idfuncao AND e.idbastidor=b.idbastidor AND r.idresponsavel=b.ideresponsavel ORDER BY b.idbastidor ASC";

Corrigido:

$sql = "SELECT b.*,p.*,l.*, f.*, c.*, e.*, r.* FROM bastidor b,posicao p,local l, funcao f, cabo c, equipamento e, responsavel r WHERE b.idposicao=p.idposicao AND p.idlocal=l.idlocal AND c.idbastidor1=b.idbastidor AND f.idfuncao=c.idfuncao AND e.idbastidor=b.idbastidor AND r.idresponsavel=b.idresponsavel ORDER BY b.idbastidor ASC";

Isadora, essa função não é só pra pegar os cadastros já exisentes? Onde todos os campos já estão preenchidos e linkados? Se você tiver que fazer uma busca que alguns campos retornarão em branco por falta de preenchimento então sugiro que você crie uma nova tabela no BD com todos os campos se desejar fazer uma busca única senão, para gerar a lista terá que fazer uma busca para cada tabela independente e utilizar os "ids" de referência para fazer a busca em outra tabela, uma a uma. Não sei se fui claro.

Link para o comentário
Compartilhar em outros sites

  • 0

Qual função? A última que postei? Se for ela, não retorna nenhum valor porque não existe todas as correlações feitas pois vejamos, pela estrutura do teu banco que você postou, existem 2 linhas de dados por tabela. A tabela bastidor tem um idbastidor igual a 44 e outro igual a 45. Na função que escrevi teria que haver um idbastidor na tabela equipamento igual a um dos dois valores de idbastidor da tabela bastidor, por exemplo. Como o idbastidor tem valor 0 nas duas linhas de dados da tabela equipamento e valor de 44 e 45 na tabela bastidor nunca haverá igualdade entre eles, o que faz com que a busca retorne um conjunto vazio (0 linhas de dados).

Link para o comentário
Compartilhar em outros sites

  • 0

Oi amiga,

Olha fiz um script aqui vendo seu problema, não sei se te satifaz mas ta funcionando, só tem que da uma identada e arrumar a forma que a tabela é montada, mas ele traz todos os dados de todas as tabelas.

A lógica é o seguinte, ele faz um show tables no seu banco, e depois por tabela ele faz um show columns e por coluna ele da um select nos dados dessa coluna.

Da uma olhada e espero que ajude.

<?php
$nivel = "..";

include_once "$nivel/conexao.php";

$strsql = " SHOW TABLES ";

$rsTabelas = mysql_query($strsql,$conexao);

while($tabelas = mysql_fetch_assoc( $rsTabelas )){
    
    $strsql = " SHOW COLUMNS 
            FROM $tabelas[Tables_in_Bancol] ";
    
    $rsColunaTabela = mysql_query($strsql,$conexao);
    
    echo "<table border = 1>
        <tr>
          <td>$tabelas[Tables_in_Banco]</td>
        </tr>";
        
    echo " <tr>";
    while( $colunaTabela = mysql_fetch_assoc($rsColunaTabela) ){
        
        
        echo " <td>$colunaTabela[Field]</td>";
        
    }
    echo "</tr>";
    $strsql = " SHOW COLUMNS 
            FROM $tabelas[Tables_in_Banco] ";
    
    $rsColunaTabela2 = mysql_query($strsql,$conexao);
    echo "<tr>";
    while( $colunaTabela2 = mysql_fetch_assoc( $rsColunaTabela2) ){
        $strsql = "SELECT $colunaTabela2[Field] FROM $tabelas[Tables_in_Banco]";
            $rsRegistros=mysql_query($strsql, $conexao);
                echo "<td>";
                while( $registros = mysql_fetch_assoc( $rsRegistros ) ){
                    
                    echo $registros[$colunaTabela2[Field]]."<br>";
                    
                }
                echo "</td>";
    }
                
    echo "</tr>";
    echo "</table>";
    echo "<br><br>";
    
}

?>

Só não esquece de substituir "Banco" pelo nome do seu banco na clausua Tables_in_Banco(nome do seu banco).

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...