Meerdere foto's in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jeroen

Jeroen

16/11/2006 22:28:00
Quote Anchor link
Hallo,

ik heb uit ditscript een groot deel gebruikt om voor mezelf een scriptje te schrijven, hopelijk vind cynthia het goed.

Nou ben ik zover gekomen dat ik een foto kan uploaden, een link in een database kan zetten en het weer kan uitlezen, dat was voor mij al een heel gepruts maar het is uiteindelijk gelukt.

Nou zou ik graag 3 foto's uploaden en de links hiervan ook in m'n database zetten.
Gelukkig staat er onderin het commentaar van dat script ook nog een ander script van Arjan Kapteijn voor het uploaden van meerdere foto's.

Uitendelijk heb ik, de SQL query van cynthia gebruikt, en het script van Arjan Kapteijn. dit aangepast en voor 1 foto werkt het nou dus super, het enige probleem is, dat de foto's goed geupload worden, maar de link niet in de databse terecht komt.

Dit is mijn code :
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
<?php
 $random
= randomgenerator(5);
         $verplaats = move_uploaded_file($temp, "./img/" .$random.'-'.$naam);

         if($verplaats == 1){        
                                                                        
    $query = "UPDATE users SET afbeelding1 = '/img/$random-$naam' WHERE `id` = $userid";
                                
                                         if(!mysql_db_query($database,$query,$sql)) die(mysql_error());  
                                        
echo' <hr color="#000000">Naam: ' .$naam. '<br> Type: ' .$type. '<br>';
    echo' ID: ' .$userid. '<br>';              
    echo 'Er is geen error opgetreden. Het bestand<b> ' .$naam. ' </b>is met success geupload<hr color="#000000">';

        }
[
/code]

Mijn database is 1 tabel met een aantal rijen met informatie, en 3 rijen voor de links van de foto's, deze heten afbeelding1 afbeelding2 en afbeelding3.
De map waar de foto'
s moeten komen is /img/.
$random is een gegenereerde code die voor de naam van de afbeelding komt om het uniek te maken.

Ik weet dat deze query niet de schoonheids prijs verdient maar ik heb ook nog niet heel erg veel kennis.

Wat heb ik zelf geprobeerd:

[
list][li]Meerdere velden in de query[/li] maar omdat dan komt de laatste foto 3x in de database.
[
li] Een for loop, met een variable als veldnaam. [/i] Zonder resultaat
[li] Meerdere queries[/li] Door de loop wie er is blijft het de zelfde afbeelding
[li] Functies gelezen op php.net[/li] Heeft me weinig op geleverd
[li] Google [/li] Weinig voor mij begrijpelijke code's wie mij wijzer maken.


Wie kan mij een zetje in de goede richting geven.
Gewijzigd op 01/01/1970 01:00:00 door Jeroen
 
PHP hulp

PHP hulp

19/11/2024 00:49:41
 
Frank -

Frank -

16/11/2006 22:40:00
Quote Anchor link
Wanneer $verplaats gelijk is aan 1, dan vindt er een update plaats. Waarom controleer jij niet hoeveel records er zijn geupdate? Zonder deze gegevens weet je nooit zeker of er een update heeft plaatsgevonden. mysql_affected_rows() is je beste vriend. Jouw huidige controle vertelt je alleen of de query is gelukt, dat is heel wat anders.

Begint jouw script overigens met de volgende regels?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

// rest van je script
?>
 
Jeroen

Jeroen

16/11/2006 23:18:00
Quote Anchor link
Ik heb de code wie je aangeeft erbij gezet, deze geeft geen errors weer.

mysql_affected_rows() geeft: 1
Dat er maar 1 veld geupdate zou worden had ik wel verwacht, omdat ik steeds andere afbeeldingen gebruik zie ik dat het veld afbeelding1 vel aangepast word, maar in 2 en 3 gebeurd niks.
De output staat wel bij in de loop, anders krijg ik errors door de ELSE wie erna komt.

Maar is dit output van de hele loop, of van de actie in 1 loop? (hoe leg je dat uit)
Gewijzigd op 01/01/1970 01:00:00 door Jeroen
 
Jeroen

Jeroen

17/11/2006 19:32:00
Quote Anchor link
Iemand nog een idee..?
 
Frank -

Frank -

17/11/2006 19:37:00
Quote Anchor link
$query = "UPDATE users SET afbeelding1 = '/img/$random-$naam' WHERE `id` = $userid";

Ik zie hier de kolomnaam 'afbeelding1' staan. Dat duidt in de eerste plaats op een verkeerd datamodel, afbeelding2 en afbeelding3 zullen waarschijnlijk ook bestaan, er is dus niet (volledig) genormaliseerd, maar in de tweede plaats kan deze query onmogelijk een foto in een ander kolomnaam gaan opslaan.

Tevens mis ik een foreach of while waarmee je alle foto's gaat uploaden. Waar is deze code? En vooral, waarom denk jij dat er 3 bestandsnamen in de database moeten komen te staan? Er is hier geen letter php-code die daar op duidt.
 
Jeroen

Jeroen

17/11/2006 19:58:00
Quote Anchor link
Hier de volledige php code, wie hoogst waarschijnlijk nog wel meer schoonheids fouten fouten bevat, maar dit is nu niet van het grootste belang.

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<html>
<body>

<!-- form starten voor de drop down list -->
<table>
<form name="form1" method="POST" action="<?php $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
<select name="id">
<option selected>Kies een naam</option>';

<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);

include "config.php";
$result = mysql_query("select * from users");  
//de keuze mogelijkheden onder elkaar zetten doormiddel van een loop

while ($gegevens = mysql_fetch_object($result)){
        $keuzenaam = $gegevens->a;
        $id = $gegevens->id;
 echo'<option value =' .$id. '>' .$keuzenaam. '</option>';
 }

?>


<!-- de dropdownlist afsluiten -->
</select>

<p>Afbeeldingen uploaden, max 100kb per afbeelding:</p>


<!-- -----------------------------------------------1----------------------------------------------------------- -->
<tr>
    <input type="hidden" name="MAX_FILE_SIZE" value="102400">
</tr>
<tr>
    <td>Afbeelding:</td><td><input size="50" type="file" name="afbeelding1"></td>
</tr>
<tr><td height="5px"></td></tr>
<!-- -----------------------------------------------2---------------------------------------------------------- -->

<tr>
    <input type="hidden" name="MAX_FILE_SIZE" value="102400">
</tr>
<tr>
    <td>Afbeelding:</td><td><input size="50" type="file" name="afbeelding2"></td>
</tr>
<tr><td height="5px"></td></tr>
<!-- ------------------------------------------------3---------------------------------------------------------- -->

<tr>
    <input type="hidden" name="MAX_FILE_SIZE" value="102400">
</tr>
<tr>
    <td>Afbeelding:</td><td><input size="50" type="file" name="afbeelding3"></td>
</tr>
<tr><td height="5px"></td></tr>

<!-- -------------------------------------------------------------------------------------------------------------- -->
<tr>
    <td>
<input type="submit" name="Submit" value="Uploaden!">
    </td>
<tr>
</form>
</table>
</body>
</html>

<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);

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


//random code genereren om later achter de afbeelding te zetten.    
    function randomgenerator($aantaltekens)
    {

        $kleineletters     = range('a','z');
        $groteletters     = range('A','Z');
        $cijfers        = range(0,9);
        
        $karakters     = array_merge($kleineletters, $groteletters, $cijfers);
        $aantal     = count($karakters)-1;
          $random     = null;
          
          for($i=0; $i < $aantaltekens; $i++) {
               $random .= $karakters[mt_rand(0, $aantal)];
          }

          return $random;
    }

    
//
    foreach($_FILES as $afbeelding)
    {

        $naam         = $afbeelding['name'];
        $type         = $afbeelding['type'];
        $temp         = $afbeelding['tmp_name'];
        $error        = $afbeelding['error'];
        $size         = $afbeelding['size'];

            $userid = $_REQUEST['id'];

        switch($error)
        {
            case
0:
                if(is_uploaded_file($temp))
                {

if($type == 'image/jpeg' || $type == 'image/gif' || $type == 'image/png' || $type == 'image/jpg' || $type == 'image/bmp'||)
                    {

                        if($size >= 102400)
                        {

                            echo '<p>Sorry, dit bestand is te groot om te worden geupload!</p>';
                        }
else{
                            $random = randomgenerator(5);
                            $verplaats = move_uploaded_file($temp, "./img/" .$random.'-'.$naam);

                            if($verplaats == 1){    
                                
                                                                        
$query = "UPDATE users SET afbeelding = '/img/$random-$naam' WHERE `id` = $userid";

                                         if(!mysql_db_query($database,$query,$sql)) die(mysql_error());  

echo' <hr color="#000000">Naam: ' .$naam. '<br> Type: ' .$type. '<br>';
echo' ID: ' .$userid. '<br>';              
echo' Er is geen error opgetreden. Het bestand<b> ' .$naam. ' </b>is met success geupload<br>';
echo' Updated records: ', mysql_affected_rows();
                                }
                    
                                                            
                            else{
                                echo '<p>Er ging iets mis met het uploaden van '.$naam.', neem contact op met de webmaster.</p>';
                            }
                        }
                    }
else{
                        echo '<p>Sorry, dit bestandsformaat accepteer ik niet!</p>';
                    }                
                }
else{
                    echo '<p>Sorry, dit accepteer ik niet!</p>';
                }

                break;
                
            case
1:
echo '<p>Error: De grootte van het bestand is groter dan wat de server aankan!</p>';
                break;
            
            case
2:
echo '<p>Error: De grootte van het bestand is groter dan 100kb!</p>';
                break;
            
            case
3:
echo '<p>Error: Het bestand is maar gedeeltelijk geupload!</p>';
                break;
            
            case
4:
                //Geen bestand geupload, we doen niks!
                break;
            }
        }
    }


?>


Dit is zoals je kunt zien, en in mijn start post stond aagegeven een bestaand script, wie ik zelf probeer aan te passen naar mijn wensen.
 
Jeroen

Jeroen

17/11/2006 21:57:00
Quote Anchor link
Frank schreef op 17.11.2006 19:37:
$query = "UPDATE users SET afbeelding1 = '/img/$random-$naam' WHERE `id` = $userid";

Ik zie hier de kolomnaam 'afbeelding1' staan. Dat duidt in de eerste plaats op een verkeerd datamodel, afbeelding2 en afbeelding3 zullen waarschijnlijk ook bestaan, er is dus niet (volledig) genormaliseerd, maar in de tweede plaats kan deze query onmogelijk een foto in een ander kolomnaam gaan opslaan.

Tevens mis ik een foreach of while waarmee je alle foto's gaat uploaden. Waar is deze code? En vooral, waarom denk jij dat er 3 bestandsnamen in de database moeten komen te staan? Er is hier geen letter php-code die daar op duidt.


Is het mischien een idee om een nieuwe tabel te maken met daarin een naam van de afbeelding, een afbeelding ID en een userID. Deze koppelen aan de tabel "users" wie al bestaat via de usersid?
 
Frank -

Frank -

17/11/2006 22:11:00
Quote Anchor link
Quote:
Is het mischien een idee om een nieuwe tabel te maken met daarin een naam van de afbeelding, een afbeelding ID en een userID. Deze koppelen aan de tabel "users" wie al bestaat via de usersid?
Dat is een uitstekend plan!
 



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.