Meerdere foto's tegelijk uploaden
Ik heb een stukje in mijn ajax.php staan maar ik zou graag meerdere foto's tegelijk willen toevoegen.
Code (php)
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
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
if ($_SESSION['role'] == 'user' ){
$_SESSION['profile_id'] = $f_id ;
}
$allowedExts = array("gif", "jpeg", "jpg", "png");
if (isset($_FILES["ppicture"]) ){
$extension = end(explode(".", $_FILES["ppicture"]["name"]));
if ((($_FILES["ppicture"]["type"] == "image/gif")|| ($_FILES["ppicture"]["type"] == "image/jpeg")|| ($_FILES["ppicture"]["type"] == "image/jpg")|| ($_FILES["ppicture"]["type"] == "image/pjpeg")|| ($_FILES["ppicture"]["type"] == "image/x-png")|| ($_FILES["ppicture"]["type"] == "image/png"))&& ($_FILES["ppicture"]["size"] < 2000000)&& in_array($extension, $allowedExts))
{
if ($_FILES["ppicture"]["error"] > 0){
$r = array('status'=> 'error', 'text'=>"fout: " . $_FILES["file"]["error"]);
debug($r,config::debug);
}else{
$source_path = $_FILES['ppicture']['tmp_name'];
$image2 = create_image($source_path, $f_id.'_150x150_0.jpg', 150, 150);
if ($image2 !==''){
$db->query("UPDATE user_profiles set profile_image = '".$image2 ."' where profile_id='".$f_id."' ");
$image3 = create_image($source_path, $f_id.'_300x300_0.jpg', 300, 300);
move_uploaded_file($source_path,'images/'.$f_id.'_original_0.jpg');
$image = $image3 ;
}
}
}else{
//echo $_FILES["ppicture"]["type"].$_FILES["ppicture"]["size"] ;
$r = array('status'=> 'error', 'text'=>$_t['wrong_format']);
debug($r,config::debug);
}
}
$r = array('status'=> 'success', 'text'=>$_t['profile_is_created'] , 'pp'=>'<img src="'.config::site_url.'controller/'.$image.'" alt="">','id'=>$f_id );
$_SESSION['profile_id'] = $f_id ;
}
$allowedExts = array("gif", "jpeg", "jpg", "png");
if (isset($_FILES["ppicture"]) ){
$extension = end(explode(".", $_FILES["ppicture"]["name"]));
if ((($_FILES["ppicture"]["type"] == "image/gif")|| ($_FILES["ppicture"]["type"] == "image/jpeg")|| ($_FILES["ppicture"]["type"] == "image/jpg")|| ($_FILES["ppicture"]["type"] == "image/pjpeg")|| ($_FILES["ppicture"]["type"] == "image/x-png")|| ($_FILES["ppicture"]["type"] == "image/png"))&& ($_FILES["ppicture"]["size"] < 2000000)&& in_array($extension, $allowedExts))
{
if ($_FILES["ppicture"]["error"] > 0){
$r = array('status'=> 'error', 'text'=>"fout: " . $_FILES["file"]["error"]);
debug($r,config::debug);
}else{
$source_path = $_FILES['ppicture']['tmp_name'];
$image2 = create_image($source_path, $f_id.'_150x150_0.jpg', 150, 150);
if ($image2 !==''){
$db->query("UPDATE user_profiles set profile_image = '".$image2 ."' where profile_id='".$f_id."' ");
$image3 = create_image($source_path, $f_id.'_300x300_0.jpg', 300, 300);
move_uploaded_file($source_path,'images/'.$f_id.'_original_0.jpg');
$image = $image3 ;
}
}
}else{
//echo $_FILES["ppicture"]["type"].$_FILES["ppicture"]["size"] ;
$r = array('status'=> 'error', 'text'=>$_t['wrong_format']);
debug($r,config::debug);
}
}
$r = array('status'=> 'success', 'text'=>$_t['profile_is_created'] , 'pp'=>'<img src="'.config::site_url.'controller/'.$image.'" alt="">','id'=>$f_id );
Dit is wat er in ajax staat en dit op moment in mijn gewone bestand:
Code (php)
1
2
3
4
2
3
4
<input type="hidden" id="profile_id2" name="profile_id2" value="<?php echo $profile_id; ?>" >
<input id="ppicture" name="ppicture" class="input-file" type="file">
<p class="help-block"><?php echo $trns['limit_foto']; ?></p>
<button id="save" name="save" class="btn btn-primary ajax"><?php echo $trns['upload']; ?></button>
<input id="ppicture" name="ppicture" class="input-file" type="file">
<p class="help-block"><?php echo $trns['limit_foto']; ?></p>
<button id="save" name="save" class="btn btn-primary ajax"><?php echo $trns['upload']; ?></button>
Nu weet ik dat ik in principe regel
zou kunnen bijvoegen enkel moet ik dan alles wat in ajax staat ook omzetten naar ppicture2?
Deze code lijkt mij ook nog eens knetter onveilig. Waarom zit er een user id in een form ($f_id?) en waarom stop je deze variabele terug in de sessie?? Als iemand op een of andere manier $f_id kan wijzigen, houdt dit dan ook in dat je effectief van user kan schakelen? Dit kan toch nooit de bedoeling zijn?!
Gewijzigd op 21/07/2020 17:21:01 door Thomas van den Heuvel
Wat Adoptive aangeeft is mogelijk lijkt me maar niet om hier iets bij samen te voegen en zijn script werkt met het plaatsen van foto's in een mapje, de foto's gaan wat dat betreft al goed enkel kan ik er nu maar 1 per keer uploaden en dat wil ik bijvoorbeeld naar 5 per keer hebben.
Anyhow, als je dan toch van AJAX gebruik maakt, waarom maak je dan niet zo'n "background upload" ding, op een soortgelijke wijze als je attachments kunt toevoegen in een Gmail e-mailbericht, met zo'n voortgangsindicator ofzo.
Er zijn ook andere vormen denkbaar, maar als je AJAX gebruikt dan is er in principe geen verplichting (meer) om eerst alle bestanden te selecteren, en dan alles achter elkaar te uploaden, omdat dit toch in de achtergrond plaatsvindt.
Het voorbeeld van @Adoptive illustreert in ieder geval hoe je een en ander dynamisch(er) kunt opzetten. De crux hierbij is dat je array-haken ( [] ) gebruikt in de waarden van de name-eigenschap. Dit hield volgens mij vervolgens wel in dat de structuur van het $_FILES array enigszins verandert.
Overigens staat er aan het einde van dat artikel ook een linkje naar een (opzet van een) artikel over uploads via AJAX.