hoe krijg je pad afbeelding in mysql

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robert Jansen

Robert Jansen

06/02/2017 13:03:37
Quote Anchor link
Hallo,

Ik heb script waarmee je foto's kan uploaden naar de map images, dit werkt. Maar in de database wil ik in de kolom: image een pad hebben images/NaamVanAfbeelding.jpg.
Op dit moment krijg ik het pad images/\
Ik snap niet waar de \ vandaan komt, maar daar zal de naam van de foto moeten komen.

De naam en beschrijving worden wel in de db gezet.

Mijn vraag is: hoe krijg ik in de database in de kolom image het pad: images/NaamAfbeelding.jpg?

alvast bedankt:

index.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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

require_once('connect.php');
require_once('class_foto_video.php');
$database = new Database();
 
if(isset($_FILES['file'])){
   $fileupload = new FotoVideo($database);
$fileupload->UploadFoto();

    if($fileupload -> uploadfile()){
        echo 'Bestand is geüpload';
    }
}


if (isset($_POST["submit"])) {
    $naam = $_POST['name'];
    //$filepath = $_POST['file'];
    $beschrijving = $_POST['description'];
    
    $fileupload = new FotoVideo($database);
    $fileupload -> VoegFotoInDatabase($naam,$beschrijving);
    echo 'data toegevoegd';
}

?>

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Foto toevoegen</title>
</head>

<body>
<h2>Foto uploaden</h2>
<form align="center" enctype="multipart/form-data" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
Naam: <input type="text" name="name" /><br />
Select upload file: <input type="file" name="file" required="yes"  /><br />
<textarea rows="4" cols="50" name="description"> </textarea><br />
<input type="submit" name="submit" value="Verstuur" />
</form>
<a href="dashboard.php">klik hier om terug te gaan</a>
</body>
</html>


class:
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
class FotoVideo{

    private $database;
    private $src = "images/";
    private $tmp;
    private $filename;
    private $type;
    private $uploadfile;

public function UploadFoto(){
        $this -> filename = $_FILES["file"]["name"];
        $this -> tmp = $_FILES["file"]["tmp_name"];
        $this -> uploadfile = $this -> src . basename($this -> filename);
        
      
    }
    public function uploadfile(){
        if(move_uploaded_file($this -> tmp, $this -> uploadfile)){
            return true;
        }
    }

    
    public function VoegFotoInDatabase($naam,$beschrijving){
        $filepath = $this->src . DIRECTORY_SEPARATOR . $this->filename;
        $stmt = $this->database->prepare("INSERT INTO foto(naam,image,beschrijving) VALUES (?, ?, ?)");
        $stmt->bind_param('sss', $naam,$filepath ,$beschrijving );
        $naam = $_POST['name'];
        //$filepath = $_POST['file'];
        $beschrijving = $_POST['description'];
        $stmt->execute();
        $stmt->close();
    }

}
 
PHP hulp

PHP hulp

23/11/2024 02:31:42
 
Ward van der Put
Moderator

Ward van der Put

06/02/2017 13:29:59
Quote Anchor link
Ik zou de logica eerst veranderen. Als alle afbeeldingen in /images/ staan, hoef je /images/ niet op te slaan in de database. Het pad is dan een constante; dingen die altijd hetzelfde zijn, sla je per definitie niet op als variabele data.

Dat maakt een aanpassing later ook veel makkelijker. Bijvoorbeeld wanneer het pad verandert omdat je de afbeeldingen verplaatst naar een CDN of een cookieloos domein.
 
Joakim Broden

Joakim Broden

06/02/2017 13:34:04
Quote Anchor link
Op regel 10 begin je de FotoVideo klasse.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $fileupload
= new FotoVideo($database);
?>

Met de functie "UploadFoto" word "$this->filename" geset die je in de functie "VoegFotoInDatabase" weer aan wilt roepen. Omdat je op regel 23 weer een nieuwe "FotoVideo" aanmaakt en geen "UploadFoto" functie aanroept is "$this->filename" niet geset.

En die \ is van DIRECTORY_SEPARATOR. Maar DIRECTORY_SEPARATOR is niet meer van toepassing, dus die kun je achterwege laten. Wil je echt zeker weten dat er een / tussen het bestand en map staat (aangezien je al "images/" gebruikt + DIRECTORY_SEPARATOR zou er "images//" uit komen kun je de volgende code gebruik.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $this
->src = rtrim($this->src, '/').'/';
?>


Dus al met al is het: "images/" + "DIRECTORY_SEPARATOR" + "lege filename" = "images/\"

Maar een andere vraag, waarom wil je de map opslaan in de database. Als de map veranderd op de server betekend dit ook dat je alle records in de database moet veranderen.
Gewijzigd op 06/02/2017 13:35:52 door Joakim Broden
 



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.