PHP & Magento Developer in Minnesota

Thank you for visiting my website. I’m Nick Bartlett and have over ten years professional experience as a web developer with both frontend and backend skills. I’m one of a handful of Zend PHP 5 certified engineers in Minnesota and have years of experience contracting for local and remote companies.  If you or your company needs help with any of the below areas, please contact me through this website or email nick at bartlett dot com.

  1. Object Oriented PHP 5
  2. High performance, high traffic PHP websites
  3. MySQL 5
  4. JavaScript / Jquery
  5. HTML/CSS
  6. Magento
  7. WordPress
  8. Zend Framework
  9. Yii Framework

Solved: Windows 10 updater stuck checking for updates   Recently updated !

I upgraded from windows 7 to windows 10 and the automatic windows updates never worked. It always got stuck on this screen saying “checking for updates”.
checking for updates

The fix was doing a couple things. First, download this offline update tool http://download.wsusoffline.net/ and run it as described here https://www.howtogeek.com/247380/how-to-fix-windows-update-when-it-gets-stuck/ . For me, this didn’t even work. It found and applied some updates, but there were a dozen or so that could not get downloaded and installed. However, WSUS offline update did tell me which updates were still missing. Below is the output from the program.

17:00:45.06 - Listing ids of missing updates (please be patient, this will take a while)...
21:59:37.04 - Done.
Listing ids of installed updates...
Listing update files...
Warning: Update kb3127945 (id: 15d7f98f-d025-4ea5-89aa-6fbb09a41e73) not found.
Warning: Update kb3141535 (id: 1ff05279-5627-4993-a62e-4f11ee47ad31) not found.
Warning: Update kb3127890 (id: 0db092b3-c980-4ee6-9b56-54c5790bac86) not found.
Warning: Update kb3191829 (id: dbd12cba-5172-4d0c-8b53-82bcff57f799) not found.
Warning: Update kb3191827 (id: 4c304c75-1b13-4a99-b5b5-c51cef236e66) not found.
Warning: Update kb3191830 (id: bf943a21-4c4c-400b-9fda-dde26cc8867b) not found.
Warning: Update kb4017094 (id: 633a4cc1-35c9-40b9-9714-7cf158168751) not found.
Warning: Update kb3191836 (id: a32e6e50-5224-4987-ae74-24e8698aa25b) not found.
Warning: Update kb2596904 (id: 158250e3-4ef3-47ef-acf3-908145be487a) not found.
Warning: Update kb3191895 (id: 596424f1-aa0d-4d62-bb50-9368bf96df75) not found.
Warning: Update kb3191835 (id: 2366268b-d998-4c53-94cf-f69ab4823a38) not found.
Info: Skipping update kb890830 (Malicious Software Removal Tool) due to matching black list entry.

I then went to Microsoft’s website https://www.microsoft.com/en-us/download/details.aspx?id=55067 and downloaded and installed each of these one by one. Once this was done, the updater worked again and pulled down more updates. Problem Solved.


Importing wordpress database error “Invalid default value for .. “

While moving my wordpress blog to the new Google Cloud Hosting setup, the database would not import. This is due to MySQL being setup in strict mode by default in MySQL version 5.7 . One solution on the internet is to set MySQL’s SQL_MODE to “NO_ENGINE_SUBSTITUTION”, but Google knows better and won’t let you do that for security purposes. They do provide an option https://cloud.google.com/sql/docs/mysql/flags to alter the settings and allow for invalid dates. In the drop down as pictured, select “Allow Invalid Dates”. Then your wordpress database import will work.


Prevent iPhone from zooming when entering text

The iPhone likes to zoom into form elements when entering text. This is great, but once you’re finished entering text, the zoom remains and leaves an undesirable horizontal scrollbar and generally poor user experience until (if) they figure out they need to zoom back out. The below code will prevent the zooming in the first place.

/* prevent iphones from zooming in when entering text */
@media screen and (-webkit-min-device-pixel-ratio:0) { 
	select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"] { font-size: 16px; }
}

Clean out Magento test data before launch

Before launching a site to production, or if it’s creating a copy of the website and database for development and testing purposes, you may need to clear out all customer and order information. Kudos to Geoff Jackson for this solution https://www.designhaven.co.uk/2014/08/cleanly-delete-orders-sales-customer-data-magento/ . I’ve used this a few times now and want to include it here for easy reference.

SET FOREIGN_KEY_CHECKS=0;
 
##############################
# SALES RELATED TABLES
##############################
TRUNCATE `sales_flat_creditmemo`;
TRUNCATE `sales_flat_creditmemo_comment`;
TRUNCATE `sales_flat_creditmemo_grid`;
TRUNCATE `sales_flat_creditmemo_item`;
TRUNCATE `sales_flat_invoice`;
TRUNCATE `sales_flat_invoice_comment`;
TRUNCATE `sales_flat_invoice_grid`;
TRUNCATE `sales_flat_invoice_item`;
TRUNCATE `sales_flat_order`;
TRUNCATE `sales_flat_order_address`;
TRUNCATE `sales_flat_order_grid`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sales_flat_order_payment`;
TRUNCATE `sales_flat_order_status_history`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_quote_payment`;
TRUNCATE `sales_flat_quote_shipping_rate`;
TRUNCATE `sales_flat_shipment`;
TRUNCATE `sales_flat_shipment_comment`;
TRUNCATE `sales_flat_shipment_grid`;
TRUNCATE `sales_flat_shipment_item`;
TRUNCATE `sales_flat_shipment_track`;
TRUNCATE `sales_invoiced_aggregated`;
TRUNCATE `sales_invoiced_aggregated_order`;
TRUNCATE `log_quote`;
 
ALTER TABLE `sales_flat_creditmemo_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_track` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated_order` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
 
#########################################
# DOWNLOADABLE PURCHASED
#########################################
TRUNCATE `downloadable_link_purchased`;
TRUNCATE `downloadable_link_purchased_item`;
 
ALTER TABLE `downloadable_link_purchased` AUTO_INCREMENT=1;
ALTER TABLE `downloadable_link_purchased_item` AUTO_INCREMENT=1;
 
#########################################
# RESET ID COUNTERS
#########################################
TRUNCATE `eav_entity_store`;
ALTER TABLE  `eav_entity_store` AUTO_INCREMENT=1;
 
 
##############################
# CUSTOMER RELATED TABLES
##############################
TRUNCATE `customer_address_entity`;
TRUNCATE `customer_address_entity_datetime`;
TRUNCATE `customer_address_entity_decimal`;
TRUNCATE `customer_address_entity_int`;
TRUNCATE `customer_address_entity_text`;
TRUNCATE `customer_address_entity_varchar`;
TRUNCATE `customer_entity`;
TRUNCATE `customer_entity_datetime`;
TRUNCATE `customer_entity_decimal`;
TRUNCATE `customer_entity_int`;
TRUNCATE `customer_entity_text`;
TRUNCATE `customer_entity_varchar`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `tag_properties`;
TRUNCATE `wishlist`;
TRUNCATE `log_customer`;
 
ALTER TABLE `customer_address_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `tag_properties` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_customer` AUTO_INCREMENT=1;
 
 
##############################
# ADDITIONAL LOGS
##############################
TRUNCATE `log_url`;
TRUNCATE `log_url_info`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;
TRUNCATE `report_event`;
TRUNCATE `report_viewed_product_index`;
TRUNCATE `sendfriend_log`;
TRUNCATE `log_summary`
 
ALTER TABLE `log_url` AUTO_INCREMENT=1;
ALTER TABLE `log_url_info` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;
ALTER TABLE `report_viewed_product_index` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `log_summary` AUTO_INCREMENT=1;
 
SET FOREIGN_KEY_CHECKS=1;

Composer: Requirements could not be resolved to an installable set of packages

After cleaning out the /vendor directory and running composer install, this error “Requirements could not be resolved to an installable set of packages” appeared and the process stopped. This seems to be a common and difficult issue to resolve with composer. This post from stackoverflow has a pretty good explanation on how it could be a dependency version issue http://stackoverflow.com/questions/20996767/requirements-could-not-be-resolved-to-an-installable-set-of-packages , but that wasn’t it for me as it was just working. My composer.json file included about 20 dependencies, so I removed all but 3 and installed them successfully. Then added a few more and ran composer update and repeated this process until everything was back.