tags:

views:

80

answers:

1

I'm using the PHP script below for an experiment I am conducting, however it seems to error out with the error message: "Unknown column 'time_submit109' in 'field list'" when it gets to the digit span task (around page 110). How do I resolve this error (I'm not well versed in PHP so I'm having a hard time debugging this). I think the error is related to the time_submit1 variable.

   <?php
//counter for dynamic timestamp and next_page
$counter_page = ++$counter+1;

//connect to db server
mysql_connect($host,$user,$password) or die('Unable to connect to database server<br>'.mysql_error());

    //if this is the first page of a survey
    if (!isset ($identification)) 
    //create db, if not already there
    {
    mysql_query("CREATE DATABASE IF NOT EXISTS $database"); 
    }

//select db
mysql_select_db($database) or die('Unable to select database<br>'.mysql_error());

    if (!isset ($identification)) 
    {
    //create table, if not already there
    mysql_query ("CREATE TABLE $table (identification int(9) NOT NULL auto_increment, 
    page1 TEXT, participation_date DATE, time_submit1 VARCHAR(8), ip_number VARCHAR(15), 
    browser TINYTEXT, PRIMARY KEY (identification)) TYPE=MyISAM");
    }

        //change array, so that time_submit and page are renamed dynamically
        foreach($variablen as $name=>$value)
        { 
            if ($name == "next_page") 
            { 
            $name = "page".$counter_page; 
            }
            elseif ($name == "counter") 
            {
            $name = "time_submit".$counter; 
            $value = date("G:i:s"); 
            }
        $newarray2[$name]=$value; 
        } 

    $variablen = $newarray2; 

        //for each line in the array of submitted variables do the following (traverse array)
        foreach($variablen as $name=>$value) 
        {    
        //modify table step by step (add colums according to html input)
        mysql_query ("ALTER TABLE $table ADD $name VARCHAR(255)");
         }

        if (!isset ($identification))         
        {
        //insert new record into db table (into the referer field) and thus generate identifcation (new record)
        mysql_query("INSERT INTO $table (page1, participation_date, time_submit1, ip_number, browser) 
        VALUES ('$referer', '".date("Y-m-d")."', '".date("G:i:s")."', 
        '".$_SERVER['REMOTE_ADDR']."', '".$_SERVER['HTTP_USER_AGENT']."')")or die('Unable to insert into table!<br>'.mysql_error()); 
        //grab last value of auto-increment variable "identification" to be used as identifier
        $identification = mysql_insert_id(); 
        }

        //for each line in the array of submitted variables do the following
        foreach($variablen as $name=>$value)     
        {
        //update db table step by step
        mysql_query("UPDATE $table SET $name='".mysql_real_escape_string($value)."' WHERE identification=$identification") or die('Unable to update table1<br>'.mysql_error()); 
        }

    //close connection
    mysql_close();

    //if this is the last html page: feedback for the participant
    if (!isset ($next_page)) 
    {
    echo $thank_you_text; 
    }

    //if questionnaire consists of still another html page
    else
    { 
    //call up next HTML page and pass on ID and counter
    echo "<html><head></head><body onLoad=\"javascript:location.replace('".$next_page."?op56=".$identification."&nr93=".$counter."')\">
    <a href=\"".$next_page."?op56=".$identification."&nr93=".$counter."\">Next Page</a></body></html>"; 
    //manual forwarding
    //echo "<html><head></head><body><a href=\"".$next_page."?op56=".$identification."&nr93=".$counter."\">Next Page</a></body></html>"; 
    }
?>
A: 

Not really a solution but the problem is pointing out to the fact that you are referencing a field name that is not part of the table. Check the arrays and make sure that the field names do exist in the tables

1900TDiDi
I think this is actually leading me down the path. I was concerned about creating another column since I would have to do so for every subsequent column but it lead me to discover the root cause may be this (http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html). Considering a large number of my columns are varchar(255) do you think this could be the cause? If so should I reduce the varchar count?
Victor
Fixed the problem! I changed ALTER TABLE $table ADD $name VARCHAR(255) to ALTER TABLE $table ADD $name TEXT
Victor