PHP を学習し始めたところ、いくつかの基本的な問題に遭遇しました。助けてください
<!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>
<?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>
<?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") );
いいえ、クリックしましょう 送信後、insert.php が開き、挿入操作は実行されません。 。 。
insert.php を開くだけです。これはどういう意味ですか?
作者はphp環境に問題がないことを確認しましたか? ? ?
作者の送信ボタンに onclick イベントがあるのを見ませんでしたか?
やあ、たくさんの人のコードを読んだ結果、lz のコードが一番理解しやすいですね! ! ! !
insert.php を開くだけです。これはどういう意味ですか?
開くとは、insert.php がシステムのデフォルトの php ファイル エディターで開かれることを意味します。たとえば、私はデフォルトで Emeditor を使用して開きます。 。 。 。 。 。
PHP 環境はセットアップされていますか? ファイルは Web サーバーのルート ディレクトリに配置されていますか? アクセス方法は?
PHP 環境はセットアップされていますか? ファイルは Web サーバーのルート ディレクトリに配置されていますか? アクセス方法は?
eclipse_php を使用している PHP 環境の設定には問題はないはずです。ファイルは D:Program FilesApache Software FoundationApache2.2htdocsTestInsert (TestInsert はプロジェクト名です) に配置されており、http://localhost/TestInsert/Page にアクセスします。 html にデータを入力して「送信」をクリックすると、http://localhost/TestInsert/insert.php ページが表示されますが、データベースには何も変更がありません。
開くとは、insert.php がシステムのデフォルトの php ファイル エディターで開かれることを意味します。たとえば、私はデフォルトで Emeditor を使用して開きます。 。 。 。 。 。
これは間違っています。無視してください。これは、IE で開かれた http://localhost/TestInsert/insert.php ページであるはずです
ポップアップのダウンロード ページは、PHP 環境が正常に一致していないことを示しています
ダウンロードページのポップアップはPHPの環境が一致しませんと表示されますが、環境的には問題ないと思います(値を直接書きます)。データベースには保存されますが、ページから取得することはできません。
PHP 環境が正常に一致していないことを示すダウンロード ページがポップアップ表示されます
そして、PHP5、Mysql、Apache、Eclipse のインストールを確認しましたが、問題はありません。 。 。
、リンクされたデータベースで問題が発生しました。
リンクされたデータベース関数に問題が発生しました。次の関数部分をコメントアウトすると、直接実行できます。
//{
$mysql_servername="localhost";
$mysql_password="11111";
$conn= mysql_connect($mysql_servername ,$mysql_username ,$mysql_password);
mysql_query("set names UTF8")
mysql_select_db($mysql_dbname, $conn); // return $conn;
、質問リンクされたデータベースに表示されます。
リンクされたデータベース関数に問題があります。以下の関数部分をコメントアウトすると、直接実行できます。
//関数 mysql_open()
//{
$mysql_servername="localhost";
$mysql_password="11111";
mysql_query("set names 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>
$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"].")";
知道了,只需要改成最初的样子就可以了,谢谢大家结贴了,结贴之前先追加点分数,以表示感谢