Heim  >  Artikel  >  Backend-Entwicklung  >  关于PHP更新数据库

关于PHP更新数据库

WBOY
WBOYOriginal
2016-06-23 14:12:09811Durchsuche

本帖最后由 UR_Not_Alone 于 2013-06-03 11:55:36 编辑

刚开始学PHP遇到一些基础问题请大家帮忙
从网上看的一个例子,做了下练习。
我填好页面内容点击提交时,页面默认打开insert.php,而不是执行insert.php中代码插入数据库是怎么回事啊。
代码如下
Html页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档</title></head><body><form action="insert.php" method="post" target="win">请输入新闻的title:<input type="text" name="title" />请选择新闻类型:<select name="c_id"><option value="1">体育</option><option value="2">娱乐</option></select><br />请输入新闻的content:<br /><textarea cols="60" rows="15" name="content"></textarea><input type="submit" value="提交" /></form></body></html>


insert.php
<?phpinclude("connect_mysql.php");$q = "insert into new(title,content,time,news_cate_id) values('".$_POST["title"]."','".$_POST["content"]."',now(),".$_POST["c_id"].")";mysql_query($q);if(mysql_affected_rows()>0) echo "xinwentianjiachenggong!";?><hr /><a href="add_news.php" target="win">fanhuijixutianjiaxinwen</a>


connect_mysql.php
<?phpfunction mysql_open(){$mysql_servername="localhost"; //$mysql_username="root";$mysql_password="11111";$mysql_dbname="new";$conn=mysql_connect($mysql_servername ,$mysql_username ,$mysql_password);      mysql_query("set names UTF8"); //UTF8      mysql_select_db($mysql_dbname , $conn);	  return $conn;}?>


另外,如果我想实现上传图片的功能该怎么做啊,求提供思路,如果有人有例子最好了,谢谢大家

回复讨论(解决方案)

include("connect_mysql.php");
mysql_open();

include("connect_mysql.php");
mysql_open();
不行啊,还是点击提交后,就打开insert.php,没有执行插入操作。。。

就打开insert.php 是什么意思?

楼主确认php环境没问题???

没看见楼主的提交按钮有onclick事件啊?

哎 看了那么多人的代码,还是lz的最好理解!!!!

就打开insert.php 是什么意思?
打开的意思就是,会用系统默认的php文件编辑器打开insert.php,例如,我这默认使用Emeditor打开。。。。。。

php环境配好了没有,文件有没有放入web服务器根目录下,怎么访问的?

php环境配好了没有,文件有没有放入web服务器根目录下,怎么访问的?
php环境配置应该没问题,我用的是eclipse_php,文件放在D:\Program Files\Apache Software Foundation\Apache2.2\htdocs\TestInsert(TestInsert是工程名),然后访问http://localhost/TestInsert/Page.html填写数据后,点击提交,弹出一个http://localhost/TestInsert/insert.php页面,但是数据库里面什么都没变啊。


就打开insert.php 是什么意思?
打开的意思就是,会用系统默认的php文件编辑器打开insert.php,例如,我这默认使用Emeditor打开。。。。。。
这个说错了,无视吧,应该是弹出一个http://localhost/TestInsert/insert.php页面,IE打开的

弹出下载页面说明php环境没有搭配成功

弹出下载页面说明php环境没有搭配成功
我觉得应该不是环境的问题,如果我直接把插入语句写在一个php中(值直接写好),是可以插入数据到数据库的,但是这种从页面获取的就不行。

弹出下载页面说明php环境没有搭配成功
而且我检查过了,PHP5,Mysql,Apache以及eclipse的安装,没看出啥问题。。。

,问题出现在链接数据库上,
链接数据库函数有问题,注释掉下面的函数部分就可以直接执行了!
//function mysql_open()
//{
$mysql_servername="localhost"; //
$mysql_username="root";
$mysql_password="11111";
$mysql_dbname="new";
 
$conn=mysql_connect($mysql_servername ,$mysql_username ,$mysql_password);
      mysql_query("set names UTF8"); //UTF8
      mysql_select_db($mysql_dbname , $conn);
   //   return $conn;
//}

,问题出现在链接数据库上,
链接数据库函数有问题,注释掉下面的函数部分就可以直接执行了!
//function mysql_open()
//{
$mysql_servername="localhost"; //
$mysql_username="root";
$mysql_password="11111";
$mysql_dbname="new";
 
$conn=mysql_connect($mysql_servername ,$mysql_username ,$mysql_password);
      mysql_query("set names UTF8"); //UTF8
      mysql_select_db($mysql_dbname , $conn);
   //   return $conn;
//}
你这个方法跟1楼是一样的,不是这个问题。

<?php$con = mysql_connect("localhost","root","11111");if (!$con)  {  die('Could not connect: ' . mysql_error());  }mysql_select_db("new", $con);$sql1 = "select max(id) from new";if(!mysql_query($sql1)){	die('Error: '.mysql_error());}$result = mysql_query($sql1);$id = mysqli_fetch_assoc($result);$sql="INSERT INTO new (id,title, content, time, news_cate_id)VALUES('".$id."','".$_POST["title"]."','".$_POST["content"]."',now(),".$_POST["c_id"].")";//('2','".$_POST["title"]."','".$_POST["content"]."',now(),".$_POST["c_id"].")";//将ID直接写成2可以更新,但我想实现自动根据数据库中最大ID(如果有更好的办法请大家说一下)更新//但是这里得到的ID却不是“1”“2”这样的值,谁知道怎么回事。if (!mysql_query($sql,$con))  {  die('Error: ' . mysql_error());  }echo "1 record added";//mysql_close($con)//$q = "insert into new (title,content,time,news_cate_id) values('".$_POST["title"]."','".$_POST["content"]."',now(),".$_POST["c_id"].")";//mysql_query($q);//if(mysql_affected_rows()>0) echo "xinwentianjiachenggong!";?><hr /><a href="Page.html" target="win">fanhuijixutianjiaxinwen</a>


我将代码改成上面的样子通过错误信息发现是因为Id字段没有填导致插入失败,上面注释的部分还有问题。希望大家多帮忙,如果大家觉得分数不够我可以追加,只是觉得再开帖子麻烦了。

$result = mysql_query($sql1);
这样得到的result也不是数据库中存的1、2、3这样的值,然后导致更新失败,提示Error: Incorrect integer value: '' for column 'id' at row 1,想问问大家怎么样才能通过查询得到正确的id,或者result值然后插入数据库呢。

如果 id 是主键,那么因为主键不能重复,你向其赋 max(id) 显然是不对的!应为 max(id) + 1
如果 id 是主键,且是自增的,那么就无需向 id 赋值
如果 id 不是主键,但不允许为空,那么不向 id 赋值就是错误的

其实只要打印出 mysql_error() 的结果,就一切明了了

$id = mysql i_fetch_assoc($result); //连接用mysql,这里又用mysqli,肯定要错了,且返回的是一个数组
至少需要这样
 
$sql="INSERT INTO new (id,title, content, time, news_cate_id)
VALUES
('".$id['max(id)']."','".$_POST["title"]."','".$_POST["content"]."',now(),".$_POST["c_id"].")";

如果你的id是主键,插入同一个id是会出错的。

如果 id 是主键,那么因为主键不能重复,你向其赋 max(id) 显然是不对的!应为 max(id) + 1
如果 id 是主键,且是自增的,那么就无需向 id 赋值
如果 id 不是主键,但不允许为空,那么不向 id 赋值就是错误的

其实只要打印出 mysql_error() 的结果,就一切明了了
如果 id 是主键,那么因为主键不能重复,你向其赋 max(id) 显然是不对的!应为 max(id) + 1这个我知道,只不过上面写得吧$id++;那句漏掉了。
id是主键,怎么设置主键自增啊。是不是在建表的时候哪里能设置啊?

我数据库的sql如下,哪里不对么?

/*Navicat MySQL Data TransferSource Server         : testSource Server Version : 50153Source Host           : localhost:3306Source Database       : newTarget Server Type    : MYSQLTarget Server Version : 50153File Encoding         : 65001Date: 2013-06-04 14:21:53*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `new`-- ----------------------------DROP TABLE IF EXISTS `new`;CREATE TABLE `new` (  `id` int(11) NOT NULL,  `title` varchar(50) DEFAULT NULL,  `content` varchar(100) DEFAULT NULL,  `time` datetime DEFAULT NULL,  `news_cate_id` int(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of new-- ----------------------------INSERT INTO `new` VALUES ('1', '111', '111', '2013-06-04 09:40:29', '1');INSERT INTO `new` VALUES ('2', 'eee', 'eeee', '2013-06-04 13:28:20', '1');

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
这样的话主键就自增了对吧,但是上面对应的
$sql="INSERT INTO new (id,title, content, time, news_cate_id)
VALUES
('".$id."','".$_POST["title"]."','".$_POST["content"]."',now(),".$_POST["c_id"].")";
这部分应该怎么对应改动呢

$sql="INSERT INTO new (title, content, time, news_cate_id)
VALUES
('".$_POST["title"]."','".$_POST["content"]."',now(),".$_POST["c_id"].")";

知道了,只需要改成最初的样子就可以了,谢谢大家结贴了,结贴之前先追加点分数,以表示感谢

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn