How to solve “FATAL ERROR: Cannot redeclare class/function”

This error occures when you have a function or class declared more than once

Scenarios

1. I have a file with all the class declarations which I include after the header.php file. In my scenario it was not possible for me to include the class declaration file before calling the header.

Later on there was a need to access the class functions within the header file. When I included the class within the header.php file, I got this error as the class declaration happened twice.

2. In rare occasions there can be a class name declared more than once.

Solutions

1. Using  multiple includes: Class or functions file can be included multiple times.

2. Using IF statement:

 

Integrating Prestashop shopping cart with existing PHP -MySQL Authentication

Assumptions

Here we are assuming that you are using PHP – MySQL and you have an existing list of clients/users already maintained in a seperate table.

You have your own registration, login and logout mechanisms

Step 1: Prestashop cookies

First let us understand little bit about Prestashop cookies

A customer login prestashop cookie is as below

Cookie name: ps

Cookie content:id_guest%7C1%C2%A4id_customer%7C1%C2%A4customer_lastname%7CLASTNAME%C2%A4customer_firstname%7CFIRSTNAME%C2%A4logged%7C1%C2%A4passwd%7CMD5_PASSWORD%C2%A4email%7CEMAIL%C2%A4

Note: there can be some other parameters as well in the cookie but I have included only the ones which we are interested.

The cookie is ofcourse not readable. It is encrypted and decrypted using Rinjdael or Blowfish.

Apart from that there is also a SALT phrase which is added through the settings.inc.php file

Just for demonstration purposes I have removed the SALT phrase in settings.inc.php (in the config directory) as below

I disabled the cookie encryption and decryption process in Cookie.php file (in the classes directory) as shown below

Comment below lines

 

After doing the above changes, try to login again. If everything is done correctly, you should be able to login successfully. After you login the cookie generated will be readable.

Just to make the cookie bit more clear to us, let us run PHP urldecode

Here’s the output

id_guest|1¤id_customer|1¤customer_lastname|LASTNAME¤customer_firstname|FIRSTNAME¤logged|1¤passwd|MD5_PASSWORD¤email|EMAIL¤

Now this cookie is quite readable and easy to follow.

id_guest=1, id_customer=1, customer_lastname=LASTNAME, etc

Step2: Import your existing users to the prestashop customer table

Export all users from your database and include fields like memberid,firstname, lastname, username, md5(password), salutation and import it into the ps_customer table in prestashop.

Step 3: Single sign on

Once the import-export is done, achieving the single sign on is very easy

All you need to do is when a user logs in on your website apart from the usual cookie which you create, you also need to create one more cookie for the prestashop login (even better is to combine the cookie and name is as ps which might need a corresponding change in your authentication code). The format of this cookie would be same as the one obtained after the urldecode above in Step 1. Cookie name would be ps

Step 4: Enable cookie encryption

Note that we turned off all cookie encryptions in Step 1. We can turn on cookie encryption and decryption provided you are able to replicate the same through a function on your existing site when you create the cookie.

Step 5: Close all loops

A. Disable password reset through Prestashop and send users to your website password reset process and in that process make sure you update password in both the tables

B. When a new user registers make sure you add a new entry in the Prestashop table as well (ps_customer and ps_customer_group)

C. When people login on prestatshop, the form action URL can be changed so that it goes to your custom authentication code which enables you can create the necessary cookies

How to get the ID generated by the last INSERT

Many times there is a need to get the autogenerated ID from the last MySQL INSERT performed.

This ID can then be used to perform some more INSERTs particularly in different tables.

As a typical example lets assume you have members table and a seperate table to store their preference for receiving newsletter.
When a new member registers, we perform the first INSERT to add the member details in the member table.
Now our newsletter table needs the memberID generated from this insert so that we can store their preference (In case you are using their memberID as the primary key instead of the username)

They way to perform this is as below

Export data to Excel

Just write your own query within the function and call the function from anywhere in your script

 

Create a List of files within a certain directory

This function will list files and directories within a specified directory

E.g. if a directory named web contains some files like index.htm, contactus.htm and some folders like images, documents, products
The script will return

  • index.htm
  • contactus.htm
  • images
  • documents
  • products

$sortflag can be any of below
SORT_REGULAR – compare items normally (don’t change types)
SORT_NUMERIC – compare items numerically
SORT_STRING – compare items as strings
SORT_LOCALE_STRING – compare items as strings, based on the current locale.

PHP – MySQL Search on multiple columns using concat

More often there is a need to search part of a text in multiple columns and the search is based on a single keyword text box

For e.g. in a users table first name and last name can be stored in seperate columns

Let’s assume a user named Joe Smith stored in a users table with

first _name => Joe

last_name => Smith

If we have a single keyword text box search and if someone types “Joe Smith” and performs a search, a simple search query as below would give no results

For the query to give correct results it needs to be modifed as below