Permalänk
Medlem

PHP skicka data

Jag har en sida som laddar upp en bild via ett formulär.

På samma sida har jag ett formulär som skickar info till en databas.

När jag väljer en bild att ladda upp kan jag se filens namn på sidan. Hur kan jag fånga detta och skicka till min databas?

Det är alltså helt enkelt filens namn jag vill skicka.

Försökte med detta och ett "hidden field":

<form action="inc/upload.php" method="post" enctype="multipart/form-data"> Välj fil att ladda upp: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Ladda upp bild" name="submit"> </form> <form action="inc/insert.php" method="post"> <input type="hidden" name="bookImage" value="fileToUpload"> Författare:<input type="text" name="bookAuthor" title="bookAuthor"> Titel:<input type="text" name="bookTitle" title="bookTitle"> Genre:<input type="text" name="bookGenre" title="bookGenre"> Pris:<input type="text" name="bookPrice" title="bookPrice"> Publ.Datum:<input type="text" name="bookDate" title="bookDate"> Beskr:<input type="text" name="bookDesc" title="bookDesc"> <input type="submit" value="Lägg till"> </form>

Visa signatur

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Hedersmedlem
Skrivet av Larsp777:

Jag har en sida som laddar upp en bild via ett formulär.

På samma sida har jag ett formulär som skickar info till en databas.

När jag väljer en bild att ladda upp kan jag se filens namn på sidan. Hur kan jag fånga detta och skicka till min databas?

Det är alltså helt enkelt filens namn jag vill skicka.

Försökte med detta och ett "hidden field":

<form action="inc/upload.php" method="post" enctype="multipart/form-data"> Välj fil att ladda upp: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Ladda upp bild" name="submit"> </form> <form action="inc/insert.php" method="post"> <input type="hidden" name="bookImage" value="fileToUpload"> Författare:<input type="text" name="bookAuthor" title="bookAuthor"> Titel:<input type="text" name="bookTitle" title="bookTitle"> Genre:<input type="text" name="bookGenre" title="bookGenre"> Pris:<input type="text" name="bookPrice" title="bookPrice"> Publ.Datum:<input type="text" name="bookDate" title="bookDate"> Beskr:<input type="text" name="bookDesc" title="bookDesc"> <input type="submit" value="Lägg till"> </form>

Om jag förstår rätt så vill du skicka "bookTitle" till en mysql server? eller någon annan form av databas?

Visa signatur

Kom in och häng med oss på Discord!

Permalänk
Medlem

Testa sätt ett id på den texten du ser efter du laddat upp bilden, sen kör du bara ett javascript.
Går säkert att göra smidigare

namn = document.getElementById('textefterjagladdatuppbilden');
documet.getElementById('bookimage').setAttribute('value', namn);

Visa signatur

asd

Permalänk
Medlem

använd $_POST['fileToUpload']!

nvm. Kanske förstod din fråga fel.

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Hedersmedlem

Om jag parsar frågan rätt så vill du titta på variabeln `$_FILES['fileToUpload']['name']` efter att formuläret skickats, där `fileToUpload` är taget från ditt formulär.

Se manualen för mer information.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Skrivet av bl0m1:

Om jag förstår rätt så vill du skicka "bookTitle" till en mysql server? eller någon annan form av databas?

Nja, den biten är redan klar. Det jag vill är fånga namnet på bilden som jag laddar upp och sedan skicka det till MySQL.

Det är alltså att få själva bildnamnet som jag har problem med, inte att skicka till databasen.

Citat:

Testa sätt ett id på den texten du ser efter du laddat upp bilden, sen kör du bara ett javascript.
Går säkert att göra smidigare

Hm, kanske kan testa.

Citat:

använd $_POST['fileToUpload']!

Kan nog vara en lösning...

Citat:

Om jag parsar frågan rätt så vill du titta på variabeln `$_FILES['fileToUpload']['name']` efter att formuläret skickats, där `fileToUpload` är taget från ditt formulär.

Precis, jag vill hämta värdet på variabeln (bildens namn) och skicka till databasen.

Visa signatur

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Hedersmedlem
Skrivet av Larsp777:

Precis, jag vill hämta värdet på variabeln (bildens namn) och skicka till databasen.

Svaret har du i manualen jag länkade. Du kan skapa en testsida likt:

<!doctype html> <meta charset="utf-8"> <title>Testa filuppladdning</title> <form enctype="multipart/form-data" method="post"> Skicka fil: <input name="userfile" type="file"> <button name="file-upload" type="submit">Ladda upp fil</button> </form> <?php if (isset($_POST['file-upload'])) { ?> <code>$_POST</code> har innehåll:<pre><?php var_dump($_POST); ?></pre> <code>$_FILES</code> har innehåll:<pre><?php var_dump($_FILES); ?></pre> Den uppladdade filen hade alltså filnamnet <strong><?=htmlspecialchars($_FILES['userfile']['name'])?></strong> <?php }

för att se hur det fungerar.

Gällande din originalfråga så undrar jag varför du har två separata formulär (`<form>`-omgivningar) där det ena sköter bilduppladdning och det andra sköter bokinformation — jag tror att du bara vill ha ett enda formulär. Som det är skrivet nu så kommer du inte skicka bokinformationen om du trycker på "Ladda upp bild", och om du trycker på "Lägg till" så kommer du inte skicka bilden.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

Tack! Har väl inte tänt så mycket på det här med två formulär men du har väl rätt i att det räcker med ett.

Visa signatur

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem

Jag har nu fält för att ladda upp info till databasen plus en uppladdningsknapp. När jag har laddat upp en bild så kommer jag ju till en ny sida. Vill vara kvar på den gamla sidan så när jag har vält bild så kan jag lägga in övriga uppgifter.

Försökte med:

header("Location: http://localhost:1234/data.php"); exit;

Men det verkar inte fungera.

Visa signatur

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Hedersmedlem
Skrivet av Larsp777:

Jag har nu fält för att ladda upp info till databasen plus en uppladdningsknapp. När jag har laddat upp en bild så kommer jag ju till en ny sida. Vill vara kvar på den gamla sidan så när jag har vält bild så kan jag lägga in övriga uppgifter.

Försökte med:

header("Location: http://localhost:1234/data.php"); exit;

Men det verkar inte fungera.

Det låter fortfarande som det är för att du har två separata formulär: ett där du laddar upp en bild (men ingen information) med en egen "Skicka"-knapp, och ett där du laddar upp information (men ingen bild) med en egen "Skicka"-knapp.

Om du slår samman dessa formulär så kan du skicka bild samtidigt som du skickar information: allt genom ett och samma formulär. Du väljer en bild precis som innan, fyller i informationen och sedan skickas allt detta när du trycker "Skicka". Du får då också se till att det målskript som formuläret skickas till sköter både fil- och informationssparning (dvs "slå ihop" funktionaliteten i `upload.php` och `update.php`). Varför lösningen ser ut som den gör för närvarande vet jag inte, men det verkar otympligt.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

PHP: Spara namn på uppladdad fil.

Jag har fått hjälp med detta men får det inte att fungera.

Fick detta som jag modifierat något:

<!doctype html> <meta charset="utf-8"> <title>Testa filuppladdning</title> <form enctype="multipart/form-data" method="post" action="inc/upload.php"> Skicka fil: <input name="fileToUpload" type="file"> <button name="file-upload" type="submit">Ladda upp fil</button> </form> <?php if (isset($_POST['fileToUpload'])) { ?> <code>$_POST</code> har innehåll:<pre><?php var_dump($_POST); ?></pre> <code>$_FILES</code> har innehåll:<pre><?php var_dump($_FILES); ?></pre> Den uppladdade filen hade alltså filnamnet <strong><?=htmlspecialchars($_FILES['userfile']['name'])?></strong> <?php }

Uppladdningsfilen (Från w3schools, något modifierad):

<?php $target_dir = "../uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); // Check if image file is a actual image or fake image if(isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if($check !== false) { echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; } } // Check if file already exists if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } // Check file size if ($_FILES["fileToUpload"]["size"] > 500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // Allow certain file formats if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; } if (!file_exists("uploads")) { if (mkdir("uploads")) { echo "Upload directory created!"; } else { die( "Invalid upload directory!" ); } } // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // if everything is ok, try to upload file } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } header("Location: http://localhost:1234/loadpicture/spara.php"); exit;

Det fungerar att ladda upp bilden men jag lyckas inte visa namnet på filen. Tror jag fick det att fungera tidigare.

När jag återvänder till sidan får jag inget filnamn och det står typ "ingen fil vald".

Jag vill alltså spara namnet på filen i en ny variabel som jag ska skicka till en databas.

Till phz: Ursäkta om jag startar nytt ämne men börjar bli lite desperat. Den tidigare tråden som jag skickade igår tog jag bort för jag kom på att det var fel på sökväg.

Visa signatur

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Hedersmedlem
Skrivet av Larsp777:

Till phz: Ursäkta om jag startar nytt ämne men börjar bli lite desperat. Den tidigare tråden som jag skickade igår tog jag bort för jag kom på att det var fel på sökväg.

Jag sammanfogar trådarna i stället, då det ändå handlar om mer eller mindre samma fråga.

Skrivet av Larsp777:

Det fungerar att ladda upp bilden men jag lyckas inte visa namnet på filen. Tror jag fick det att fungera tidigare.

När jag återvänder till sidan får jag inget filnamn och det står typ "ingen fil vald".

Den minimala testsidan jag gav var bara för att visa hur namnet på filen lagras i `$_POST`-data (fast kan kallas från specialvariabeln `$_FILES`). Då skickades formulärdatan tillbaka samma sida, vilket gjorde att `$_POST`- och `$_FILES`-variablerna populerades när sidan laddades om (tom `action` gör att sidan använder sig själv som formulärmål). Nu har du ändrat detta till att skicka formulärdata till en annan fil (`inc/upload.php`) vilket gör att denna data är tillgänglig när den filen körs, men när du sedan från denna fil omdirigerar anropet via `header()` så har du tappat `$_POST`-informationen, som inte följer med vid sådana omdirigeringar.

Du kan däremot hämta filnamnet direkt i din `inc/upload.php`-fil genom variabeln `$_FILES['fileToUpload']['name']`, vilket du ju också gör på raden

echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";

När du ger `header()`-kommandot så sticker du ju dock iväg från denna uppladdningssida, nu utan `$_POST`-data (dessutom har du på formulärsidan ändrat variabelnamn så att `$_FILES['userfile']` inte längre finns, men det spelar ingen roll här).

Ta bort `header()`-anropet för att se vad som händer på uppladdningssidan.

Vill du skicka med filnamnet tillbaka så kan man göra det genom antingen en `$_GET`- eller `$_POST`-parameter, men återigen så verkar det som att du bara vill slå ihop filuppladdningen med informationsinmatningen, så sköt uppladdningen och databasinsättningen i samma anropade fil (dvs inte genom att hoppa från den ena till den andra med `header()`-anrop), så behöver du inte bolla runt informationen mellan sidorna alls.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

Tack!

Jo, jag vet att du sa att det var bättre att skicka slå ihop formulären och det har jag också gjort men fick en del annat som inte fungerade.

Håller fortfarande på och lär mig så jag tackar för lektionen.

Att jag skickar data fram och tillbaka var bara en test.

Annars har jag tänkt skicka filnamn och övriga data på en och samma gång. Att man skickar med POST eller GET har jag fattat men kanske inte fullt ut.

Tack än en gång för att du har tålamod och tar dig tid att hjälpa mig.

Visa signatur

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Skärm:Samsung Odyssey G9 || Windows 10