Multiple image upload problem

Hello, i have a php code line for image upload. But i need multiple choice for upload. this is my php line.

<h5><?php esc_html_e('Media','mkdf-real-estate');?></h5>
<div class="mkdf-membership-gallery-holder">
<label for="property_image_gallery"><?php esc_html_e( 'Gallery Images', 'mkdf-real-estate' ); ?></label>
<ul class="mkdf-membership-gallery-images-holder"></ul>
<div class="mkdf-membership-gallery-uploader">

<?php if ( mkdf_membership_theme_installed() ) {echo zuhaus_mikado_get_button_html( array( 'text'      => esc_html__( 'Upload', 'mkdf-real-estate' ),'custom_class' => 'mkdf-membership-gallery-upload') ); } else {echo '<a itemprop="url" href="#" target="_self" class="mkdf-btn mkdf-btn-medium mkdf-btn-solid mkdf-membership-gallery-upload">

<span class="mkdf-btn-text">' . esc_html__( 'Upload', 'mkdf-real-estate' ) . '</span></a>'; } ?>
<input class="mkdf-membership-gallery-upload-hidden" type="file" name="property_image_gallery" id="property_image_gallery" value="" multiple>
</div>
</div>

Well, for a start you don’t have <form>...</form> tags round your input, so how is the script to know what to do with it?

You already got the multiple attribut that prompts the expected browser dialog*, so what’s the actual problem?

*even without the form tag, that you should add anyway.

yes but why is uploading a single picture. I do not understand why.

where did you determine this problem, is your browser actually uploading only a single image?

debug the involved PHP code that you did not post here.

I tested it on safari and chrome browsers and only 1 image can be uploaded.
That’s all about the codes. The rest is the other form values on the page.

What does “upload” mean? What are the exact requests that show up in the developer tools?

Do you see any errors in your browser console?

I see no mistakes.

Can we see the JavaScript code that processes the multiple images for upload, and the PHP code that handles them?

This is all php codes.

<?php
//fallback if someone enters page directly and has no packages

$package = mkdf_re_property_addition_enabled();

//stongly false because of the 0 key for packages
if ($package === false) { ?>
	<div class="mkdf-no-package">
		<h3><?php esc_html_e('Please buy package in order to add more properties.','mkdf-real-estate'); ?></h3>
		<?php if ( mkdf_membership_theme_installed() ) {
			echo zuhaus_mikado_get_button_html( array(
				'text'      => esc_html__( 'BUY PACKAGES', 'mkdf-real-estate' ),
				'link'      => mkdf_re_get_pricing_packages_page()
			) );
		} else {
			echo '<a itemprop="url" href="' . esc_url(mkdf_re_get_pricing_packages_page()) .'" target="_self" class="mkdf-btn mkdf-btn-medium mkdf-btn-solid"><span class="mkdf-btn-text">' . esc_html__( 'BUY PACKAGES', 'mkdf-real-estate' ) . '</span></a>';
		}
		?>
	</div>
<?php } else { ?>
<div class="mkdf-add-property-page">
	<div>
		<form method="post" id="mkdf-re-add-property-form">
			<div class="mkdf-membership-input-holder">
				<label for="property_title"><?php esc_html_e( 'Property Title', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="property_title" id="property_title"
				       value="">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="property_id"><?php esc_html_e( 'Property ID', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="property_id" id="property_id"
				       value="">
			</div>
			<h5><?php esc_html_e('Featured Image','mkdf-real-estate');?></h5>
			<div class="mkdf-membership-gallery-holder">
				<label for="property_featured_image"><?php esc_html_e( 'Featured Image', 'mkdf-real-estate' ); ?></label>
				<ul class="mkdf-membership-gallery-images-holder"></ul>
				<div class="mkdf-membership-gallery-uploader">
					<?php 
					if ( mkdf_membership_theme_installed() ) {
						echo zuhaus_mikado_get_button_html( array(
							'text'      => esc_html__( 'Upload', 'mkdf-real-estate' ),
							'custom_class' => 'mkdf-membership-gallery-upload'
						) );
					} else {
						echo '<a itemprop="url" href="#" target="_self" class="mkdf-btn mkdf-btn-medium mkdf-btn-solid mkdf-membership-gallery-upload"><span class="mkdf-btn-text">' . esc_html__( 'Upload', 'mkdf-real-estate' ) . '</span></a>';
					} ?>
					<input class="mkdf-membership-gallery-upload-hidden" type="file" name="property_featured_image" id="property_featured_image"
					       value="">
				</div>
			</div>
			




<div class="mkdf-membership-input-holder">
<label class="mkdf-membership-input-label" for="property_type"><?php esc_html_e( 'Property Type', 'mkdf-real-estate' ); ?></label>
<?php $property_terms = mkdf_re_get_property_terms_list('property-type'); if (is_array($property_terms) && count($property_terms)) { ?>
<div class="mkdf-grid-row">
<div class="mkdf-grid-col-3">
<select name="property_type[]" id="property_term">
<?php foreach ($property_terms as $property_term) { ?>
<option value="<?php echo esc_attr($property_term['id'])?>"><?php esc_html_e($property_term['name'],'mkdf-real-estate'); ?></option>
<label class="mkdf-select-label" for="mkdf-feature-<?php echo esc_attr($property_term['id'])?>">
<span class="mkdf-label-view"></span>
<span class="mkdf-label-text"></span>
<?php echo esc_html($property_term['name'])?>
</label>
<?php } ?>						
</select>
</div>
</div>
<?php } ?>
</div>						





<div class="mkdf-membership-input-holder">
<label class="mkdf-membership-input-label" for="property_feature">
<?php esc_html_e( 'Property Feature', 'mkdf-real-estate' ); ?></label>
<?php $property_terms = mkdf_re_get_property_terms_list('property-feature'); if (is_array($property_terms) && count($property_terms)) { ?>
<div class="mkdf-grid-row">
<?php foreach ($property_terms as $property_term) { ?>
<div class="mkdf-grid-col-3">
<div class="mkdf-checkbox-style">
<input type="checkbox" name="property_feature[]" value="<?php echo esc_attr($property_term['id'])?>">
<label class="mkdf-checkbox-label" for="mkdf-feature-<?php echo esc_attr($property_term['id'])?>">
<span class="mkdf-label-view"></span>
<span class="mkdf-label-text">
<?php echo esc_html($property_term['name'])?>
</span>
</label>
</div>
</div>
					<?php } ?>
					</div>
				<?php } ?>
			</div>
			


<div class="mkdf-membership-input-holder">
<label class="mkdf-membership-input-label" for="property_status"><?php esc_html_e( 'Property Status', 'mkdf-real-estate' ); ?></label>
<?php $property_terms = mkdf_re_get_property_terms_list('property-status'); if (is_array($property_terms) && count($property_terms)) { ?>
<div class="mkdf-grid-row">
<div class="mkdf-grid-col-3">
<select name="property_status[]" id="property_term">
<?php foreach ($property_terms as $property_term) { ?>
<option value="<?php echo esc_attr($property_term['id'])?>"><?php esc_html_e($property_term['name'],'mkdf-real-estate'); ?></option>
<label class="mkdf-select-label" for="mkdf-feature-<?php echo esc_attr($property_term['id'])?>">
<span class="mkdf-label-view"></span>
<span class="mkdf-label-text">
<?php echo esc_html($property_term['name'])?>
</label>
<?php } ?>						
</select>
</div>
</div>
<?php } ?>
</div>	
	

<div class="mkdf-membership-input-holder">
<label class="mkdf-membership-input-label" for="property_county"><?php esc_html_e( 'Property Country', 'mkdf-real-estate' ); ?></label>
<?php $property_terms = mkdf_re_get_property_terms_list('property-county'); if (is_array($property_terms) && count($property_terms)) { ?>
<div class="mkdf-grid-row">
<div class="mkdf-grid-col-3">
<select name="property_county[]" id="property_term">
<?php foreach ($property_terms as $property_term) { ?>
<option value="<?php echo esc_attr($property_term['id'])?>"><?php esc_html_e($property_term['name'],'mkdf-real-estate'); ?></option>
<label class="mkdf-select-label" for="mkdf-feature-<?php echo esc_attr($property_term['id'])?>">
<span class="mkdf-label-view"></span>
<span class="mkdf-label-text">
<?php echo esc_html($property_term['name'])?>
</label>
<?php } ?>						
</select>
</div>
</div>
<?php } ?>
</div>


<div class="mkdf-membership-input-holder">
<label class="mkdf-membership-input-label" for="property_city"><?php esc_html_e( 'Property City', 'mkdf-real-estate' ); ?></label>
<?php $property_terms = mkdf_re_get_property_terms_list('property-city'); if (is_array($property_terms) && count($property_terms)) { ?>
<div class="mkdf-grid-row">
<div class="mkdf-grid-col-3">
<select name="property_city[]" id="property_term">
<?php foreach ($property_terms as $property_term) { ?>
<option value="<?php echo esc_attr($property_term['id'])?>"><?php esc_html_e($property_term['name'],'mkdf-real-estate'); ?></option>
<label class="mkdf-select-label" for="mkdf-feature-<?php echo esc_attr($property_term['id'])?>">
<span class="mkdf-label-view"></span>
<span class="mkdf-label-text">
<?php echo esc_html($property_term['name'])?>
</label>
<?php } ?>						
</select>
</div>
</div>
<?php } ?>
</div>


			<div class="mkdf-membership-input-holder">
				<label class="mkdf-membership-input-label" for="property_neighborhood"><?php esc_html_e( 'Property Neighborhood', 'mkdf-real-estate' ); ?></label>
				<?php $property_terms = mkdf_re_get_property_terms_list('property-neighborhood');
				if (is_array($property_terms) && count($property_terms)) { ?>
					<div class="mkdf-grid-row">
					<?php foreach ($property_terms as $property_term) { ?>
						<div class="mkdf-grid-col-3">
							<div class="mkdf-checkbox-style">
								<input type="checkbox" name="property_neighborhood[]" value="<?php echo esc_attr($property_term['id'])?>">
								<label class="mkdf-checkbox-label" for="mkdf-feature-<?php echo esc_attr($property_term['id'])?>">
									<span class="mkdf-label-view"></span>
									<span class="mkdf-label-text">
										<?php echo esc_html($property_term['name'])?>
									</span>
								</label>
							</div>
						</div>
					<?php } ?>
					</div>
				<?php } ?>
			</div>
						<div class="mkdf-membership-input-holder">
				<label class="mkdf-membership-input-label" for="property_description"><?php esc_html_e( 'Description', 'mkdf-real-estate' ); ?></label>
				<textarea class="mkdf-membership-input" name="property_description" id="property_description" rows="5"></textarea>
			</div>

<h5><?php esc_html_e('Specifications','mkdf-real-estate');?></h5>
<table>
<td>
<div class="mkdf-membership-input-holder">
<label for="price"><?php esc_html_e( 'Price €', 'mkdf-real-estate' ); ?></label>
<input class="mkdf-membership-input" type="text" name="price" id="price"
value="">
</div>
</td>
<td>
<div class="mkdf-membership-input-holder">
<select name="price_label" id="price_label">
<option value="euro"><?php esc_html_e('€ Euro','mkdf-real-estate'); ?></option>
<option value="franc"><?php esc_html_e('CHF Swiss Franc','mkdf-real-estate'); ?></option>
</select>
</div>
</td>
</table>



<div class="mkdf-membership-input-holder">
				<label for="accommodation"><?php esc_html_e( 'Deposit', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="accommodation" id="accommodation"
				       value="">
			</div>

						<div class="mkdf-membership-input-holder">
				<label for="size"><?php esc_html_e( 'Size (m2)', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="size" id="size"
				       value="">
			</div>
			
			<div class="mkdf-membership-input-holder">
				<label for="bedrooms"><?php esc_html_e( 'Bedrooms', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="bedrooms" id="bedrooms"
				       value="">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="bathrooms"><?php esc_html_e( 'Bathrooms', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="bathrooms" id="bathrooms"
				       value="">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="floor"><?php esc_html_e( 'Floor', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="floor" id="floor"
				       value="">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="total_floors"><?php esc_html_e( 'Total Floors', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="total_floors" id="total_floors"
				       value="">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="year_built"><?php esc_html_e( 'Year Built', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="year_built" id="year_built"
				       value="">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="heating"><?php esc_html_e( 'Heating', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="heating" id="heating"
				       value="">
			</div>
			<h5><?php esc_html_e('Additional Specifications','mkdf-real-estate');?></h5>
			<div class="mkdf-membership-input-holder">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="parking"><?php esc_html_e( 'Parking', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="parking" id="parking"
				       value="">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="property_from_center"><?php esc_html_e( 'Distance From the Center (mt)', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="property_from_center" id="property_from_center"
				       value="">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="area_size"><?php esc_html_e( 'Area Size (m2)', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="area_size" id="area_size"
				       value="">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="garages"><?php esc_html_e( 'Garages', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="garages" id="garages"
				       value="">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="garages_size"><?php esc_html_e( 'Garages Size (m2)', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="garages_size" id="garages_size"
				       value="">
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="publication_date"><?php esc_html_e( 'Publication Date', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input datepicker" type="text" name="publication_date" id="publication_date"
				       value="">
			</div>
			<?php if ($number_of_featured > 0) { ?>
				<div class="mkdf-membership-input-holder">
					<h5><label for="featured_property"><?php esc_html_e( 'Featured Property', 'mkdf-real-estate' ); ?></label></h5>
					<div class="mkdf-grid-row">
						<div class="mkdf-grid-col-12">
							<select name="featured_property" id="featured_property">
								<option selected="selected" value=""><?php esc_html_e('Default','mkdf-real-estate'); ?></option>
								<option value="no"><?php esc_html_e('No','mkdf-real-estate'); ?></option>
								<option value="yes"><?php esc_html_e('Yes','mkdf-real-estate'); ?></option>
							</select>
						</div>
					</div>
				</div>
			<?php } ?>
			

					<h5><?php esc_html_e('Address','mkdf-real-estate');?></h5>
			<div class="mkdf-membership-address-field"  data-country="" data-lat-field="property_latitude" data-long-field="property_longitude" id="property_full_address">
				<div class="mkdf-field-desc">
					<h5><?php esc_html_e('Full Adress','mkdf-real-estate'); ?></h5>
				</div>
				<div class="mkdf-section-content">
					<input type="text" class="form-control mkdf-input mkdf-form-element" name="property_full_address" value="" placeholder="<?php esc_html_e('Enter a location','mkdf-real-estate'); ?>" autocomplete="off">
					<div class="map_canvas"></div>
					<a id="reset" href="#" style="display:none;"><?php esc_html_e( 'Reset Marker', 'mkdf-real-estate' ); ?></a>
				</div>
			</div>
			<table>
<tbody>
<tr>
<td><div class="mkdf-membership-input-holder mkdf-membership-address-elements">
				<label for="property_latitude"><?php esc_html_e( 'Latitude', 'mkdf-real-estate' ); ?></label>
<input class="mkdf-membership-input"  data-geo="lat" type="text" name="property_latitude" id="property_latitude" value="">
</div></td>
<td><div class="mkdf-membership-input-holder mkdf-membership-address-elements">
<label for="property_longitude"><?php esc_html_e( 'Longitude', 'mkdf-real-estate' ); ?></label>
<input class="mkdf-membership-input" data-geo="lng" type="text" name="property_longitude" id="property_longitude" value="">
</div></td>
</tr>
</tbody>
</table>

<table>
<tbody>
<tr>
<td><div class="mkdf-membership-input-holder">
<label for="property_simple_address"><?php esc_html_e( 'Simple Address', 'mkdf-real-estate' ); ?></label>
<input class="mkdf-membership-input" type="text" name="property_simple_address" id="property_simple_address" value="">
</div></td>
<td><div class="mkdf-membership-input-holder">
<label for="property_zip_code"><?php esc_html_e( 'Property ZIP Code', 'mkdf-real-estate' ); ?></label>
<input class="mkdf-membership-input" type="text" name="property_zip_code" id="property_zip_code" value="">
</div></td>
</tr>
</tbody>
</table>
	


		


<h5><?php esc_html_e('Media','mkdf-real-estate');?></h5>
<div class="mkdf-membership-gallery-holder">
<label for="property_image_gallery"><?php esc_html_e( 'Gallery Images', 'mkdf-real-estate' ); ?></label>
<ul class="mkdf-membership-gallery-images-holder"></ul>
<div class="mkdf-membership-gallery-uploader">

<?php if ( mkdf_membership_theme_installed() ) {echo zuhaus_mikado_get_button_html( array( 'text'      => esc_html__( 'Upload', 'mkdf-real-estate' ),'custom_class' => 'mkdf-membership-gallery-upload') ); } else {echo '<a itemprop="url" href="#" target="_self" class="mkdf-btn mkdf-btn-medium mkdf-btn-solid mkdf-membership-gallery-upload">

<span class="mkdf-btn-text">' . esc_html__( 'Upload', 'mkdf-real-estate' ) . '</span></a>'; } ?>

<input class="mkdf-membership-gallery-upload-hidden" type="file" name="property_image_gallery" id="property_image_gallery" value="" multiple>
</div>
</div>




<div class="mkdf-membership-input-holder">
				<label for="property_video_type"><?php esc_html_e( 'Video Service', 'mkdf-real-estate' ); ?></label>
				<div class="mkdf-grid-row">
					<div class="mkdf-grid-col-12">
						<select name="property_video_type" id="property_video_type">
							<option value="social_networks" selected="selected"><?php esc_html_e('Video Service','mkdf-real-estate'); ?></option>
							<option value="self"><?php esc_html_e('Self Hosted','mkdf-real-estate'); ?></option>
						</select>
					</div>
				</div>
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="property_video_link"><?php esc_html_e( 'Enter video URL (if self hosted, enter MP4 format)', 'mkdf-real-estate' ); ?></label>
				<input class="mkdf-membership-input" type="text" name="property_video_link" id="property_video_link"
				       value="">
			</div>
			<div class="mkdf-membership-gallery-holder">
				<label for="property_video_image"><?php esc_html_e( 'Video Image', 'mkdf-real-estate' ); ?></label>
				<ul class="mkdf-membership-gallery-images-holder"></ul>
				<div class="mkdf-membership-gallery-uploader">
					<?php 
					if ( mkdf_membership_theme_installed() ) {
						echo zuhaus_mikado_get_button_html( array(
							'text'      => esc_html__( 'Upload', 'mkdf-real-estate' ),
							'custom_class' => 'mkdf-membership-gallery-upload'
						) );
					} else {
						echo '<a itemprop="url" href="#" target="_self" class="mkdf-btn mkdf-btn-medium mkdf-btn-solid mkdf-membership-gallery-upload"><span class="mkdf-btn-text">' . esc_html__( 'Upload', 'mkdf-real-estate' ) . '</span></a>';
					} ?>
					<input class="mkdf-membership-gallery-upload-hidden" type="file" name="property_video_image" id="property_video_image"
					       value="">
				</div>
			</div>
			<div class="mkdf-membership-input-holder">
				<label for="property_virtual_tour"><?php esc_html_e( 'Virtual Tour Core', 'mkdf-real-estate' ); ?></label>
				<textarea class="mkdf-membership-input" name="property_virtual_tour" id="property_virtual_tour" rows="5"></textarea>
			</div>
			<div class="mkdf-membership-gallery-holder">
				<label for="property_attachment"><?php esc_html_e( 'Attachment', 'mkdf-real-estate' ); ?></label>
				<ul class="mkdf-membership-gallery-images-holder"></ul>
				<div class="mkdf-membership-gallery-uploader">
					<?php 
					if ( mkdf_membership_theme_installed() ) {
						echo zuhaus_mikado_get_button_html( array(
							'text'      => esc_html__( 'Upload', 'mkdf-real-estate' ),
							'custom_class' => 'mkdf-membership-gallery-upload'
						) );
					} else {
						echo '<a itemprop="url" href="#" target="_self" class="mkdf-btn mkdf-btn-medium mkdf-btn-solid mkdf-membership-gallery-upload"><span class="mkdf-btn-text">' . esc_html__( 'Upload', 'mkdf-real-estate' ) . '</span></a>';
					} ?>
					<input class="mkdf-membership-gallery-upload-hidden" type="file" name="property_attachment" id="property_attachment"
					       value="">
				</div>
			</div>
			
							<input type="hidden" name="property_package_meta" value="<?php echo mkdf_re_get_user_current_package(); ?>"/>
			<?php
			if ( mkdf_membership_theme_installed() ) {
				echo zuhaus_mikado_get_button_html( array(
					'text'      => esc_html__( 'CREATE PROPERTY', 'mkdf-real-estate' ),
					'html_type' => 'button',
					'custom_class' => 'add-property-button',
					'custom_attrs' => array(
						'data-updating-text' => esc_html__('CREATING PROPERTY', 'mkdf-real-estate'),
						'data-updated-text' => esc_html__('PROPERTY CREATED', 'mkdf-real-estate'),
					)
				) );
			} else {
				echo '<button type="submit">' . esc_html__( 'CREATE PROPERTY', 'mkdf-real-estate' ) . '</button>';
			}
			wp_nonce_field( 'mkdf_validate_add_property', 'mkdf_nonce_add_property' )
			?>
		</form>
		<?php
		do_action( 'mkdf_membership_action_login_ajax_response' );
		?>
	</div>
</div>
<?php } ?>

That seems to be all the PHP to draw the form. What I meant was for you to show the PHP that processes the form.

If there are issues, particularly with your case, javascript console should give some clues.

Are you sure you know how to look?

Even when you’re using PHP?

Yes, because you can see the exact server request & response & headers (network tab - not strictly js console)
If you use PHP Console, you can even directly log php errors & warnings to javascript console, but thats beside the point.

This & I admit I presumed that there is heavier javascript use in the uploader, multiple image upload usually has heavy use of js. Didnt inspect the code.

I don’t think there’s such a console. Maybe you mean to echo the error into a JavaScript console log, but you shouldn’t be doing this. You should be checking your log files from your PHP installation.

1 Like

I try every way. I do not get an error message anywhere.

To log your errors, you need to edit your php.ini file. From there, it depends on how you installed your PHP environment.

There is such a console - and it is incredibly handy, when you set it up.

It’s a server php lib coupled with Chrome plugin.

It saved my butt countless times.

https://chrome.google.com/webstore/detail/php-console/nfhmhhlpfleoednkpnnnkolmclajemef?hl=en

If you can set it up, obviously.

But I was thinking of request & response errors.

If you check php logs, you’ll probably want to also check web server logs (nginx, Apache)

(the console solution is not something you’ll want to leave in your production environment for any longer time)