Ik ben bezig aan volgende website http://crasharenaturbostars.com/designs/ Het is de bedoeling dat mensen een screenshot uploaden en dat deze dan vervolgens weergegeven wordt.

Gezien ik niet zoveel bandbreedte heb op mijn hosting wil ik voor de hosting van de screenshots een externe hoster gebruiken. Hiervoor gebruik ik uploads.im ()

Op mijn site heb ik volgende code staan:
<form method="POST" action="http://uploads.im/api?upload&resize_width=350" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="Upload" name="submit">
</form>


Wanneer ik een afbeelding upload krijg ik volgende json terug:
{"status_code":200,"status_txt":"OK","data":{"img_name":"FhXqn.jpg","img_url":"http:\/\/sk.uploads.im\/FhXqn.jpg","img_view":"http:\/\/uploads.im\/FhXqn.jpg","img_width":"350","img_height":233,"img_attr":"width=\"350\" height=\"233\"","img_size":"29.3 KB","img_bytes":30051,"thumb_url":"http:\/\/sk.uploads.im\/t\/FhXqn.jpg","thumb_width":360,"thumb_height":240,"source":"base64 image string","resized":"1","delete_key":"2c8b42a2daa7436b"}}


Hoe kan ik de afbeeldignsurl uit deze json halen (zodat ik hem in mijn mysql database kan stoppen) en hoe zorg ik er voor dat de bezoeker de json niet te zien krijgt?
Ik raad je aan om even je code netjes in te springen. Als ik accolades op een rechte lijn zie dan krijg ik altijd de bibbers.

Kijk ook eens op lijn 66 en 68. Hier moet je wel de juiste dingen doen, zoals $result gebruiken als deze true is.
- Ariën - op 30/04/2017 21:53:25

Ik raad je aan om even je code netjes in te springen. Als ik accolades op een rechte lijn zie dan krijg ik altijd de bibbers.

Kijk ook eens op lijn 66 en 68. Hier moet je wel de juiste dingen doen, zoals $result gebruiken als deze true is.


De code die ik nu gebruik werkt naar behoren en doe wat ik verwacht.
Ik ben echter nog maar een beginneling op vlak van programmeren en wou dan ook even vragen of bepaalde stukken van mijn code verbeterd kunnen worden?

Alle code:

<?php

// Debugging
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);

// Connection with database
$conn = new mysqli('localhost', '', '', '');

// Executes only when the form was send
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  $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"] > 10000000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
  }
  // Allow certain file formats
  if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
    echo "Sorry, only JPG, JPEG & PNG files are allowed.";
    $uploadOk = 0;
  }
  // 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.";
    }
  }

  // Establishing file path and api url
  $file_path = 'http://crasharenaturbostars.com/designs/uploads/'. basename($_FILES["fileToUpload"]["name"]);
  $url = 'http://uploads.im/api?upload='. $file_path. '&resize_width=350';

  // Getting the image url out of the JSON
  $str = file_get_contents($url);
  $json = json_decode($str, true);
  $imageurl = $json['data']['img_url'];

  // Putting the image url in the database
  $sql1 = "INSERT INTO designs (image) VALUES ('$imageurl')";
  $result1 = mysqli_query($conn,$sql1);

  // Deleting temorary image file
  if ($json['status_txt'] == "OK") {
    unlink($_SERVER['DOCUMENT_ROOT'].'/designs/uploads/'. basename($_FILES["fileToUpload"]["name"]));
  }
}

?>

<!-- Including header -->
<?php include($_SERVER['DOCUMENT_ROOT'].'/header.php'); ?>
<h2>Designs</h2>

<?php

$sql2 = "SELECT image FROM designs";
if($result2 = $conn->query($sql2)) {
  // Looping through all images in database
  while($row = mysqli_fetch_assoc($result2)) {

    ?>
    <img src="<?php echo $row["image"]; ?>" width="350" class="designimage">
    <?php
  }
}
?>

<div id="upload">
  <br/>
  <b>Upload</b><br/>
  <!-- Form to upload design -->
  <form method="POST" action="" enctype="multipart/form-data">
    Make a screenshot from your design in edit mode and upload it here.<br/>
    <input type="file" name="fileToUpload" id="fileToUpload" /><br/><br/>
    <input type="submit" value="Upload design" name="submit" class="button">
  </form>
</div>
<!-- Including footer -->
<?php include($_SERVER['DOCUMENT_ROOT'].'/footer.php');?>
>> De code die ik nu gebruik werkt naar behoren en doe wat ik verwacht.

Code die voor de machine klopt als een bus en draait als een zonnetje kan voor mensen TOTAAL onleesbaar zijn. Zolang het werkt en het niet veranderd hoeft te worden is er dan nog niets aan de hand maar we weten zo onderhand wel dat code van tijd tot tijd aangepast dient te worden dus is het heel erg belangrijk om de code duidelijk leesbaar te maken en te voorzien van de broodnodige commentaar regels.
Een goede editor helpt je daarbij overigens.
Als je een JSON respons terugkrijgt, kun je dan niet gewoon opnieuw een AJAX post doen naar een PHP-script?
Verbeteringen zijn er zeker mogelijk. Te veel om zo even op te noemen waarschijnlijk. Maar laten we een onderwerp pakken: Wat doen die echos midden in je applicatie?

Ik neem even aan dat in header.php de <html> tag staat? dan komen die foutmeldingen zoals "Sorry, your file was not uploaded." dus niet tussen de <html> en </html> tag te staan.

Reageren