ホームページ > バックエンド開発 > PHPチュートリアル > PHP でのデータベースの更新について

PHP でのデータベースの更新について

WBOY
リリース: 2016-06-23 14:12:09
オリジナル
821 人が閲覧しました

この投稿は、2013-06-03 11:55:36 に UR_Not_Alone によって最終編集されました

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;}?>
ログイン後にコピー


また、画像をアップロードする機能を実装したい場合はどうすればよいですか? アイデアを提供してください。誰かが例を持っていたら最高です


ディスカッションに返信してください

mysql_open();


include("connect_mysql.php") );

mysql_open();

いいえ、クリックしましょう 送信後、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 を開くだけです。これはどういう意味ですか?

開くとは、insert.php がシステムのデフォルトの php ファイル エディターで開かれることを意味します。たとえば、私はデフォルトで Emeditor を使用して開きます。 。 。 。 。 。
これは間違っています。無視してください。これは、IE で開かれた http://localhost/TestInsert/insert.php ページであるはずです

ポップアップのダウンロード ページは、PHP 環境が正常に一致していないことを示しています

ダウンロードページのポップアップはPHPの環境が一致しませんと表示されますが、環境的には問題ないと思います(値を直接書きます)。データベースには保存されますが、ページから取得することはできません。

PHP 環境が正常に一致していないことを示すダウンロード ページがポップアップ表示されます
そして、PHP5、Mysql、Apache、Eclipse のインストールを確認しましたが、問題はありません。 。 。

、リンクされたデータベースで問題が発生しました。
リンクされたデータベース関数に問題が発生しました。次の関数部分をコメントアウトすると、直接実行できます。

//関数 mysql_open()

//{
$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";

$conn= mysql_connect($mysql_servername ,$mysql_username ,$mysql_password);

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>
ログイン後にコピー


我将代码改成上面的样子通过错误信息发现是因为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"].")";

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート