How to Rename images while uploading in add / remove dynamic fields


How to Rename images while uploading in add / remove dynamic fields



I am creating a project in which I have created several Dynamic Add/Remove fields. Every thing is working perfectly and have no issues.



I have created add/remove image file fields. When I upload images it gets uploaded perfectly. But I want these images to get rename using rand() function.


rand()


<?php

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

$member_details->member_image = array_map( 'sanitize_file_name', $_FILES['member_image']['name'] );
$member_details->member_name = array_map( 'sanitize_text_field', $_POST['member_name'] );
$member_details->member_role = array_map( 'sanitize_text_field', $_POST['member_role'] );
$member_details->member_email = array_map( 'sanitize_text_field', $_POST['member_email'] );
$member_details->member_facebook_id = array_map( 'sanitize_text_field', $_POST['member_facebook_id'] );

$member_details_encode = wp_json_encode( $member_details );

global $wpdb;

$members_result = $wpdb->insert( 'wpxa_project_members',

array(

'project_id' => $_SESSION['project_id'],
'author_id' => $post_author,
'project_members' => $member_details_encode

),

array(

'%d',
'%d',
'%s'

)

);

for($i=0; $i < count( $_FILES['member_image']['name'] ); $i++) {

$profile_image_folder = "profile-images/";
$profile_image_name = $_FILES['member_image']['name'][$i];
$profile_image_path = trim( $profile_image_folder . basename( $profile_image_name ) );
$profile_image_temp = $_FILES['member_image']['tmp_name'][$i];

move_uploaded_file( $profile_image_temp, $profile_image_path );

}

}

?>

<form method="POST" enctype="multipart/form-data">

<div class="panel panel-default">

<div class="panel-heading"><center><b>Team Members</b></center></div>

<div class="panel-body">

<div class="row">

<div class="col-md-4">

<div class="thumbnail">

<img src="<?php echo esc_url( site_url('/img/blank-image.png') ); ?>" id="member_image0" alt="">

</div>

<div class="form-group">

<label class="btn btn-success btn-block btn-file">Add Image<input type="file" name="member_image" onchange="preview_member(event, 0)" style="display: none;"></label>

</div>

</div>

<div class="col-md-8">

<div class="form-group">
<label for="member_name">Member Name <b style="color:#FF0000;">*</b></label>
<input type="text" class="form-control" name="member_name" placeholder="">
</div>

<div class="form-group">
<label for="member_role">Role in Project <b style="color:#FF0000;">*</b></label>
<input type="text" class="form-control" name="member_role" placeholder="">
</div>

<div class="form-group">
<label for="member_email">Email address <b style="color:#FF0000;">*</b></label>
<input type="email" class="form-control" name="member_email" placeholder="">
</div>

<div class="form-group">
<label for="member_facebook_id">Facebook Username <b style="color:#FF0000;">*</b></label>
<input type="text" class="form-control" name="member_facebook_id" placeholder="">
</div>

</div>

</div>

<button type="button" class="btn btn-success btn-block" id="add-member-fields"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add Member</button>

<br>

<div id="member-fields">

</div>

</div>

</div>

<input class="btn btn-warning btn-block" type="submit" name="project_draft" value="Draft" style="border-radius: 0px;">

</form>

<script type='text/javascript'>

var i = 0;

function preview_member(event, inp) {
var reader = new FileReader();
console.log(inp);
reader.onload = function() {
var output = document.getElementById("member_image" + inp);
output.src = reader.result;
};

reader.readAsDataURL(event.target.files[0]);
}

jQuery(document).ready(function($) {
//fadeout selected item and remove
$(document).on("click", "#remove-member-fields", function(event) {
event.preventDefault();
$(this)
.parent()
.fadeOut(300, function() {
$(this).empty();
return false;
});
});

//add input
$("#add-member-fields").click(function() {
i++;

var rows = `<div class="project-members-fields"><div class="row"><div class="col-md-4"><div class="thumbnail"><img src="<?php echo esc_url( site_url('/img/blank-image.png') ); ?>" id="member_image${i}" alt=""></div><div class="form-group"><label class="btn btn-success btn-block btn-file">Add Image<input type="file" name="member_image" onchange="preview_member(event, ${i})" style="display: none;"></label></div></div><div class="col-md-8"><div class="form-group"><label for="member_name">Member Name <b style="color:#FF0000;">*</b></label><input type="text" class="form-control" name="member_name" placeholder=""></div><div class="form-group"><label for="member_role">Role in Project <b style="color:#FF0000;">*</b></label><input type="text" class="form-control" name="member_role" placeholder=""></div><div class="form-group"><label for="member_email">Email address <b style="color:#FF0000;">*</b></label><input type="email" class="form-control" name="member_email" placeholder=""></div><div class="form-group"><label for="member_facebook_id">Facebook Username <b style="color:#FF0000;">*</b></label><input type="text" class="form-control" name="member_facebook_id" placeholder=""></div></div></div><button type="button" class="btn btn-danger btn-block" id="remove-member-fields"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Remove Member</button><br></div></div></div>`;

$(rows)
.fadeIn("slow")
.appendTo("#member-fields");
return false;
});
});

</script>




3 Answers
3



I mainly use this:


/*Upload image*/
$target_dir = "profile-images/";
$temp = explode(".",$_FILES["member_image"]["name"][$i]);
$target_file = $target_dir .sha1(uniqid(mt_rand(), true)) . '.' .end($temp);
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
$upload = move_uploaded_file($_FILES["member_image"]["tmp_name"][$i], $target_file);
/*Upload image*/



The $target_file = $target_dir .sha1(uniqid(mt_rand(), true)) . '.' .end($temp); does the job for you.


$target_file = $target_dir .sha1(uniqid(mt_rand(), true)) . '.' .end($temp);





Thanks @Himas, I am using JSON Encode function. How to rename the files while inserting in database.
– Minesh
Jul 1 at 8:34





OK despite the JSON Encode function we are using same upload function. Let me explain more it's better to rename the image before uploading to the server and inserting to a database to avoid image not found issues(different names of path in database and image name). So same code by just changing parameters same as yours should work all good.
– Himas
Jul 1 at 8:39





Can u plz tell me how to rename file in member_details_encode = wp_json_encode( $member_details );
– Minesh
Jul 1 at 9:05


member_details_encode = wp_json_encode( $member_details );





let me get this straight... it's multiple uploads, right? So you need to fill $member_details inside the for loop too. then if you use the code i wrote before and apply this for array fill $member_details->member_image = array_map( 'sanitize_file_name', sha1(uniqid(mt_rand(), true)) . '.' .end($temp) ); try it.
– Himas
Jul 1 at 9:27



$profile_image_name = $_FILES['member_image']['name'][$i];



to


$profile_image_name = rand(1000,9999) . $_FILES['member_image']['name'][$i];



To be sure this image(filename) is not existing you could so something like this:


do {
$profile_image_name = rand(1000,9999) . $_FILES['member_image']['name'][$i];
$profile_image_path = trim( $profile_image_folder . basename( $profile_image_name ) );
}while( is_file( $profile_image_path ) );



EDIT


<?php

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

for($i=0; $i < count( $_FILES['member_image']['name'] ); $i++) {
$profile_image_name = rand(1000,9999) . $_FILES['member_image']['name'][$i];
// MOVE YOUR FILE UPLOAD HERE!
// ...
}


$member_details->member_image = array_map( 'sanitize_file_name', $profile_image_name );
...





Hi Pilan thanks, Can u plz tell me how to rename file in member_details_encode = wp_json_encode( $member_details );
– Minesh
Jul 1 at 9:06


member_details_encode = wp_json_encode( $member_details );





@Minesh just do your file renaming first and dont forget to change $member_details->member_image = array_map( 'sanitize_file_name', $_FILES['member_image']['name'] ); to $member_details->member_image = array_map( 'sanitize_file_name', $profile_image_name );
– Pilan
Jul 1 at 9:11


$member_details->member_image = array_map( 'sanitize_file_name', $_FILES['member_image']['name'] );


$member_details->member_image = array_map( 'sanitize_file_name', $profile_image_name );





I created the code as per ur guidence. the file is updated properly in folder but it is showing NULL in database.
– Minesh
Jul 1 at 9:46






@Minesh i edited the answer, this may help
– Pilan
Jul 1 at 10:17





The problem with $member_details->member_image = array_map( 'sanitize_file_name', $profile_image_name ); is that it is not capturing the new name hence when the values are inserted in database it member_image gets NULL
– Minesh
Jul 1 at 10:30


$member_details->member_image = array_map( 'sanitize_file_name', $profile_image_name );


NULL


<?php

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

$member_image_names = array_map( 'sanitize_file_name', $_FILES['member_image']['name'] );

foreach ( $member_image_names as $member_image_name ) {

$member_image_newname = get_current_user_id() . "_" . time() . "_" . rand() . "_" . $member_image_name;

}

$member_details->member_image = $member_image_newname;
$member_details->member_name = array_map( 'sanitize_text_field', $_POST['member_name'] );
$member_details->member_role = array_map( 'sanitize_text_field', $_POST['member_role'] );
$member_details->member_email = array_map( 'sanitize_text_field', $_POST['member_email'] );
$member_details->member_facebook_id = array_map( 'sanitize_text_field', $_POST['member_facebook_id'] );

$member_details_encode = wp_json_encode( $member_details );

global $wpdb;

$members_result = $wpdb->insert( 'wpxa_project_members',

array(

'project_id' => $_SESSION['project_id'],
'author_id' => $post_author,
'project_members' => $member_details_encode

),

array(

'%d',
'%d',
'%s'

)

);

if ( ! empty( $members_result ) ) {

$push = json_decode($member_details_encode, true);
$count_member = count( $push['member_image'] );

for ( $u = 0; $u < $count_member; $u++ ) {
$coco = $push['member_image'][$u];

$profile_image_folder = "profile-images/";
$profile_image_path = trim( $profile_image_folder . basename( $coco ) );
$profile_image_temp = $_FILES['member_image']['tmp_name'][$u];

move_uploaded_file( $profile_image_temp, $profile_image_path );

}

}

}

?>






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

List of Kim Possible characters

Audio Livestreaming with Python & Flask

NSwag: Generate C# Client from multiple Versions of an API