こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

フォームの内容を送信しようとするとエラーが出る

最近、PHPを勉強し始めた初心者です。

よくわかるPHPの教科書(毎日コミュニケーションズ刊)の239ページに載っているサンプルプログラムを参考に入力フォームに記入した内容を確認ページに反映したいのですが

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\bkconnect.php:10) in C:\xampp\htdocs\input.php on line 31

というエラーが出てしまいます。ヘッダが既に送信されているのでヘッダを変えることができなかったみたいなのですが。

どこがいけないのでしょうか?


●input.php

<?php
session_start();
require('bkconnect.php');

if (!empty($_POST)) {
//エラー項目の確認
if ($_POST['title'] == '') {
$error['title'] = 'black';
}
if ($_POST['hira'] == '') {
$error['hira'] = 'black';
}
if ($_POST['management'] == '') {
$error['management'] = 'black';
}
$fileName = $_FILES['image']['title'];
if (!empty($fileName)) {
$ext = substr($fileName, -3);
if ($ext != 'jpg' && $ext != 'gif') {
$error['image'] = 'type';
}
}

if (empty($error)) {
//画像をアップロードする
$image = date('YmdHis') . $_FILES['image']['title'];
move_uploaded_file($_FILES['image']['tmp_title'], ' ./book_picture/' . $image);

$_SESSION['join'] = $_POST;
$_SESSION['join']['image'] = $image;
header('Location: check.php');
}
}

//書き直し
if ($_REQUEST['action'] == 'rewrite') {
$_POST = $_SESSION['join'];
$error['rewrite'] = true;
}
?>
<!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>
<link rel="stylesheet" type="text/css" href="book.css">
</head>

<body>
<center>
<div>
・・・

よろしくお願いします。

投稿日時 - 2010-12-21 01:45:45

QNo.6397617

すぐに回答ほしいです

質問者が選んだベストアンサー

ん~・・・
ちょっと、その本を書いた人の意図がわかりませんが、bkconnect.php は <?php ~ ?> の部分だけで済む話な気がしないでもないです。

bkconnect.php を HTML部分を 全消しで 以下だけにしてみてください。

<?php
mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('book_db');
mysql_query('SET NAMES UTF8');
?>

もしくは、input.php の require('bkconnect.php'); を消して、そこに↓を入れてみてください。

mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('book_db');
mysql_query('SET NAMES UTF8');

投稿日時 - 2010-12-21 13:05:11

お礼

回答有難うございます。

>bkconnect.php を HTML部分を 全消しで 以下だけにしてみてください

データベースの共通プログラムはデンプレ必要ないようでした。

投稿日時 - 2010-12-21 16:23:45

ANo.3

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

若干、勘違いがあるようなので ツッコまさせていただきますが、「既にヘッダーが送られている」のではなく「ヘッダーの前に何かが既に出力されている」から出るエラーです。

その何かが出力されている箇所が >>1 さんがピックアップしている、「bkconnect.php の 10行目」なのです。
提示されたものには、bkconnect.php のソースが無いようですので、正確な所は 不明です。

投稿日時 - 2010-12-21 05:36:56

お礼

回答有難うございます。

bkconnect.phpはデータベースにアクセスするプログラムです。


●bkconnect.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>
<?php
mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('book_db');
mysql_query('SET NAMES UTF8');
?>
</body>
</html>

投稿日時 - 2010-12-21 10:22:59

ANo.1

output started at C:\xampp\htdocs\bkconnect.php:10

投稿日時 - 2010-12-21 02:05:29

あなたにオススメの質問