Csv Importer > Includes / Javascript / Select Db.js

Questions? Need Help? Want to share? » PHP Forum
Script Name:
Csv Importer

Download:
csv-importer.zip

Category:
Database Tools

Archive Content:

Csv Importer

Csv Importer > Import Rules

Csv Importer > Includes > Css

Csv Importer > Includes > Images

Csv Importer > Includes > Javascript

Csv Importer > Includes > Php

Csv Importer > Includes > Php > Stages

Csv Importer

Select Db.js:


// This JavaScript does the magic on the select_db stage.
// It builds the existing tables combo boxes and the new table options.

// Abbreviate document reference
var doc = document;

// Rename sub-elements
var div =    "workarea";
var form = doc.form1;


// Functions start here:  -->

function CopyColumnHeaders() {
    var e;
    var fieldValue;
    var i;
    var msg = "";
    
    // Reg-exps: valid field names
    var regexp_deleteChars = /\W|^\s|\s$/g;
    var regexp_numStart = /^\d/;
    var regexp_underscoreChars = /-| /g;
    
    // Reg-exps: common field names
    var regexp_id = /^id$/i;
    var regexp_price = /price/i;
    
    for (i = 0; i < numOfCols; i++) {
        e = doc.getElementById("fieldName0" + i);

        fieldValue = dataPreviewArray[0][i];
            fieldValue = fieldValue.replace(regexp_deleteChars,  "");
            if (regexp_numStart.test(fieldValue)) fieldValue = "_" + fieldValue;
            fieldValue = fieldValue.replace(regexp_underscoreChars,  "_");
        
        if (fieldValue != dataPreviewArray[0][i]) msg += "\n   " + dataPreviewArray[0][i] + " -> " + fieldValue;

        e.value = fieldValue;
        
        if (regexp_price.test(fieldValue)) {
            e = doc.getElementById("fieldType0" + i);
            e.value = "float(5, 2)";
            e = doc.getElementById("fieldExtras0" + i);
            e.value = "not null";
        } else if (regexp_id.test(fieldValue)) {
            e = doc.getElementById("fieldExtras0" + i);
            e.value = "not null primary key";
        } else {    
            e = doc.getElementById("fieldExtras0" + i);
            e.value = "not null";
        }
    }
    
    if (msg != "") alert("The following columns have been altered to ensure they're compatible in MySQL:" + msg);
}


function CreateForm_existing() {
    doc.form1.stage.value = "import_setup";

    // Empty workarea
    EmptyWorkarea(div);
    
    var workarea = doc.getElementById(div);
    
    // Declare vars
    var freeVar;
    var i;
    var a_href;
    
    var table = _table.cloneNode(true);  // Create table
    var tbody = _tbody.cloneNode(false);  // Create tbody
    
    var row1 = _tr.cloneNode(false);    // Row for database
    var cell11 = _td.cloneNode(false);    // Cell for words
    var cell12 = _td.cloneNode(false);    // Cell for combo
    
    var text1 = doc.createTextNode("Select database: ");
    var combo1 = _select.cloneNode(false);    // SELECT control for database
        combo1.setAttribute("name",  "dbName");
        combo1.attachEvent("onchange",  GetTables);
        combo1.options[combo1.length] = new Option("Select database",  "");  // Add "Select database option"
    
    for (i = 0; i < mysqlDatabaseArray.length; i++) {
        combo1.options[combo1.length] = new Option(mysqlDatabaseArray[i],  mysqlDatabaseArray[i]);  // Add databases to options of SELECT control
    }
    
    row2 = _tr.cloneNode(false);    // Row for tables
    cell21 = _td.cloneNode(false);    // Cell for word
    cell22 = _td.cloneNode(false);    // Cell for combo
    
    var text2 = doc.createTextNode("Select table: ");
    var combo2 = _select.cloneNode(false);    // SELECT control for tables
        combo2.setAttribute("name",  "dbTableName");
    
    
    workarea.appendChild(table);
    table.appendChild(tbody);
    
    tbody.appendChild(row1);
        row1.appendChild(cell11);
            cell11.appendChild(text1);
        row1.appendChild(cell12);
            cell12.appendChild(combo1);
    
    tbody.appendChild(row2);
        row2.appendChild(cell21);
            cell21.appendChild(text2);
        row2.appendChild(cell22);
            cell22.appendChild(combo2);
    
    combo1.focus();
}

function CreateForm_new() {
    doc.form1.stage.value = "create_table";
    
    // Empty workarea
    EmptyWorkarea(div);
    
    // Declare vars
    var br;
    var freeVar;
    var i;
    var workarea = doc.getElementById(div);
    var z;
    

    // CREATE TABLE TABLE
    var nameTable = _table.cloneNode(false);
            nameTable.setAttribute("width",  "100%");
        var nameTbody = _tbody.cloneNode(false);    
        var nameRow1 = _tr.cloneNode(false);
                nameRow1.className = "highlight";
            var nameCell1 = _td.cloneNode(false);
                    nameCell1.colSpan = 2;
                var nameText1 = doc.createTextNode("About your new table:");
        var nameRow2 =  _tr.cloneNode(false);
            var nameCell21 = _td.cloneNode(false);
                    nameCell21.setAttribute("width",  "50%");
                var nameText2 = doc.createTextNode("To which database should your new table be added?");
            var nameCell22 = _td.cloneNode(false);
                    nameCell22.setAttribute("width",  "50%");
                var combo1 = _select.cloneNode(false);    // SELECT control for database
                    combo1.setAttribute("name",  "dbName");
                    combo1.options[combo1.length] = new Option("Select database",  "");  // Add "Select database option"
                        for (i = 0; i < mysqlDatabaseArray.length; i++) {
                            combo1.options[combo1.length] = new Option(mysqlDatabaseArray[i],  mysqlDatabaseArray[i]);  // Add databases to options of SELECT control
                        }
        var nameRow3 =  _tr.cloneNode(false);
            var nameCell31 = _td.cloneNode(false);
                var nameText3 = doc.createTextNode("What would you like to call your new table?");
            var nameCell32 = _td.cloneNode(false);
                var nameInput = _input.cloneNode(false);
                        nameInput.name = "dbTableName";
                        nameInput.type = "text";
    
    nameTable.appendChild(nameTbody);
        nameTbody.appendChild(nameRow1);
            nameRow1.appendChild(nameCell1);
                nameCell1.appendChild(nameText1);
        nameTbody.appendChild(nameRow2);
            nameRow2.appendChild(nameCell21);
                nameCell21.appendChild(nameText2);
            nameRow2.appendChild(nameCell22);
                nameCell22.appendChild(combo1);
        nameTbody.appendChild(nameRow3);
            nameRow3.appendChild(nameCell31);
                nameCell31.appendChild(nameText3);
            nameRow3.appendChild(nameCell32);
                nameCell32.appendChild(nameInput);

    // CREATE PREVIEW
    var previewTable = _table.cloneNode(true);  // Create table
            previewTable.className = "grid";
    
        var previewTbody = _tbody.cloneNode(false);  // Create tbody
            previewTable.appendChild(previewTbody);
        
        var row = _tr.cloneNode(false);
            var rowArray = new Array();
                rowArray = CreateElements(row,  true,  dataPreviewArray.length);
        
        var cell = _td.cloneNode(false);
            var cellArray = new Array();
                cellArray = CreateElements(cell,  true,  (dataPreviewArray[0].length*rowArray.length));
    
        // var input = _input.cloneNode(false);    
        // var combo = _select.cloneNode(false);
        
        for (i = 0; i < dataPreviewArray.length; i++) {
            // Add col to options of SELECT control
            //combo.options[combo.length] = new Option("Column " + (i+1),  "col" + i);
            
            if (i == 0) rowArray[i].className = "header";
            // Add row
            previewTbody.appendChild(rowArray[i]);
            
            for (z = 0; z < dataPreviewArray[i].length; z++) {
                // Add cell
                rowArray[i].appendChild(cellArray[(i*dataPreviewArray[0].length)+z]);
            
                freeVar = doc.createTextNode(dataPreviewArray[i][z]);
                cellArray[(i*dataPreviewArray[0].length)+z].appendChild(freeVar);
            }
        }

    
    // CREATE MYSQL TABLE CREATION FORM
    var mysqlCell_name = new Array();
        var mysqlCell_type = new Array();
        var mysqlCell_extras = new Array();
        
        var mysqlTable = _table.cloneNode(true);
            mysqlTable.className = "grid";
            
        var mysqlTbody = _tbody.cloneNode(false);
            mysqlTable.appendChild(mysqlTbody);

        // Create header rows and cell
        row = _tr.cloneNode(false);
            row.className = "header";
            mysqlTbody.appendChild(row);

        freeVar = _td.cloneNode(false);
        cellArray = CreateElements(freeVar,  true,  3);
            cellArray[0] = _td.cloneNode(false);
                freeVar = doc.createTextNode("Field name");
                cellArray[0].appendChild(freeVar);
                row.appendChild(cellArray[0]);
                
            cellArray[1] = cellArray[0].cloneNode(false);
                freeVar = doc.createTextNode("Field type");
                cellArray[1].appendChild(freeVar);
                row.appendChild(cellArray[1]);
                
            cellArray[2] = cellArray[0].cloneNode(false);
                freeVar = doc.createTextNode("Field extras");
                cellArray[2].appendChild(freeVar);
                row.appendChild(cellArray[2]);
        
                
        
        // Create field rows and cells
        rowArray = CreateElements(_tr,  true,  numOfCols);

        for (i = 0; i < numOfCols; i++) {
            mysqlTbody.appendChild(rowArray[i]);

            mysqlCell_name[i] = _td.cloneNode(true);
            
            freeVar = _input.cloneNode(false);    
                freeVar.id = "fieldName0" + i;    
                freeVar.name = "fieldName0" + i;    
                freeVar.size = 25;    
                mysqlCell_name[i].appendChild(freeVar);
                
            mysqlCell_type[i] = _td.cloneNode(true);
                freeVar = _input.cloneNode(false);
                freeVar.id = "fieldType0" + i;    
                freeVar.name = "fieldType0" + i;    
                freeVar.size = 12;
                mysqlCell_type[i].appendChild(freeVar);
                
            mysqlCell_extras[i] = _td.cloneNode(true);
                freeVar = _input.cloneNode(false);
                freeVar.id = "fieldExtras0" + i;    
                freeVar.name = "fieldExtras0" + i;    
                freeVar.size = 30;
            mysqlCell_extras[i].appendChild(freeVar);
            
            rowArray[i].appendChild(mysqlCell_name[i]);
            rowArray[i].appendChild(mysqlCell_type[i]);
            rowArray[i].appendChild(mysqlCell_extras[i]);
        }
    
    
    // COMPILE
    workarea.appendChild(nameTable);

    // Break
    workarea.appendChild(_br.cloneNode(false));
    workarea.appendChild(_br.cloneNode(false));
    
    // Directions
    cell = _td.cloneNode(false);
        freeVar = doc.createTextNode("Use the small preview of your file to help you create your new MySQL table.")
        cell.appendChild(freeVar);
        
        freeVar = InsertMessageTable(cell,  "100%",  "",  "highlight");
        workarea.appendChild(freeVar);

    // Break
    workarea.appendChild(_br.cloneNode(false));
    
    // Preview table
    workarea.appendChild(previewTable);

    // Break
    workarea.appendChild(_br.cloneNode(false));
    workarea.appendChild(_br.cloneNode(false));

    // Click here ... Link to "CopyColumnHeaders()"
    cell = _td.cloneNode(false);
        a_href = _a.cloneNode(false);
                a_href.href = "JavaScript:CopyColumnHeaders()";
            text = doc.createTextNode("Click here");
    a_href.appendChild(text);
    cell.appendChild(a_href);
    
    text = doc.createTextNode(" if you would like to use the column headers as the field names.");
        cell.appendChild(text);
    
    workarea.appendChild(InsertMessageTable(cell,  "100%",  "",  "highlight"));
    
    // Break
    workarea.appendChild(_br.cloneNode(false));
    
    // Create MySQL table table
    workarea.appendChild(mysqlTable);
}

function EmptyWorkarea() {
    var loDiv = doc.getElementById("workarea");

    while (loDiv.childNodes.length > 0) {
        for (var i = 0; i < loDiv.childNodes.length; i++) {
            loDiv.removeChild(loDiv.childNodes[0]);
        }
    }
}

function FieldSearch(form,  fieldName) {
    var element;
    for (var i = 0; i < form.length; i++) {
        element = form[i];
        if (element.name == fieldName) return element;
    }
}

function GetTables() {
    var cmbTable = FieldSearch(doc.form1,  "dbTableName");
    var cmbDatabase = FieldSearch(doc.form1,  "dbName");
        var db = cmbDatabase.value;
    
    for (i = cmbTable.length; i >= 0; i--) {
        cmbTable.options[i] = null;
    }
    
    cmbTable.options[0] = new Option("Select table",  "");
    
    for (i = 0; i < mysqlTableArray[db].length; i++) {
        cmbTable.options[(i+1)] = new Option(mysqlTableArray[db][i],  mysqlTableArray[db][i]);
    }
    
    cmbTable.focus();
}

function InsertMessageTable(messageCell,  tableWidth,  tableClass,  rowClass) {
    // messageCell needs to be a createElement("td") or _td.cloneNode!
    var table = _table.cloneNode(false);
        table.className = tableClass;
        table.width = tableWidth;
    var tbody = _tbody.cloneNode(false);
        table.appendChild(tbody);
        
    var tr = _tr.cloneNode(false);
        tr.className = rowClass;
        
        tbody.appendChild(tr);
        tr.appendChild(messageCell);
    
    return table;
}

function ValidateForm(form) {
    var dbTableName = FieldSearch(form,  "dbTableName");
    var e;
    var freeVar;
    var i;
    var l = form.entryMethod.length;
    var m = "";
    var regexp_invalid = /^\d|\W|\s/g;
    var regexp_testFields = /^fieldName0|dbTableName/;
    var regexp_reqFields = /^fieldName0|^fieldType0|dbTableName/;
    var v = true;
    
    for (i = 0; i < l; i++) {
        e = form.entryMethod[i];
        if (e.checked == true) {
            m = e.value;
            break;
        }
    }
    
    switch(m) {
        case "existing" :
            freeVar = FieldSearch(form,  "dbTableName");
            if (freeVar.value == "") {
                alert("No database table selected");
                v = false;
            }
        break;
        
        case "new" :
            for (i = 0; i < form.length; i++) {
                e = form[i];
                if ((regexp_reqFields.test(e.name)) && (e.value == "")) {
                    alert("Please ensure you have entered the table name,  all field names and their types.");
                    v = false;
                    break;
                } else if ((regexp_testFields.test(e.name)) && (regexp_invalid.test(e.value))) {
                    alert("Field names can only be made up of letters,  numbers and an underscore _.\t\n\nDo not start a table name or field name with a number.\nDo not use spaces.  (Use an underscore instead.)");
                    v = false;
                    break;
                }
            }
            
            freeVar = FieldSearch(form,  "dbName");
            
            if ((v == true) && (freeVar.value == "")) {
                alert("You haven't selected a target database.");
                v = false;
            }
            
            if (v == true) {
                for (i = 0; i < mysqlTableArray[freeVar.value].length; i++) {
                    if (dbTableName.value == mysqlTableArray[freeVar.value][i]) {
                        alert("A table with that name already exists.  Please try another.");
                        v = false;
                        break;
                    }
                }
            }
        break;
    }
    
    return v;
}


Other Database Tools Scripts:

WebMaster Resources Home

©RingsWorld.com