Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde galera, vou tentar explicar mais ou menos o que eu quero, e os erros que estão estão dando estão me deixando meio doido...
Bom, vou deixar bem claro que eu sou iniciante em php, e já procurei na listagem de erros do php.net
Bom seguinte, eu tenho varias pastas que o meu código percorre e a partir da pasta que ele está ele ve se existe arquivo que contenha o nome "relatorio","ficha", entre outros..
a partir disso ele percorre as abas do site, vo tentar exemplificar como fica a busca dos dados..
NOME DO PROJETO>>SUB-ITENS de CADA PROJETO(ficha,relatorio,publicacoes e etc)
Acho que fica melhor mostrando uns trechos do código, vou mostrar a você os trechos pertinentes para o entendimento do sistema e AONDE está o bendito erro:
parte importante do código:
$default_path = "C:\\xampp\\htdocs\\capgov\\SVNEXTERNO\\capgov\\";
$folder = scandir($default_path);
foreach($folder as $dir)
{
if( is_dir($default_path . $dir) ){
if(preg_match('/\./', $dir) == 0) { //retira os diretorios "." e ".."
$fd = fopen("C:\\xampp\\htdocs\\capgov\\SVNEXTERNO\\capgov\\$dir\\res.txt", "r");
$end = FALSE;
$i = 1;
while($end == FALSE)
{
$file = fgets($fd);
$temp_date = fgets($fd);
if($file == FALSE || $temp_date == FALSE)
{
$end = TRUE;
}
elseif( ($pos = strpos($file, '_cronograma')) != FALSE )
{
$object[$dir]['cronograma'] = "<iframe src=$file height=\"810px\" type=\"application/pdf\" width=\"100%\" id='variaTamanho' ></iframe>";
$color = dateDelay($temp_date, false);
$date[$dir]['cronograma'] = "<span class=\"$color icon buttonStatus\"></span><span>$temp_date</span>";
}
O erro está no ***
****if ( isset($object[$project][$tab]) )
{
if( ($object[$dir]['publicacao']) ) {
$listagem = $default_path.$dir;
$teste = dir($listagem);
while($arquivo = $teste -> read()){
echo "<a href= \"$listagem.$arquivo\" >\".$arquivo.\"</a> <br><br>";
}
}
else{
echo $object[$project][$tab] . "&" . $date[$project][$tab] . "&" . $link;
}
O que eu desejo fazer é que em todos os subitens do projeto existem somente UM arquivo, mas nessa parte de publicacoes existem mais de 1 arquivo, eu gostaria de LISTA-LOS e a pessoa escolheria qual gostaria de abrir clicando, mas estou emperrado digamos logo após eu conseguir lista, ele lista TODOS os arquivos, eu faria um filtro(não sei como ainda), para só exibir os arquivos que contenham "publicacao" no nome, mas o problema é que ele está listando em todas as abas a lista, e eu gostaria que ele listasse somente na sua aba, que é a de publicações...
Bom tentei ser o mais claro possivel, espero que você tenham conseguido entender, se não conseguirem eu explico mil vezes até eu me fazer claro o suficiente, desde já muito obrigado galera!
>
O erro "Undefined index" é semelhante ao erro "Undefined variable" (variável não definida), quando este erro ocorre, significa que você está chamando por um índice de array que não foi declarado anteriormente. Por exemplo, se eu usar:
$array = array();
echo $array['indice'];
O erro irá ocorrer. Para solucioná-lo, eu preciso declarar um valor para a chave/índice "indice" antes de chamar por ele.
$array = array();
$array['indice'] = "valor";
echo $array['indice'];
Neste erro também é informada qual o nome do índice que não foi declarado e o número da linha onde ele está. Para mais detalhes, poste a mensagem de erro completa.
Há outra coisa que você está fazendo erro. Não se deve usar caminhos absolutos pois se fizer assim seu sistema só funcionará no atual ambiente. Também não é necessário usar a barra invertida [inline]\[/inline]. Use a barra diagonal [inline]/[/inline] e o PHP irá achar o caminho tanto no Linux quanto no Windows.
Ao invés de:
C:\\xampp\\htdocs\\capgov\\SVNEXTERNO\\capgov\\$dir\\res.txt
Use apenas:
./capgov/SVNEXTERNO/capgov/$dir/res.txt
Isso se o seu arquivo estiver no diretório raiz, no mesmo nível da pasta /capgov/.
muito obrigado, eu estava esquecendo de definir os outros indices por estar tao preocupado em definir o indice $dir eu esqueci do outro, o data..
mas você tem alguma dica de como eu faço para percorrer a lista de arquivos da pasta e exibir somente na tela os com nome "publicacao", eu tentei aqui pegar o tamanho da pasta com sizeOf e ele ta printando 111, tá até aparecendo que 111 é o numero de caracteres e nao de arquivos..
Uma dica para deixar seu código mais legível:
Ao invés de ir aninhando instruções e laços, procure evitar ao máximo usar um if dentro de outro ou um laço dentro de outro.
Por exemplo, você fez:
if(is_dir($default_path . $dir) ){
if(preg_match('/\./', $dir) == 0) {
E foi aninhando mais coisas... isso deixa o código confuso e difícil de entender.
O código acima poderia ser reescrito assim:
// Pula para o próximo item se não for uma pasta
if (!is_dir($default_path . $dir)) {
continue;
}
// Pula para o próxmo item se for '.' ou '..'
if (in_array($dir, array(".", "..")) {
continue;
}
Outras coisas que é bom lembrar:
Quanto ao seu problema, eu gostaria que você explicasse melhor o que você está tentando fazer pois ainda não entendi muito bem...
>
Uma dica para deixar seu código mais legível:
Ao invés de ir aninhando instruções e laços, procure evitar ao máximo usar um if dentro de outro ou um laço dentro de outro.
Por exemplo, você fez:
if(is_dir($default_path . $dir) ){
if(preg_match('/\./', $dir) == 0) {
E foi aninhando mais coisas... isso deixa o código confuso e difícil de entender.
O código acima poderia ser reescrito assim:
// Pula para o próximo item se não for uma pasta
if (!is_dir($default_path . $dir)) {
continue;
}
// Pula para o próxmo item se for '.' ou '..'
if (in_array($dir, array(".", "..")) {
continue;
}
Outras coisas que é bom lembrar:
Quanto ao seu problema, eu gostaria que você explicasse melhor o que você está tentando fazer pois ainda não entendi muito bem...
Obrigado pelas dicas!Vou tentar implementá-las quando possível.
Olha ainda estou empacado no problema, o problema é o seguinte, todos os arquivos que o codigo procura no código quando ele acha ele os exibe com um **<object data=$file height=\"810px\" type=\"application/pdf\" width=\"1427px\" ></object>**
o $file pega o endereço completo de cada elemento, tudo depende em qual array ele vai estar... enfim o meu problema agora, é que na nova implementação que devo fazer eu preciso botar uma listagem antes e ao clicar em algum dos links da listagem ele passar esse paremetro para o <object data> abrir o pdf, e nisso eu já tentei fazer contador, já fiz um monte de besteira no código e até agora nada..
Segue um trecho do código:
elseif( ($pos = strpos($file, '_publicacao')) != FALSE )
{
$k=($k+1);
echo "<li href=\"$file\">Publicação $k</li><br><br>";
$object[$dir]['publicacao'] =$file; //tudo que está fora dessa array aqui aparece em TODAS as abas, e eu nao estou conseguindo pensar em uma maneira inteligente de fazer o que foi CLICADO aparecer..
$color = dateDelay($temp_date, true);
$date[$dir]['publicacao'] = "<span class=\"$color icon buttonStatus\"></span><span>$temp_date</span>";
}
Segue um exemplo do que era feito anteriormente quando não tinha LISTA nenhuma para selecionar, somente procurava os arquivos no diretorio e ao clicar na aba o arquivo abria em PDF.
elseif( ($pos = strpos($file, '_video_acesso_restrito')) != FALSE )
{
$object[$dir]['video'] = "<object data=$file height=\"480px\" type=\"application/mp4\" width=\"740px\" ></object>";
$color = dateDelay($temp_date, true);
$date[$dir]['video'] = "<span class=\"$color icon buttonStatus\"></span><span>$temp_date</span>";
}
Espero que tenha sido mais claro agora, estou tão perdido quanto você amigo, acho que só usando um javascript onClick para fazer esta tarefa :upset:
>
Obrigado pelas dicas!Vou tentar implementá-las quando possível.
Olha ainda estou empacado no problema, o problema é o seguinte, todos os arquivos que o codigo procura no código quando ele acha ele os exibe com um **<object data=$file height=\"810px\" type=\"application/pdf\" width=\"1427px\" ></object>**
o $file pega o endereço completo de cada elemento, tudo depende em qual array ele vai estar... enfim o meu problema agora, é que na nova implementação que devo fazer eu preciso botar uma listagem antes e ao clicar em algum dos links da listagem ele passar esse paremetro para o <object data> abrir o pdf, e nisso eu já tentei fazer contador, já fiz um monte de besteira no código e até agora nada..
Segue um trecho do código:
elseif( ($pos = strpos($file, '_publicacao')) != FALSE )
{
$k=($k+1);
echo "<li href=\"$file\" id="atualizaTela">Publicação $k</li><br><br>";
$object[$dir]['publicacao'] =$file; //tudo que está fora dessa array aqui aparece em TODAS as abas, e eu nao estou conseguindo pensar em uma maneira inteligente de fazer o que foi CLICADO aparecer..
$color = dateDelay($temp_date, true);
$date[$dir]['publicacao'] = "<span class=\"$color icon buttonStatus\"></span><span>$temp_date</span>";
}
Segue um exemplo do que era feito anteriormente quando não tinha LISTA nenhuma para selecionar, somente procurava os arquivos no diretorio e ao clicar na aba o arquivo abria em PDF.
elseif( ($pos = strpos($file, '_video_acesso_restrito')) != FALSE )
{
$object[$dir]['video'] = "<object data=$file height=\"480px\" type=\"application/mp4\" width=\"740px\" ></object>";
$color = dateDelay($temp_date, true);
$date[$dir]['video'] = "<span class=\"$color icon buttonStatus\"></span><span>$temp_date</span>";
}
Espero que tenha sido mais claro agora, estou tão perdido quanto você amigo, acho que só usando um javascript onClick para fazer esta tarefa :upset:
EDIT: na verdade acho que botando um codigo Jquery parecido com esse eu resolvo meus problemas:
$("#atualizaTela").click(function(){
$("#tab-content").empty();
$("#tab-content").html("<object data=**$file** height=\"810px\" type=\"application/pdf\" width=\"1427px\" ></object>");
});
ao clicar em algum dos botoes a id atualizaTela, chama o Jquery, mas estou tentando fazer isso e não está dando certo.. tentei botar echo em todas as linhas e botar dentro do php e nao foi, e defini <script> código</codigo> após fechamento do php e nao foi tb, estou desde 12h tentando resolver isso estou começando a entrar em parafuso, alguem pode me ajudar?
O erro "Undefined index" é semelhante ao erro "Undefined variable" (variável não definida), quando este erro ocorre, significa que você está chamando por um índice de array que não foi declarado anteriormente. Por exemplo, se eu usar:
O erro irá ocorrer. Para solucioná-lo, eu preciso declarar um valor para a chave/índice "indice" antes de chamar por ele.
Neste erro também é informada qual o nome do índice que não foi declarado e o número da linha onde ele está. Para mais detalhes, poste a mensagem de erro completa.
Há outra coisa que você está fazendo erro. Não se deve usar caminhos absolutos pois se fizer assim seu sistema só funcionará no atual ambiente. Também não é necessário usar a barra invertida [inline]\[/inline]. Use a barra diagonal [inline]/[/inline] e o PHP irá achar o caminho tanto no Linux quanto no Windows.
Ao invés de:
C:\\xampp\\htdocs\\capgov\\SVNEXTERNO\\capgov\\$dir\\res.txt
Use apenas:
./capgov/SVNEXTERNO/capgov/$dir/res.txt
Isso se o seu arquivo estiver no diretório raiz, no mesmo nível da pasta /capgov/.