欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

同一个PHP页面可以同时有提交和获取数据的动作吗?

程序员文章站 2022-06-02 20:17:48
...
做的一个类似贴吧的效果 在主页可以显示所有的帖子 点击某个帖子跳转到这个话题帖子里面 这个话题是通过$_GET['title'];用户在主页点击哪个标题就从数据库里面查询这个帖子作者发布的内容 代码如下 html布局很乱 大家凑合看吧
问题出在最后 我弄了一个提交回复的框 通过post提交内容 但是我一写提交插入从表的代码就开始报错啊 报错的位置就是$title=$_GET['title'];这一句话 那个插入从表的代码这么写的

这个是把提交的内容插入到从表数据库的代码 不写这段代码下面那段代码正常运行 一写上这段代码就报错 报错的位置标出来了 报错内容如下 Undefined index: title in D:\wamp\www\contentpage.php on line 26
insert.php页面
$pdo=new PDO("mysql:host=localhost;dbname=t1","root","");
$stnt=$pdo->prepare("insert into reply(reid,name,content)values(:reid,:name,:content)");
$stnt->execute($_POST);
header("location:http://localhost/contentpage.php");
?>


下面是某个主题页面
contentpage.php








include "cookie.php";//显示登录的用户名

?>



$pdo=new PDO("mysql:host=localhost;dbname=t1","root","");//下面开始查询这个主题的内容
$title=$_GET['title'];//接收从主页点击的链接 点击哪个标题就查询哪个帖子 。。 。。。这里报的错 。。。。。
$stmt=$pdo->prepare("select id,title,type,name,num,site,content from blog where title=?");
$stmt->execute(array($title));
$res3=$stmt->fetchall(PDO::FETCH_ASSOC);
foreach($res3 as $v){
echo ''.$v['num'].'';//简单输出内容
}
?>






$id=$v['id'];
$pdo=new PDO("mysql:host=localhost;dbname=t1","root","");//这里也是一个输出的内容 是回复的内容
$stmt=$pdo->prepare("select id,name,content from reply where reid=?");//这个回复的内容建了一个从表 从从表里面查询的回复内容
$stmt->execute(array($id));
$res1=$stmt->fetchall(PDO::FETCH_ASSOC);
foreach($res1 as $v2){
echo $v2['name']; //简单输出一下回复内容
}
?>

//我又在下面弄了一个提交回复框 这个提交的代码是最上面那一段代码








回复讨论(解决方案)

错误提示这个 Undefined index: title in D:\wamp\www\contentpage.php on line 26
就是$title=$_GET['title'];这句话

你可以先判断一下再做呀

你可以先判断一下再做呀


怎么判断啊

if($_POST) {
//处理表单提交
}
if(isset($_GET['title'])) {
//处理定点查询
}

可以,但不建议。一般后台处理由一个独立文件去搞更好一些。

if($_POST) {
//处理表单提交
}
if(isset($_GET['title'])) {
//处理定点查询
}


我知道我提交回复后出现的问题了 因为提交回复的动作并没有$title=$_GET['title']传过来的值;这个POST的值是点开这个页面的标题时传过来的 提交回复的动作是在这个页面里面完成的 根本没有POST过来的值 所以会报错了 但是我怎么让这个一直可以查询到结果呢?

可以的。

可以的。



怎么弄啊大哥

不知道我理解的对否,听一下。
这明显是一对多的关系,提交回复的时候
你将 当前的帖子id和回复的内容得到。存入表的时候,明显可以拿到该id贴的标题,然后…继续存就可以了。
另外还可能出现另外一个,一对多,你想想吧

为什么要用title而不是用id去查?
首先要做空数据判断,比如$_GET过来的数据,$_POST过来的数据;

if (trim($_GET['title']) == '') {
//禁止操作
}

if (intval($_POST['reid']) //禁止操作
}
另外$_POST['reid']在表单什么位置提交过来的?隐藏域吗?没有看见
最后header("location:http://localhost/contentpage.php");建议这么写@header("Location:(空格)http://localhost/contentpage.php");

不知道我理解的对否,听一下。
这明显是一对多的关系,提交回复的时候
你将 当前的帖子id和回复的内容得到。存入表的时候,明显可以拿到该id贴的标题,然后…继续存就可以了。
另外还可能出现另外一个,一对多,你想想吧


回复之前可以得到帖子的id和标题的,提交回复后得不到Id和标题了 那么怎么在提交前把id这些保存起来呢?还是用别的办法呢?

为什么要用title而不是用id去查?
首先要做空数据判断,比如$_GET过来的数据,$_POST过来的数据;

if (trim($_GET['title']) == '') {
//禁止操作
}

if (intval($_POST['reid']) //禁止操作
}
另外$_POST['reid']在表单什么位置提交过来的?隐藏域吗?没有看见
最后header("location:http://localhost/contentpage.php");建议这么写@header("Location:(空格)http://localhost/contentpage.php");



已经做了if判断了 关键是提交的动作完成后根本没有接收到post传过来的值啊 所以会报错的 如果没有接收到post的值该怎么处理呢?该怎样去查询数据呢?

没人吗????????????

你用post提交,怎么用get接收呢?改成$_POST['title']。。我也是新手,不知道说的对不,对的话就给分