Volledige versie bekijken : Geüploadde foto met Flash hernoemen mbv php



Trax
21 April 2010, 12:47
Hey,

ik upload een foto via Flash mbv php. Nu dat lukt goed, ik wil alleen dat die foto hernoemd wordt naar de naam van de persoon die men invult in het naam_txt veld.

Ik weet dat ik deze variabele moet verzenden naar het php bestand met loadvars , maar dan zit ik vast. Ik weet niet hoe ik dit moet combineren met het bestaande php upload script.

Ik ben een absolute leek op php gebied, dus neem me mijn gepruts en/of stomme vragen aub niet kwalijk.

Kan iemand mij helpen?

Dit is mijn AS:


import flash.net.FileReference;
info.html = true;//textveld html enabelen

scaleMode = noScale;


var bestandTypes:Array = new Array();

var imageTypes:Object = new Object();
imageTypes.description = "Images (*.jpg)";
imageTypes.extension = "*.jpg;";
bestandTypes.push(imageTypes);

//class aanspreken
var fileRef:FileReference = new FileReference();

//de blader knop
selecteerBestand.onRelease = function() {
fileRef.browse(bestandTypes);
};

//upload knop en upload progres balk onzichtbaar maken
uploadKnop._visible = false;
progresBalk.balk._visible = false;
progresBalk.balk._xscale = 0;


/////////////////////twijfel////////////////////
var send_varnaam:LoadVars = new LoadVars();
function sendNaam(){

send_varnaam.nieuwenaam = naam_txt.text;
send_varnaam.sendAndLoad("upload.php", "POST");
}
/////////////////////twijfel////////////////////


//een listener aanmaken waarmee we allerlei gegevens kunnen opvragen
var listener:Object = new Object();

listener.onSelect = function(file:FileReference) {
//bestand is te groot
if (file.size>3145728) {
//3145728 bytes is 3 MB
info.htmlText = "Maximale bestandsgrote 3 MB";
info.setStyle("color", "0xFF0000");
} else if (file.type.toLowerCase() != ".jpg") {
info.htmlText = "Alleen .jpg bestanden toegestaan";
} else {
uploadKnop._visible = true;
info.htmlText = "Bestandsnaam: "+file.name+"<br>";
info.htmlText += "Bestandsgrootte: "+file.size+"<br>";
//info.htmlText += "Extentie: "+file.type+"<br><br>";
info.htmlText += "<b>Klik op de upload knop om de upload te starten</b>";

uploadKnop.onRelease = function() {
//het gaat fout
if (!file.upload("upload.php")) {
info.htmlText = "Upload script niet gevonden";

}

//het gaat goed dus...
else {

/////////////////////twijfel////////////////////
sendNaam();
/////////////////////twijfel////////////////////

progresBalk.balk._visible = true;
//dadelijk laten we deze werken
}
};
}

};

//uploaden is bezig
listener.onProgress = function(file:FileReference, bytesLoaded, bytesTotal){
//procenten tonen hoeveel er al is ge upload
info.htmlText = "Bezig met uploaden...";
prc.htmlText = Math.round(bytesLoaded/bytesTotal*100);//+"% van "+file.size;
//balk in laadBalk laten groeien
progresBalk.balk._xscale = bytesLoaded/bytesTotal*100;
};

//klaar met uploaden
listener.onComplete = function(file:FileReference){
info.htmlText = file.name+" is succesvol geüpload.<br>U mag het formulier nu verzenden.";
prc.htmlText = "OK";
selecteerBestand.enabled = false;
//info.htmlText += "<a href='#pad_naar_bestand'><u>klik om te bekijken</u></a>"
progresBalk.balk._visible = false;
uploadKnop._visible = false;
}

//listener aan de ref hangen
fileRef.addListener(listener);
En dit mijn php:


<?php

if ($_FILES['Filedata']['name'])
{
$nieuweLocatie = 'uploads/'.$_FILES['Filedata']['name'];

move_uploaded_file($_FILES['Filedata']['tmp_name'], $nieuweLocatie);

chmod ('uploads/'.$_FILES['Filedata']['name'] , 0644);


if( !empty($_POST) ){

//?
//$sendNieuwenaam = $_POST['naam'];
//?

//?
move_uploaded_file($_FILES['naam'], $sendNieuwenaam))
//?
}

?>


Alvast erg bedankt!

ultddave
21 April 2010, 15:33
<?php

function file_extension($filename)
{
return end(explode(".", $filename));
}

if ($_FILES['Filedata']['name'])
{
$nieuweLocatie = 'uploads/'.$_FILES['Filedata']['name'];

move_uploaded_file($_FILES['Filedata']['tmp_name'], $nieuweLocatie);

chmod ('uploads/'.$_FILES['Filedata']['name'] , 0644);


if( isset($_POST['naam']) ){

$extension = file_extension($_FILES['Filedata']['name']); // Get extension
$sendNieuwenaam = $_POST['naam'];
if(rename("uploads/".$_FILES['Filedata']['name'].", "uploads/".$sendNieuwenaam."".$extension))
printf("Gelukt");
else
printf("Mislukt");

}

?>

Je kan dus gewoon de "rename" functie van PHP gebruiken. De functie werkt zo:

rename( oudpad, nieuwpad);
Je kan de rename functie dus ook gebruiken om bestanden te verplaatsen. ;)

Bovenstaand script gaat er vanuit dat $sendNieuwenaam geen bestandsextensie bevat.

Dus als naam.jpg wilt veranderen naar naam2.jpg, moet enkel "naam2" als parameter meegegeven worden. Het script kopieert zelf de bestandsextensie .jpg achter die naam2.

PS: Het haakje van:

if ($_FILES['Filedata']['name'])
{

Wordt nergens gesloten in de PHP code die je hebt geplaatst. Dus ik heb die in die van mij ook niet gesloten.

Mvg,
Dave

Trax
21 April 2010, 15:36
Hey geweldig bedankt ultddave,

hopelijk krijg je niet de indruk dat ik zelf niet gezocht heb, maar ik raakte er echt niet uit met die rename functie. Echt waar mega bedankt dat je er ook nog een beetje uitleg hebt bijgegeven, ik ga het zo proberen op te lossen. Hopelijk komt het goed, maar ik zou er niet van verschieten als ik hier nog eens moet terugkomen.

Nogmaals merci!

ultddave
21 April 2010, 15:39
Geen probleem hoor. :D Ja die functies zijn soms niet echt duidelijk. Op deze site staat meestal wel een redelijk goede uitleg + voorbeeld code:
http://php.net/manual/en/function.rename.php

PS: Ik heb net gezien dat ik het uitroepteken voor isset($_POST['naam']) was vergeten te verwijderen.

Het moet dus:
if( isset($_POST['naam'])) zijn. ;)

(Ik heb het ook al geediteerd in de code in mijn vorige post)

Succes. Als er iets niet moest lukken, dan vraag je het maar. ;)

Mvg,
Dave

ultddave
21 April 2010, 19:49
Wel even nog vermelden dat er misschien 1 probleem kan voorvallen met bovenstaand script. Als $_POST['naam'] niet wordt meegegeven (omdat die bijvoorbeeld leeg zou zijn of iets dergelijks.) Dan wordt de foto dus niet hernoemd (logisch). Maar het bestand is dan wel al geupload met de originele naam.



<?php

function file_extension($filename)
{
return end(explode(".", $filename));
}

if ($_FILES['Filedata']['name'])
{
$nieuweLocatie = "uploads/";

if( isset($_POST['naam']) ){

$extension = file_extension($_FILES['Filedata']['name']); // Get extension
$sendNieuwenaam = "".$_POST['naam']."".$extension;
$nieuweLocatie .= $sendNieuwenaam;

move_uploaded_file($_FILES['Filedata']['tmp_name'], $nieuweLocatie);

chmod ('uploads/'.$_FILES['Filedata']['name'] , 0644);
}

?>

In bovenstaande (geoptimaliseerde) code wordt de file enkel geupload als de nieuwe naam bestaat. Je kan eventueel nog specifieke dingen testen bij de naam. Bijvoorbeeld:
if( isset($_POST['naam']) && strlen($_POST['naam']) > 2 )

Om te kijken of de naam tenminste 3 karakters lang is.

Om te kijken of de upload gelukt is moet je een if test rond de move_uploaded_file functie plaatsen.

if(move_uploaded_file($_FILES['Filedata']['tmp_name'], $nieuweLocatie))
{
// Gelukt
}
else
{
// Mislukt
}

PS: De code tussen de PHP tags in deze post is dus iets efficienter dan de vorige omdat je dus direct upload met de juiste naam. Ipv eerst te uploaden met de originele naam en dan pas handmatig hernoemd.

Mvg,
Dave

Trax
21 April 2010, 22:27
Mijn actionscript is een beetje aangepast. Ik probeer een de naam variabele mee te sturen vanuit het tekstvak name_txt. Ik steek die in de variabele nieuweNaam die ik naar het php bestand stuur. Vanuit het php bestand probeer ik een true terug te sturen naar de flash als het gelukt is, maar dat weet ik niet zeker hoe dat moet. Php is ook aangepast.

Zoals het hier nu staat werkt het niet, zelfs het uploaden niet meer... :frown:




import flash.net.FileReference;
info.html = true;//textveld html enabelen

scaleMode = noScale;


var bestandTypes:Array = new Array();

var imageTypes:Object = new Object();
imageTypes.description = "Images (*.jpg)";
imageTypes.extension = "*.jpg;";
bestandTypes.push(imageTypes);

//class aanspreken
var fileRef:FileReference = new FileReference();

//de blader knop
selecteerBestand.onRelease = function() {
fileRef.browse(bestandTypes);
};

//upload knop en upload progres balk onzichtbaar maken
uploadKnop._visible = false;
progresBalk.balk._visible = false;
progresBalk.balk._xscale = 0;


/////////////////////twijfel////////////////////
var send_varnaam:LoadVars = new LoadVars();
function sendNaam(){

send_varnaam.nieuweNaam = name_txt.text;
send_varnaam.sendAndLoad("upload.php", receive_varnaam, "POST");
}

var receive_varnaam:LoadVars = new LoadVars();
//wanneer er een reactie is van het php bestand:
receive_varnaam.onLoad = function() {
//wanneer hij verzonden is:
if(Resultaat == true){
test_txt.text = "Rename gelukt"
}
else{
test_txt.text = "Alles kapot"

}
}
/////////////////////twijfel////////////////////


//een listener aanmaken waarmee we allerlei gegevens kunnen opvragen
var listener:Object = new Object();

listener.onSelect = function(file:FileReference) {
//bestand is te groot
if (file.size>3145728) {
//3145728 bytes is 3 MB
info.htmlText = "Maximale bestandsgrote 3 MB";
info.setStyle("color", "0xFF0000");
} else if (file.type.toLowerCase() != ".jpg") {
info.htmlText = "Alleen .jpg bestanden toegestaan";
} else {
uploadKnop._visible = true;
info.htmlText = "Bestandsnaam: "+file.name+"<br>";
info.htmlText += "Bestandsgrootte: "+file.size+"<br>";
//info.htmlText += "Extentie: "+file.type+"<br><br>";
info.htmlText += "<b>Klik op de upload knop om de upload te starten</b>";

uploadKnop.onRelease = function() {
//het gaat fout
if (!file.upload("upload.php")) {
info.htmlText = "Upload script niet gevonden";
/*Dit komt omdat je de swf niet online bekijkt
via een php enabled server.
Of anders bestaat upload.php gewoon echt niet.
*/
}

//het gaat goed dus...
else {

/////////////////////twijfel////////////////////
sendNaam();
/////////////////////twijfel////////////////////

progresBalk.balk._visible = true;
//dadelijk laten we deze werken
}
};
}

};

//uploaden is bezig
listener.onProgress = function(file:FileReference, bytesLoaded, bytesTotal){
//procenten tonen hoeveel er al is ge upload
info.htmlText = "Bezig met uploaden...";
prc.htmlText = Math.round(bytesLoaded/bytesTotal*100);//+"% van "+file.size;
//balk in laadBalk laten groeien
progresBalk.balk._xscale = bytesLoaded/bytesTotal*100;
};

//klaar met uploaden
listener.onComplete = function(file:FileReference){
info.htmlText = file.name+" is succesvol geüpload.<br>U mag het formulier nu verzenden.";
prc.htmlText = "OK";
selecteerBestand.enabled = false;
//info.htmlText += "<a href='#pad_naar_bestand'><u>klik om te bekijken</u></a>"
progresBalk.balk._visible = false;
uploadKnop._visible = false;
}

//listener aan de ref hangen
fileRef.addListener(listener);




<?php

function file_extension($filename)
{
return end(explode(".", $filename));
}

if ($_FILES['Filedata']['name'])
{
$nieuweLocatie = "uploads/";

if( isset($_POST['nieweNaam']) ){

$extension = file_extension($_FILES['Filedata']['name']); // Get extension
$sendNieuwenaam = "".$_POST['nieweNaam']."".$extension;
$nieuweLocatie .= $sendNieuwenaam;

move_uploaded_file($_FILES['Filedata']['tmp_name'], $nieuweLocatie);

chmod ('uploads/'.$_FILES['Filedata']['name'] , 0644);

$Resultaat = true; // upload gelukt?
echo '&Resultaat='.$Resultaat.'&'; // het antwoord op de vorige vraag terug naar flash sturen

}

?>

ultddave
21 April 2010, 22:32
Ik steek die in de variabele nieuweNaam die ik naar het php bestand stuur.

Waarschijnlijk komt het door deze 2 fouten;


if( isset($_POST['nieweNaam']) ){

$sendNieuwenaam = "".$_POST['nieweNaam']."".$extension;

De letter "u" in "nieuweNaam" vergeten te schrijven. ;)

PS: Ik zie net dat die chmod ook aangepast moet worden om de rechten van die nieuwe file aan te passen;

chmod ('uploads/'.$_FILES['Filedata']['name'] , 0644);
Moet:

chmod ($nieuweLocatie, 0644);

zijn. ;)

Mvg,
Dave

Trax
21 April 2010, 22:44
Nogmaals bedankt he Dave, maar het werkt nog niet. Ook nie na die twee stomme fouten eruit gehaald te hebben. Kan ik die variabele nieuweNaam niet in een nieuwe php variabele steken en terugsturen als controle naar flash? Die laatste twee regels die ik aan de php heb toegevoegd om iets terug te sturen zijn pure gokken en dus waarschijnlijk mega verkeerd. Uploaden werkt dus ook niet meer en ik weet echt niet waar ik moet beginnen zoeken...

ultddave
21 April 2010, 23:25
Deze werkt wel;



<?php

function file_extension($filename)
{
return end(explode(".", $filename));
}

if($_FILES['Filedata']['name'])
{
$nieuweLocatie = "uploads/";

if( isset($_POST['nieuweNaam']) ){

$extension = file_extension($_FILES['Filedata']['name']); // Get extension
$sendNieuwenaam = "".$_POST['nieuweNaam'].".".$extension;
$nieuweLocatie .= $sendNieuwenaam;


if(move_uploaded_file($_FILES['Filedata']['tmp_name'], $nieuweLocatie))
echo "Bestand ".$_FILES['Filedata']['name']." (nieuweNaam: ".$sendNieuwenaam.") is succesvol geupload!<br/>";
else
echo "Uploaden is mislukt.<br/>";


if(chmod($nieuweLocatie, 0644))
echo "Chmodden is gelukt.<br/>";
else
echo "Chmodden is mislukt.<br/>";


$Resultaat = true; // upload gelukt?

}
else
{
echo "nieuweNaam bestaat niet.<br/>";
}
}
else
{
echo "Bestand bestaat niet.<br/>";
}
?>
(Mmm, de indentering wordt niet zo goed weergegeven op het forum)

De code werkte inderdaad eerst niet. Had een dom foutje gemaakt.

Ik had;

$sendNieuwenaam = "".$_POST['nieweNaam']."".$extension;

Maar $extension bevat niet de punt van de extensie. Dus je kreeg dan bijvoorbeeld: nieuwenaampng ipv nieuwenaam.png

In de nieuwe code heb ik die punt er tussen gevoegd.


$sendNieuwenaam = "".$_POST['nieuweNaam'].".".$extension;


Uploaden werkt dus ook niet meer en ik weet echt niet waar ik moet beginnen zoeken...

Heel makkelijk hoor. Als je zoals in bovenstaande code, overal zorgt voor error handling door "gelukt" / "mislukt" berichten te plaatsen. Kan je snel zien wat er verkeerd loopt. Als je dan bijvoorbeeld leest "Bestand bestaat niet". Dan weet je dat de if($FILES['Filedata']['name']) test faalde, en moet je het probleem daar zoeken. En dergelijke. ;)

Data verzenden van PHP naar Flash weet ik niets van. Ik ken spijtig genoeg geen Flash. :(

Script kan je hier testen;
http://www.errorplanet.com/test.php

File kiezen + nieuwe naam ingeven. (Ik haal het script er wel binnekort af, om te voorkomen dat de server straks vol staat :D)

Mvg,
Dave

ultddave
21 April 2010, 23:57
In dit topic staan 2 interessante linken over PHP in Flash;
http://www.minatica.be/threads/68045-Afbeelding-laden-in-flash-mbv-php-variabele

Daar kan misschien de oplossing bij staan.

Succes :D.

Mvg,
Dave

Trax
22 April 2010, 11:40
Ik ga het even moeten laten rusten wegens andere prioriteiten, maar ik kom hier ongetwijfeld nog op terug. Alvast bedankt voor alle hulp!