search

Home  >  Q&A  >  body text

新手问题 - php中,$_GET中的数值能被mySQL读到么?

<?php
	include("../conn.php");
	if ($_GET[post])
	{
		$sql = "SELECT * FROM message  WHERE id = $_GET[post]";
		$query = mysql_query($sql);
		$row = mysql_fetch_array($query);
	}
	if($_POST['submit'])
		{
			$sql = "insert into reply (id,id_p,time,content) values('','$_GET[post]',now(),'$_POST[content]')";
				mysql_query($sql);
				echo "<meta http-equiv=refresh content=0";
			}

?>


$sql = "insert into reply (id,id_p,time,content) values('','$_GET[post]',now(),'$_POST[content]')";

中,id_p的值一直是0,其余的取值都正常,不知道为什么
.$_GET[post]是有值的,在这段代码上方和下方都能用,但是就在这个SQL语句当中不能用...

想了很多办法,比如在代码前面加上$a = $_GET[post],用$row[id](message表中的id其实就是$_GET[post]的值),都不读不到取值;

难道是

echo "<meta http-equiv=refresh content=0";

的问题?
怪我咯怪我咯2896 days ago636

reply all(4)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 13:11:15

    我觉得你最好定义一个变量给GET过来的值,因为我以前有试过,貌似在SQL语句里头赤果果的写$_GET这样的是行不通的,个人愚见。
    PS:里头代码低级错误貌似好多额...建议改改在测试...

    reply
    0
  • 迷茫

    迷茫2017-04-10 13:11:15

    把sql中的$_GET[post]改成{$_GET['post']}

    另外,你得加强下编码习惯的培养,这段代码的缩进让人看着抓狂,还有这句echo "<meta http-equiv=refresh content=0";输出的html居然没有用>闭合,属性也没有用双引号。。。需要修炼下程序员的气质

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 13:11:15

    首先,你要搞清楚,mysql不会执行任何页面提交过来的任何值;
    其次,按你贴的代码的意思,php会解析你页提交过来的值,生成sql 语句;
    再次,你的代码书写的令人相当难受,乱缩进,毫无层次感;
    再次,请确定你的页面的提交方式,到底是 GET,还是 POST,如果不确定,请直接用 REQUEST,一会 GET,一会 POST ,真是别扭啊;
    最后,请你在""里面写复杂变量时,记得加上{},如{$POST['post']}

    补充:
    确认一下你页面提交过来的参数是否是post
    你可以在贴出的这个代码的页面打印出页面提交过来的所有值,在开头部份添加以下代码:
    echo <xmp>;
    var_dump($_REQUEST);
    echo </xmp>;

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 13:11:15

    你的字段用了tinyint,tinyint是从-128~127的,会不会溢出了?
    还有,其实本质上int(10)和int(1)没区别,所以一般不是那种true or false或者是status类型的字段,都不用int(1),你给一个int(10)就好了。

    执行这个把表结构改一下

    $sql = "alter table reply change id id int(10) NOT NULL AUTO_INCREMENT";
    mysql_query($sql) or die(mysql_error());
    $sql = "alter table reply change id_p id_p int(10) NOT NULL";
    mysql_query($sql) or die(mysql_error());

    然后把代码改成这样,把所有信息都打出来看看。

    if($_POST['submit'])
    {
      $sql = "insert into reply (id_p,time,content) values('{$_GET['post']}',now(),'{$_POST['content']}')";
      echo $sql;
      mysql_query($sql) or die(mysql_error());
      $sql = "select * from reply order by id DESC limit 1";
      $query = mysql_query($sql);
      $result = mysql_fetch_array($query);
      var_dump($result);
    //  echo "<meta http-equiv=refresh content=0 />";
    }

    sql的问题有这么几个:

    • 既然id已经是自增主键了,那么就不用在sql里显式插入了
    • 双引号里的变量最好用{}括起来
    • mysql_query要做错误处理,比如 or die(mysql_error()) 这种用法

    reply
    0
  • Cancelreply