Sommige afbeeldingen worden niet geüpload

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rick Okkersen

Rick Okkersen

14/07/2020 16:00:54
Quote Anchor link
Hallo allemaal,

Ik heb een simpel php script geschreven dat afbeeldingen upload naar de server, er een naam aan geeft, opslaat in een SQL database etc.

Dit heb ik al vaker gedaan, en er waren eigenlijk geen problemen. Het script werkte prima.

Na ongeveer 23 afbeeldingen succesvol geüpload te hebben ging het mis. Het PHP bestand werd niet meer geladen (de browser bleef laden....) Uiteindelijk verscheen er een wit scherm, geen errors of niks... Als ik het formulier verstuur, en alleen een var_dump($_POST) doe, geeft dit ook een langdurige laadtijd en uiteindelijk een witte pagina. Als ik het formulier verstuur zonder een bestand toe te voegen, is alles in orde.

- Er was nog ruimte op de server, want de eerder geüploade bestanden deden het nu ook weer.
- Omdat ik dit formulier alleen zelf gebruik, checkt PHP niet of het bestand te groot is. De upload_max_filesize is 32M (de afbeeldingen zijn allemaal ongeveer 1,5MB)
- Ik heb uiteraard niks veranderd aan het script.

Kan iemand mij helpen?

HTML FORM:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<form class="form-signin" method="post" action="includes/form/fotos.php" enctype="multipart/form-data">

    <h1 class="h3 mb-3 font-weight-normal">Voeg foto's toe</h1>
    <input type="hidden" name="id" value="<?php echo generateRandomString(); ?>">
    <input type="file" name="fileToUpload" id="fileToUpload"><br>
    <br>
    <p>Past bij vraag:</p>
    <select class="form-control" name="vraag">
      <option>--</option>
      <option>1</option>
      <option>2</option>
      <option>3</option>
      <option>4</option>
      <option>5</option>
      <option>6</option>
    </select>
    <br>
    <input type="checkbox" name="containingperson[]" value="Frans">
    <label>Frans</label><br>
    <input type="checkbox" name="containingperson[]" value="Mia">
    <label>Mia</label><br>
    <input type="checkbox" name="containingperson[]" value="Wanda">
    <label>Wanda</label><br>
    <input type="checkbox" name="containingperson[]" value="Cecile">
    <label>Cecile</label><br>
    <input type="checkbox" name="containingperson[]" value="Anderen">
    <label>Anderen</label><br>
    <select class="form-control" id="gelegenheid" name="gelegenheid">
      <option>--</option>
      <?php foreach($gelegenheden as $value) {?>
        <option><?php echo $value; ?></option>
      <?php } ?>
      <option>Anders</option>
    </select><br>
    <input style="display: none" id="anders_gelegenheid" class="form-control" type="text" name="anders_gelegenheid" placeholder="Gelegenheid (anders)">
    <br>
    <button class="btn btn-lg btn-primary btn-block" name="submit" type="submit">Opslaan</button>
  </form>


PHP:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php

include "../dbconn.php";

$target_dir = "../uploads/fotos/";
$imageFileType = strtolower(pathinfo($_FILES["fileToUpload"]["name"],PATHINFO_EXTENSION));
$target_file = $target_dir . $_POST['id'] . "." . $imageFileType;

//Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    $vraag = $_POST['vraag'];
    $personen = json_encode($_POST['containingperson']);
    $gelegenheid = htmlspecialchars(stripslashes($_POST['gelegenheid']));
    if ($gelegenheid == "Anders") {
      $gelegenheid = htmlspecialchars(stripslashes($_POST['anders_gelegenheid']));
    }

    $foto = $_POST['id'] . "." . $imageFileType;
    $sql = "INSERT INTO vriendenboek_fotos (`vraag`, `personen`, `gelegenheid`, `foto`) VALUES ('$vraag', '$personen', '$gelegenheid', '$foto')";
    mysqli_query($conn, $sql);
    header('Location: ../../fotos.php');
  }
else {
    echo "Sorry, there was an error uploading your file.";
  }
}


?>
 
PHP hulp

PHP hulp

15/08/2020 10:16:16
 
- Ariën -
Beheerder

- Ariën -

14/07/2020 16:08:20
Quote Anchor link
Ik zou dan toch even wat meer debugging inbouwen in je script.
$_FILES['fileToUpload']['error'] zal vast wel wat meer details geven.

Zie ook: https://www.php.net/manual/en/features.file-upload.errors.php

PS: Er zit wel SQL-injection in je query, dus je bent behoorlijk vatbaar voor misbruik.

Ook adviseer ik om niet te filteren en te escapen op je input, maar dit te doen op je output.
Gewijzigd op 14/07/2020 16:10:26 door - Ariën -
 
Rick Okkersen

Rick Okkersen

14/07/2020 16:09:50
Quote Anchor link
Er is helaas 1 probleem. Het lijkt wel alsof de browser gewoon heel lang doet over het laden van een lege pagina. Als ik op de verwerkingspagina alle code weghaal, en vervang door echo 'hi'; werkt dat ook niet....

SQL injection is niet erg, deze pagina staat op een lokale server in mijn netwerk, en alleen ik gebruik m
Gewijzigd op 14/07/2020 16:10:49 door - Ariën -
 
- Ariën -
Beheerder

- Ariën -

14/07/2020 16:14:34
Quote Anchor link
Quoten van het eerst voorgaande bericht is niet nodig hoor, ik heb je quote even verwijderd. Je kan onderin gewoon de 'Snel reageren' functie gebruiken.

Er is een timeout, misschien zie je wel wat meer. Zorg ervoor dat je alle foutafhandeling in PHP aanzet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>

En kijk dus ook naar de errors van je upload. Misschien krijg je daar nog een interessante error-code uit?

Over de SQL-injection: Dan alsnog kan je met een fout teken ook meteen je query vernachelen. Dus ik raad aan om de SQL-injection alsnog op te lossen. Anders heb je kans dat je wel foto's uploadt, maar dat je het pad niet in de database plaatst. Bovendien kan ook je query mislukken, dus zou een controle daarop ook niet misstaan.

En dan nog iets: Wat als iemand nu een PHP-script uploadt? Of wat anders?
mag dat ook? Want ik zie geen enkele veiligheid...
Gewijzigd op 14/07/2020 16:24:45 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

14/07/2020 17:13:50
Quote Anchor link
Wit scherm -> check je errorlog. Waarschijnlijk raakt het geheugen dat het PHP-bestand mag gebruiken op tijdens de uitvoer. Maar als dit allemaal aparte uploads zijn, waarbij je maar 1 foto per keer upload... apart?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.