Stack Exchange
Validations for CSV fields importing to MySQL
I use these codes which import CSV contents into MySQL Database.
<?php
    $databasehost = "localhost";
    $databasename = "test";
    $databasetable = "sample";
    $databaseusername ="test";
    $databasepassword = "";
    $fieldseparator = ",";
    $lineseparator = "\n";
    $csvfile = "filename.csv";
    $addauto = 0;
    $save = 1;
    $outputfile = "output.sql";


    if(!file_exists($csvfile)) {
    echo "File not found. Make sure you specified the correct path.\n";
    exit;
    }

    $file = fopen($csvfile,"r");

    if(!$file) {
    echo "Error opening data file.\n";
    exit;
    }

    $size = filesize($csvfile);

    if(!$size) {
    echo "File is empty.\n";
    exit;
    }

    $csvcontent = fread($file,$size);

    fclose($file);

    $con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
    @mysql_select_db($databasename) or die(mysql_error());

    $lines = 0;
    $queries = "";
    $linearray = array();

    foreach(split($lineseparator,$csvcontent) as $line) {

    $lines++;

    $line = trim($line," \t");

    $line = str_replace("\r","",$line);

    $line = str_replace("'","\'",$line);

    $linearray = explode($fieldseparator,$line);

    $linemysql = implode("','",$linearray);

    if($addauto)
            $query = "insert into $databasetable values('','$linemysql');";
    else
    $query = "insert into $databasetable values('$linemysql');";

    $queries .= $query . "\n";

    @mysql_query($query);
    }

    @mysql_close($con);

    if($save) {

    if(!is_writable($outputfile)) {
    echo "File is not writable, check permissions.\n";
    }

else {
    $file2 = fopen($outputfile,"w");

    if(!$file2) {
        echo "Error writing to the output file.\n";
    }
    else {
        fwrite($file2,$queries);
        fclose($file2);
    }
    }

    }

    echo "Found a total of $lines records in this csv file.\n";
?>

But i wish to do validations for some of the fields in the csv file.
For example, the second field is an email and i wish to check that the string contains "@".
May i know how/where to add in the codes for such validations?
Thanks in advance!

Are you sure you don't know where to add these validations?

Exactyl why are you doing your own csv parsing for reading? PHP has fgetcsv() which does the reading/splitting for you

I'm just a beginner in programming and php.

Using the built-in function fgetcsv(), filter_var() and the MySQL function LOAD DATA:
$handle = fopen("test.csv", "r");
$continue = true;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE && $continue) {
    // check for valid email (presuming it's in column 1)
    $continue = filter_var($data[0], FILTER_VALIDATE_EMAIL);
}
fclose($handle);

if($continue){
    // using LOAD DATA will be a lot quicker than individual queries!
    $query = "LOAD DATA INFILE '/full/path/to/test.csv'";
}


you can use a regular expression:
$lines++;
$line = trim($line," \t");
$line = str_replace("\r","",$line);
$line = str_replace("'","\'",$line);
$linearray = explode($fieldseparator,$line);
//add code for checking email string
if (preg_match("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/", $linearray[1]) === 0) {
//not a email string 
    conitnue;
}
$linemysql = implode("','",$linearray);


preg_match("/\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*/" is the code that checks whether its an email?
