mysql中。定义userid int(10) default null,这样是不会影响提交的,当然userid不能为主键,不然也是会影响提交的。定义带时间的
lastposttime datetime default '0000-00-00 00:00:00',

解决方案 »

  1.   

    可我这儿发现userid int(10) default null,
    会影响提交呀。我再仔细看看。谢谢你的带时间定义。希望不填写时间的时候不会影响提交。
      

  2.   

    $query[]="CREATE TABLE bbs (
    id int(10) unsigned NOT NULL auto_increment,
    userid int(10) default null,
    username varchar(100) default null,
    sex int(10),
    email varchar(100) default null,
    phone varchar(100) default null,
    topic varchar(100) NOT NULL default '',
    content mediumtext default null,
    lastposttime datetime default '0000-00-00 00:00:00',
    ipaddress varchar(16) default null,
    PRIMARY KEY (id)
    )";我的mysql数据库这么定义。
    现在其他不填写,只要日期和userid填写,能正常提交。
    但只要日期或者userid不填写,就会提交不进去。请高人指点。
      

  3.   

    <?php
    $sql = "INSERT INTO bbs 
    (userid,username,sex,email,phone,topic,content,lastposttime,ipaddress)
    VALUES 
    ('$userid','$username','$sex','$email','$phone','$topic','$content','$lastposttime','$ipaddress')";
    mysql_db_query($dbname,$sql);
    echo "录入成功. 3秒钟后将自动返回刚才的页面.<br>\n";
    ?>录入我也贴上来了。就这么简单的。应该没有其他影响因素了吧!
      

  4.   

    你的userid是int型的啊!你输入个空字符串当然出错了。
      

  5.   

    应该不是错误,mysql会自动转换一些类型的。
    有没有显示什么错误啊?自己捕捉一下错误看看。
      

  6.   

    mysql_db_query($dbname,$sql); 改成:mysql_select_db($dbname); //<--如上面有这句了就不用加。因为下面我用的是mysql_query()
    if(! mysql_query($sql)) {
      print mysql_error();
      exit();
    }
      

  7.   

    Gdj(陈水.智商只有129.非卖品) (
    请问,userid这种关联id的字段,再mysql中应该设置城什么型号的?
      

  8.   

    谢谢rardge(Rardge)用你的方式,我看到了错误提示。但现在我想解决的是userid应该设置成什么类型。还有,设置成,如果不填写,也不会影响整个提交过程。
    怎么解决?谢谢。
      

  9.   

    if(! mysql_db_query($dbname,$sql)) {
      print mysql_error();
      exit();
    }
    这么判断也可以。一步省事。还是老问题。数据类型设置问题。
    想解决的是userid应该设置成什么类型。还有,设置成,如果不填写,也不会影响整个提交过程。
    怎么解决?谢谢。
      

  10.   

    错误提示是什么?
    从你提供的东西来看,那个字段本来就是填不填都无所谓的。
    你有没有使用外键约束之类的?造成这个表的userid字段不提供则不能添加记录?
      

  11.   

    Out of range value adjusted for column 'userid' at row 1Incorrect datetime value: '' for column 'lastposttime' at row 1没有任何其他什么设置约束什么的。暂时还不会再mysql中设置什么。
    只是通过创建数据库脚本创建数据库。已经贴出来的。
    还有一个就是提交写入代码。也贴出来了。。加入了。if(! mysql_db_query($dbname,$sql)) {
      print mysql_error();
      exit();
    }最上面英文是出错提示
      

  12.   

    奇怪了,好像是说超过范围了。但是我这里就没问题,难道是版本问题?
    这个问题看来我无能为力了,要不你重新建表看看。
    另外,最好int型的字段上不要加引号,就是这样:
    VALUES 
    ($userid,'$username',$sex,'$email','$phone','$topic','$content','$lastposttime','$ipaddress')";userid 既然是关联其他表的自动增值的 id 字段,那么就声明为 userid int unsigned not null 好了。
    时间字段,也可以使用 lastposttime timestamp 这样,好处是你insert数据的时候,这个字段可以跳过,它会自动把服务器上当前时间写入。比如:
    $sql = "INSERT INTO bbs 
    (userid,username,sex,email,phone,topic,content,ipaddress)
    VALUES 
    ($userid,'$username',$sex,'$email','$phone','$topic','$content','$ipaddress')";
    缺点是如果是用update来更新一条记录,该记录的这个字段(其实是第一个timestamp类型的字段)也会自动更新为当前时间,当然可以通过在 update 语句中多加一个 set lastposttime = lastposttime 这样来抑制它。挺有用的一个类型。
      

  13.   

    你最好把$userid的值打印出来看看
      

  14.   

    哦。忘了说系统配置了。
    我的是IIS,php5,mysql5,ZendStudioClient-4.0.2,难道不同的软件版本配置,还会对程序产生这么大的影响?
      

  15.   

    没有办法,只能用金山词霸来对付你了,:)Out of range value adjusted for column 'userid' at row 1
    在射程外价值调整过的为了列'userid'在行1Incorrect datetime value: '' for column 'lastposttime' at row 1
    错误的datetime价值: ''为了列'lastposttime'在行1对于userid字段,你的建表语句不规范
    userid int(10) default null,
    应解释为
    userid int(10) NOT NULL default NULL,
    这样就冲突了
    估计mysql也是这样理解的,你可以在pnpmyadmin中看一下
    我想你的意思应该是
    userid int(10) NULL,对于lastposttime,用语mysql不能将空串转化成日期,所以错了有初值的字段不必在字段表中出现,但出现时应有正确的格式datetime类型的字段可以在语句中使用now()函数
      

  16.   

    userid的确是关联其他表中的,但,需要考虑的是,如果没有注册的用户提交,那么userid我想提交为null。而不是其他什么数字,包括0。刚才用了$userid int不茄""的方法。现在没有提交userid数据的时候,出现错误提示了。
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2','0','','','22','22','2005-09-27','')' at line 4但我现在就是想跟文本提交的时候一样,没有userid数据的时候,它是空值。不影响提交。
      

  17.   

    我用userid int(10) NULL,建库。
    不填写的时候还是出现出错提示
    Out of range value adjusted for column 'userid' at row 1天啦。datetime我可以用now()函数。
    但考虑到订机票系统,选择日期的时候,要考虑日期选择后,但时间故意修改错误,再提交,会出现什么状况。如果不提交会出现什么状况。
    我现在设想,不提交,日期字段就为空。以后对我统计查询觉得看起来舒服点。
      

  18.   

    另外个人感觉int字段,加入''何不加入,好像都可以正确录入。
    比asp的感觉方便点。
      

  19.   

    在我这里,用楼主提供的语句执行是没有问题的。
    对于userid字段,我试验过提交 空字符串、字符串、数字、超大数字比如12个9,结果是都能够提交执行,前两项mysql自动转换为数值0,在int范围内的数字就照收,超过范围的就直接使用了int能表示的最大值,反正是没有出现过楼主说的那种错误提示。
    对于日期字段,只要不是合法日期提交,都是显示0000-00-00 00:00:00,也不会出错。
    这些好像都是mysql能处理的,因为它本身有一定的默认转换功能。所以楼主的问题我实在不明白,还是怀疑是不是版本和系统上的问题。
      

  20.   

    测试方法,你直接在输入INSERT INTO bbs 
    (userid,username,sex,email,phone,topic,content,lastposttime,ipaddress)
    VALUES 
    ('','$username','$sex','$email','$phone','$topic','$content','','$ipaddress');这样看一下会不会出错,
    如果不会,说明是你的程序有问题。
    如果会,则说明是mysql的问题,跟你的程序无关。ps:以上语句在我的机上可以通过(mysql 4.0)
      

  21.   

    引用------------------------------------------------------------------------
    userid的确是关联其他表中的,但,需要考虑的是,如果没有注册的用户提交,那么userid我想提交为null。而不是其他什么数字,包括0。
    ----------------------------------------------------------------------------那你必须写
    insert (userid,.......) values (null,.......)

    insert (.......) values (.......) #没有userid字段
    这样才能提交为null,非数字型否则会自动转换成0。
    至于填写超出范围的数会报错,有些版本是这样的。
      

  22.   

    $userid=($userid)?$userid:null;你可以在最前面加上这句试试。
      

  23.   

    写错了,必须用字符才行。
    $userid=($userid)?$userid:"null";
      

  24.   

    十分感谢 Gdj(陈水.智商只有129.非卖品) 
    需要再前面判断,再根据需要负值。
    我用的是mysql5,php5,iis。或许软件版本所至吧。
    再次感谢楼上所有关注的人们。最后40分了。也许不能照顾到所有人。
    但只要参与都给于分数。
    谢谢大家。
    第一次参与php的学习。