Ir para conteúdo

POWERED BY:

Arquivado

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

Nuno Figueiredo

problemas em passar variaveis

Recommended Posts

Boa Tarde

 

gostaria que alguns dos gurus do php me podessem dar uma ajuda no proble que tenho em mãos.

estou a fazer um site em flex com chamadas ao php, implementei um sitema de login com ligação á BD para identificar os utilizadores que funciona perfeitamente depois de efectuado o login aparece uma titlewindow para se fazer upload de imagens.

quando o utilizador faz o login se a pasta dele não existir é criada uma pasta com o nome dele.

passo a mostrar o código.

login.php

<?php
session_start();
//ligar á Base de dados

$con = mysql_connect("localhost","user_bd","pass");
//seleciona a base de dados
mysql_select_db("nome_bd", $con) or print(mysql_error());


//apanha a informação passada do flex para as variáveis

$username = mysql_real_escape_string($_POST["username"]);
$password = mysql_real_escape_string($_POST["password"]);

//Query á base de dados para verificar se combinação é válida.

$sql = "SELECT * FROM `membros` WHERE username = '$username' AND password = '$password'";

$result = mysql_fetch_array(mysql_query($sql))or print(mysql_error());

if($result == 1){ 
$_SESSION['username'] = $username;
}
$dir = mkdir("users/$username/", 0777);
$_SESSION['directoria'] = $dir;
//começa o outputting para o  XML

$output = "<loginsuccess>";

//se a query retornar true, o output <loginsuccess>yes</loginsuccess> else output <loginsuccess>no</
loginsuccess>

if(!$result)

{

$output .= "no";		

}else{

$output .= "yes";	

}

$output .= "</loginsuccess>";

//output todo o XML

print ($output);

?>

como podem ver estou a utilizar a session para passar a variavel $username e $directoria (que é a pasta criada ao utilizador).

quando faço o upload das imagens uitlizo o upload.php

 

<?php require_once("login1.php"); ?>
<?php
 session_start();
$upload_dir = $_SESSION['directoria'];


$temp_name = $_FILES['Filedata']['tmp_name'];
$file_name = $_FILES['Filedata']['name']; 
$file_name = str_replace("\\","",$file_name);
$file_name = str_replace("'","",$file_name);
$file_path = $upload_dir.$file_name;

$result  =  move_uploaded_file($temp_name, $file_path);
?>

o problema é que o upload não me está a ser feito na directoria criada mas na directoria php que é onde tenho os scripts.

não sei se estou a fazer alguma coisa mal ( não sou grande perito em php, estou no php é 2 meses).

se me poderem ajudar agradecia imenso.

Abraços e Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo amigo, substitua a sua página login.php por esta, mais antes faça um backup:

CODE

<?php

session_start();

//ligar á Base de dados

 

$con = mysql_connect("localhost","user_bd","pass");

//seleciona a base de dados

mysql_select_db("nome_bd", $con) or print(mysql_error());

 

 

//apanha a informação passada do flex para as variáveis

 

$username = mysql_real_escape_string($_POST["username"]);

$password = mysql_real_escape_string($_POST["password"]);

 

//Query á base de dados para verificar se combinação é válida.

 

$sql = "SELECT * FROM `membros` WHERE username = '$username' AND password = '$password'";

 

$result = mysql_fetch_array(mysql_query($sql))or print(mysql_error());

 

if($result == 1){

$_SESSION['username'] = $username;

}

$dir = mkdir("users/$username/", 0777);

$diretorio="users/$username";

$_SESSION['directoria'] = $diretorio;

//começa o outputting para o XML

$output = "<loginsuccess>";

//se a query retornar true, o output <loginsuccess>yes</loginsuccess> else output <loginsuccess>no</

loginsuccess>

if(!$result)

{

$output .= "no";

}else{

$output .= "yes";

}

$output .= "</loginsuccess>";

//output todo o XML

print ($output);

?>

Veja no que da, abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boas Alaerte

 

Antes de mais Obrigado pela resposta.

 

depois de efectuar as alterações o resultado foi o seguinte

 

foi efectuado o upload do ficheiro, mas a directoria users/$username não foi criada

o ficheiro foi parar á pasta users. :blink:

será que as / no mkdir tem influencia?

estará a session a passar correctamente?

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim amigo, a pasta users já deverá estar criada por padrão...

 

vamos fazer o seguinte:

 

substitua novamente:

 

ele irá verificar ao início do login se a pasta users já existe, se não, ele irá criá-la.

e a seunda opção irá criar a pasta com o nome do usuário dentro do diretório users.

CODE

 

<?php

session_start();

//ligar á Base de dados

 

$con = mysql_connect("localhost","user_bd","pass");

//seleciona a base de dados

mysql_select_db("nome_bd", $con) or print(mysql_error());

 

 

//apanha a informação passada do flex para as variáveis

 

$username = mysql_real_escape_string($_POST["username"]);

$password = mysql_real_escape_string($_POST["password"]);

 

//Query á base de dados para verificar se combinação é válida.

 

$sql = "SELECT * FROM `membros` WHERE username = '$username' AND password = '$password'";

 

$result = mysql_fetch_array(mysql_query($sql))or print(mysql_error());

 

if($result == 1){

$_SESSION['username'] = $username;

}

(!file_exists('users')) ? (mkdir('users',0777)) : '';

$dir = mkdir("users/$username", 0777);

$diretorio="users/$username";

$_SESSION['directoria'] = $diretorio;

//começa o outputting para o XML

$output = "<loginsuccess>";

//se a query retornar true, o output <loginsuccess>yes</loginsuccess> else output <loginsuccess>no</

loginsuccess>

if(!$result)

{

$output .= "no";

}else{

$output .= "yes";

}

$output .= "</loginsuccess>";

//output todo o XML

print ($output);

?>

abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boas Alaerte

 

ontem já não dava tive de ir dormir ehehe

 

bom hoje já testei o codigo que deste, mas o flex não dá nada erro no httpservice.

Penso que seja na estrutura do php que está a gerar esse erro.

vou continuar a lutar aqui.

Resolvi fazer uma abordagem diferente

em vez de criar a pasta users no login.php

resolvi criar a pasta no upload.php.

login.php mantem-se igual excepto nesta paste

$result = mysql_fetch_array(mysql_query($sql))or print(mysql_error());

if($result == 1){ 
$username = $_SESSION['autentico'];
}
//mkdir("users/$username", 0777);


//começa o outputting para o  XML

$output = "<loginsuccess>";

aqui a alteração no upload.php

 

<?php
 session_start();

$_SESSION['autentico'] = $username;

mkdir("users/'$username'");
chmod("users/'$username'", 0777);

$upload_dir = "users/'$username'/";

$temp_name = $_FILES['Filedata']['tmp_name'];
$file_name = $_FILES['Filedata']['name']; 
$file_name = str_replace("\\","",$file_name);
$file_name = str_replace("'","",$file_name);
$file_path = $upload_dir.$file_name;

$result  =  move_uploaded_file($temp_name, $file_path);

?>
o resultado disto é que é criada uma subdirectoria mas em vez de ser o nome do usuário

é uma pasta com o nome '' e as imagens são colocadas dentro da pasta '', como desejado.

parece-me que ou a veriavel da session não está a ser passada correctamente ou estou a definir mal o mkdir.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, não precisa ser por session mano, você pode, no ato do login, se o usuário estiver correto, você pega o nome dele pelo $_POST do formulário e já cria a pasta, saca ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem amigo, fiz algumas modificações, substitua a parte do login por esta:

CODE

<?php

session_start();

//ligar á Base de dados

 

$con = mysql_connect("localhost","user_bd","pass");

//seleciona a base de dados

mysql_select_db("nome_bd", $con) or print(mysql_error());

 

 

//apanha a informação passada do flex para as variáveis

 

$usuario = mysql_real_escape_string($_POST['username']);

$password = mysql_real_escape_string($_POST['password']);

 

//Query á base de dados para verificar se combinação é válida.

 

$sql =mysql_query("SELECT * FROM `membros` WHERE username = '$usuario' AND password = '$password'")or die(mysql_error());

###################################

$verif=mysql_query("SELECT count(*) AS username FROM membros WHERE username='$usuario'")or die(mysql_error());

if(mysql_result($verif,0,'username')){

$_SESSION['pasta_usu']=$usuario;

$_SESSION['username'] = $usuario;

}else{

echo 'Usuário inexistente.';

unset($_SESSION['pasta_usu']);

unset($_SESSION['username']);

}

(!file_exists('users')) ? (mkdir('users',0777)) : '';

if(isset($_SESSION['pasta_usu'])){

$pasta=$_SESSION['pasta_usu'];

$dir=(!file_exists("users/$pasta/")) ? (mkdir("users/$pasta/",0777)) : '';

($dir) ? (print('Pasta com o nome'.$_SESSION['pasta_usu'].'Criada com sucesso.')) : print 'Erro ao criar a pasta.';

}else{

echo 'Não foi atribuido o nome da pasta.';

}

####################################

$output = "<loginsuccess>";

//se a query retornar true, o output <loginsuccess>yes</loginsuccess> else output <loginsuccess>no</

loginsuccess>

if(!$result)

{

$output .= "no";

}else{

$output .= "yes";

}

$output .= "</loginsuccess>";

//output todo o XML

print ($output);

?>

 

parte do upload:

CODE

<?php

session_start();

if(isset($_SESSION['username']) and isset($_SESSION['pasta_usu'])){

$pasta2=$_SESSION['pasta_usu'];

$upload_dir="users/$pasta2/";

$temp_name = $_FILES['Filedata']['tmp_name'];

$file_name = $_FILES['Filedata']['name'];

$file_name = str_replace("\\","",$file_name);

$file_name = str_replace("'","",$file_name);

$file_path = $upload_dir.$file_name;

$result = move_uploaded_file($temp_name, $file_path);

}else{

echo 'Sem sessões.';

}

?>

 

Testa ai e me diz o que dá, abração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Antes de mais obrigado pelas modificações.

 

Antes de por o script a correr verifiquei que não existe a variavel $result

logo não vai haver output.

mas vou por a correr para ver no que dá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente o flex não retornou nada, nem acesso nem erro de login.

penso que tenha parado algures no meio do login.php

o erro que dá no flex é um erro generalista dá erro de httpservice na url do login.php

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz, posta aqui pra mim o erro que aparece, pois ao meu ver, isso não é mais erro de upload não, e nem problema na criação das pastas, te passei algo bem simples ali pra demonstrar a lógica de como se faz, revisei aqui e ao meu ver está tudo OK.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem o erro foi meu, amigo, substitua o script de login novamente:

<?php
session_start();
//ligar á Base de dados

$con = mysql_connect("localhost","user_bd","pass");
//seleciona a base de dados
mysql_select_db("nome_bd", $con) or print(mysql_error());


//apanha a informação passada do flex para as variáveis

$usuario = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

//Query á base de dados para verificar se combinação é válida.

$sql =mysql_query("SELECT * FROM membros WHERE username = '$usuario' AND password = '$password'")or die(mysql_error());
###################################
$verif=mysql_query("SELECT count(*) AS username FROM membros WHERE username='$usuario'")or die(mysql_error());
if(mysql_result($verif,0,'username')){
$_SESSION['pasta_usu']=$usuario;
$_SESSION['username'] = $usuario;
}else{
echo 'Usuário inexistente.';
unset($_SESSION['pasta_usu']);
unset($_SESSION['username']);
}
(!file_exists('users')) ? (mkdir('users',0777)) : '';
if(isset($_SESSION['pasta_usu'])){
$pasta=$_SESSION['pasta_usu'];
$dir=(!file_exists("users/$pasta/")) ? (mkdir("users/$pasta/",0777)) : '';
($dir) ? (print('Pasta com o nome'.$_SESSION['pasta_usu'].'Criada com sucesso.')) : print 'Erro ao criar a pasta.';
}else{
echo 'Não foi atribuido o nome da pasta.';
}
####################################
$output = "<loginsuccess>";
//se a query retornar true, o output <loginsuccess>yes</loginsuccess> else output <loginsuccess>no</
loginsuccess>
if(!$result)
{
$output .= "no";
}else{
$output .= "yes";
}
$output .= "</loginsuccess>";
//output todo o XML
print ($output);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

criei um pequeno html

 

<body>

<form id="form1" name="form1" method="post" action="login2.php">

<label>nome

<input type="text" name="username" id="username" />

</label>

<p>

 

<label>pass

<input type="text" name="password" id="password" />

</label>

</p>

<p>

<label>

<input type="submit" name="send" id="send" value="Submit" />

</label>

</p>

 

</form>

</body>

 

para ver se as pastas seriam criadas, mas não deu nada tb

 

Abraço

 

e mais uma vez obrigado pela paciencia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara isso é muuito estranho eim... nem aparece erro nenhum ? mais o login é efetuado, e você se loga no sistema ? só não cria as pastas ?

 

Aguarde aqui, vou criar uma tabela e vou fazer esse script funcionar aqui.

 

Abraço.

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.