PHP - código upload - Notice: Undefined index:

The Dealer

Power Member
Estou a criar um sistema de upload de ficheiros .txt usando o seguinte código:

Código:
<?php
include("Connections\connectDB.php");

$target = "D:\Projecto\PHP files\uploads";
$target = $target . basename( $_FILES['uploaded']['name']) ;
$ok=1;

//This is our size condition
if ($uploaded_size > 350000)
{
echo "Your file is too large.<br>";
$ok=0;
}

//This is our limit file type condition
if ($uploaded_type =="text/txt")
{
echo "No txt files<br>";
$ok=0;
}

//Here we check that $ok was not set to 0 by an error
if ($ok==0)
{
Echo "Sorry your file was not uploaded";
}

//If everything is ok we try to upload it
else
{
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded";
}
else
{
echo "Sorry, there was a problem uploading your file.";
}
}
?>
Mas dá-me o seguinte erro, quando no form faço submit:

Notice: Undefined index: uploaded in D:\Projecto\PHP files\upload.php on line 15

Notice: Undefined variable: uploaded_size in D:\Projecto\PHP files\upload.php on line 19

Notice: Undefined variable: uploaded_type in D:\Projecto\PHP files\upload.php on line 26

Notice: Undefined index: uploaded in D:\Projecto\PHP files\upload.php on line 41
Sorry, there was a problem uploading your file.
Qual será o problema...?
 
Última edição:
O primeiro e o quarto erro deve-se a que usas o Array Associativo $_FILES['uploaded'], que parece não existir. Os outros dois erros pela razão mencionada acima por K0mA.
Na parte do HTML certificate que dentro do teu <input type="file" /> tens o atributo name="uploaded". Pois o nome do array associativo pertencente à ele será igual ao valor que pões em name=""
De resto muda só o $uploaded_size e $uploaded_type para $_FILES['uploaded']['size'] e $_FILES['uploaded']['type'].
 
O primeiro e o quarto erro deve-se a que usas o Array Associativo $_FILES['uploaded'], que parece não existir. Os outros dois erros pela razão mencionada acima por K0mA.
Na parte do HTML certificate que dentro do teu <input type="file" /> tens o atributo name="uploaded". Pois o nome do array associativo pertencente à ele será igual ao valor que pões em name=""
De resto muda só o $uploaded_size e $uploaded_type para $_FILES['uploaded']['size'] e $_FILES['uploaded']['type'].

Já corrigi os ultimos 3 erros, mas apesar de ter o form aparentemente correcto:
Código:
<form enctype="multipart/form-data" action="upload.php" method="POST">
    Escolha um ficheiro:<input name="uploaded" type="file" /><br />
    <input type="submit" value="Upload" />
    </form>
Continuo a ter erro no uploaded de Undefined Index... No entanto o que é estranho, é que apesar de me anunciar esse erro, já consigo efectuar o upload...
 
Última edição:
vejo que num echo teu tens $_FILES['uploadedfile']['name'], não deveria ser só 'uploaded'?
faz bom uso da informação da linha onde te deu o erro, o php faz isso muito bem na minha opinião (entre outros). Mas de vez em quando há sempre uns erros que se passa por cima enão se nota. =)
 
vejo que num echo teu tens $_FILES['uploadedfile']['name'], não deveria ser só 'uploaded'?
faz bom uso da informação da linha onde te deu o erro, o php faz isso muito bem na minha opinião (entre outros). Mas de vez em quando há sempre uns erros que se passa por cima enão se nota. =)

De facto :)

Corrigi esse erro, e entretanto já tinha optado por colocar integrar o upload.php no SO.php (o form e código php estão portanto "no mesmo sitio". De qualquer das formas deixou de "dar erro" apenas quando faço o upload (depois de carregar no botão). Quando inicio a pagina continua a apresentar-me o seguinte:

Notice: Undefined index: uploaded in D:\Projecto\PHP files\SO.php on line 225

Notice: Undefined index: uploaded in D:\Projecto\PHP files\SO.php on line 226

Notice: Undefined index: uploaded in D:\Projecto\PHP files\SO.php on line 232

Notice: Undefined index: uploaded in D:\Projecto\PHP files\SO.php on line 258
Erro no upload do ficheiro.
EDIT: Com esta minha afirmação acabei de descobrir que se voltar ao sistema de usar o ficheiro upload.php, resolve-me todos os meus problemas, mas de qualquer forma agora depois de fazer submit (ao upload) vou para a pagina upload.php.

Como atribuir a uma imagem um simples back, mas sem ser para uma página especifica? Pode ser em HTML.
 
Última edição:
Na tua situação de juntares ambos os ficheiros o erro acontece porque ele está a parte do upload sempre que carregas a página. Tu podes juntar os dois ficheiros e metes todo aquele código de fazer upload dentro de um if (isset($_SESSION['uploaded'])) { }. O que o isset( ) faz é ver se essa variável existe, retornando true se existir, e consquentemente false caso não exista.
Dessa maneira ao carregares a página e não tiveres a fazer nenhum upload o código nem o tenta fazer.

Em relação ao back da imagem (suponho que seja o background). Se quiseres atribuir certas características de design por todas as imagens no teu site, independentemente da pagina em que estão, terás que usar CSS (Cascade StyleSheet).
Tens a opção de usar um ficheiro externo, ou seja, um ficheiro onde defines os teus estilos todos e depois a página vai invoca-la (quase como se fizesses include() ); ou então metes em cada tag <img /> o atributo style="background-color: #rrbbgg;".

Depois confirma-me se é mesmo isto que pretendes nas imagens.
 
Na tua situação de juntares ambos os ficheiros o erro acontece porque ele está a parte do upload sempre que carregas a página. Tu podes juntar os dois ficheiros e metes todo aquele código de fazer upload dentro de um if (isset($_SESSION['uploaded'])) { }. O que o isset( ) faz é ver se essa variável existe, retornando true se existir, e consquentemente false caso não exista.
Dessa maneira ao carregares a página e não tiveres a fazer nenhum upload o código nem o tenta fazer.

Em relação ao back da imagem (suponho que seja o background). Se quiseres atribuir certas características de design por todas as imagens no teu site, independentemente da pagina em que estão, terás que usar CSS (Cascade StyleSheet).
Tens a opção de usar um ficheiro externo, ou seja, um ficheiro onde defines os teus estilos todos e depois a página vai invoca-la (quase como se fizesses include() ); ou então metes em cada tag <img /> o atributo style="background-color: #rrbbgg;".

Não... O que eu quero dizer é carregar numa imagem e fazer um go back (para a página anterior), e de preferência que faça logo um refresh ao mm tempo nessa página para a qual se retrocedeu. Mas isto sem fazer um link para uma página especifica...

Depois confirma-me se é mesmo isto que pretendes nas imagens.

Não... o que pretendo é que quando carregar numa imagem (ou numa palavra, uma coisa qualquer, mas de preferencia numa imagem), ele faça um Go Back (retroceder) no browser. Mas isto sem usar um link definido para uma página especificamente...
 
Ah ok,
para isso metes na tag da imagem o atributo onclick="window.history.back();" da maneira que a tua tag fica do género:
<img src="caminho.png" onclick="window.history.back();" />
é JavaScript e faz com que o teu browser carrega a última página que carregou antes desta, que é exactamente o que o 'Retroceder' faz.
 
Back
Topo