スレッド表示 | フラット表示〕 全トピック 920 件中 531 番目 次≫ ≪前

ページの表示時の処理

created: 2004-10-26 10:24 | modified: 2004-10-28 10:03 | reply: 6

[1873] ページの表示時の処理

user: ももか | created: 2004-10-26 10:24
こんにちは!PHP勉強中のももかです。
場違いかもしれませんが、私の悩みを聞いてください。
今、登録フォームをJavaScriptとPHPを使って作成しております。
JavaScriptでページ読み込み時(on Loadイベント発生時)に関数を呼び出し、document.form1.nama1.focus();するようにしております。JavaScriptだけの処理であれば、きちんとフォーカスセットされるのですが、この後に、PHPでmail()関数を使うと、
うまくできません。(JavaScriptでdocument.form1.name1はNULL又はオブジェクトではありませんというエラーメッセージが表示されます。きちんとmail関数は動いていますが・・)
JavaScriptのエラー文を表示させないようにするためには、どういう処理にしたらよろしいでしょうか?お返事お願いします。
reply: 1874 返信 編集 削除

[1874] フォームの名前が違うのは気のせい?

user: hamaji | created: 2004-10-26 23:41
こんばんは。
>document.form1.nama1.focus();

>document.form1.name1はNULL又は…

『nama1』、『name1』というようにフォーム名が違うだけということはないですか?
もしそうなら、同じフォーム名にしてあげてください。

そうではなくて、書き込み時のタイプミスなら、別の原因が考えられます。
>document.form1.name1はNULL又はオブジェクトではありません
と言うエラーから察すると、name1というエレメントがないのでオブジェクトが取得できないような感じではないでしょうか。
(form1にname1がない)

説明がよくわからないので詳しくは分かりませんが、メールを送る前と、送った後でHTMLの内容が違うと言うことでしょうか。
であれば下記のようにすればいいのでは?

例1:メール送信フラグを使う。
<?php
$mail_success = false; // メール送信フラグ

if ($_SERVER['REQUEST_METHOD'] == "POST") {
…略

// メール送信完了
if (mail(×××, ○○○, △△△)) {
$mail_success = true;
}

…略
}
?>
<html>

<?php
if ($mail_success) {
echo "<body>\n";
}
else {
echo "<body onLoad=\"document.form1.name1.focus();\">\n";
}
?>
…略

例2:別のページに飛ばしてしまう。
<?php
…略
if ($_SERVER['REQUEST_METHOD'] == "POST") {
…略

// メール送信完了
if (mail(×××, ○○○, △△△)) {
header("Location:thankyou.php");
exit;

}

…略
}

もし差し支えなければソースを見せてください。なにかしらのアドバイスはできると思います。
Parent: 1873  reply: 1875 返信 編集 削除

[1875] エラー

user: ももか | created: 2004-10-27 09:52
返事ありがとうございます。
以下にソースを書きます。

<html>

<head>

<title>登録フォーム</title>

<script language="JavaScript">
<!--
//ページ読み込み時にフォーカスセットする関数
function load() {
document.form1.name1.focus();
}

//リセットボタンが押されたときにフォーカスセットする関数
function reset(){
document.form1.reset();
document.form1.name1.focus();
return false;
}

//送信ボタンが押されたときに入力チェックする関数
function check(){
(省略)
}
//-->
</script>

</head>

<body bgcolor="#ffffff" leftmargin="30" topmargin="60" onLoad="load()">

<?php
if(!strlen($mail1)){
?>


<form name="form1" method="post">
<table border=1 cellpadding=3 cellspacing=2 width=600 align="center">
<tr bgcolor="#6495ed">
<td colspan="2">
<center><font size="3" color="#fff8dc"><b>登録フォーム</b></font></center>
</td>
</tr>

<tr>
<td bgcolor=#e0e0e0 width="30%"><font size="2"><b>■お名前 漢字</b><font color="#ff0000">(*)</font></font></td>
<td bgcolor=#f0f0f0 width="70%"> <font size="2"> 姓: <input name="name1" size="15">
名: <input name="name2" size="15"></font></td>
</tr>
<tr>
<td bgcolor=#e0e0e0 width="30%"><font size="2"><b>■Eメールアドレス</b><font color="#ff0000">(*)</font></font></td>
<td bgcolor=#f0f0f0 width="70%"> <font size="2"><input name="mail1" size="50"></font></td>
</tr>
<tr>
<td bgcolor=#e0e0e0 width="30%"><font size="2"><b>■登録内容</b><font color="#ff0000">(*)</font></font></td>
<td bgcolor=#f0f0f0 width="70%"> <font size="2">
<textarea name="msg" rows="8" cols="50"></textarea></font></td>
</tr>

<tr>
<td colspan="2"><p align="center">
<input type="submit" value="送信" onClick="return check()">
<input type="submit" value="クリア" onClick="return reset()">
</font></p></td>
</tr>
</table>
</form>

<?php
}else{

$from="$mail1";

$to="$mail1";

$message="問い合わせ内容";
$message.="\n";
$message.="$msg\n";

$message=mb_convert_encoding($message,"JIS","EUC-JP");

$name=mb_encode_mimeheader($name1.$name2);

if($from!="" && $to!=""){
$send=mail($to,$message);
echo "メール送信しました。<br>";
}else{
echo "メール送信に失敗しました。";
}
}
?>

</body>
</html>

あいかわらず、エラーが出てしまいます。

ちなみに、書き込み時のタイプミスで実際のソースは間違っていませんでした。
Parent: 1874  reply: 1877 返信 編集 削除

[1877] エラーがなくなりました

user: ももか | created: 2004-10-27 11:51
ももかです。下記のように<input>の中身にvalueを追加すると、エラーがなくなりました。

<tr>
<td bgcolor=#e0e0e0 width="30%"><font size="2"><b>■お名前 漢字</b><font color="#ff0000">(*)</font></font></td>
<td bgcolor=#f0f0f0 width="70%"> <font size="2"> 姓: <input name="name1" size="15" value="<?php echo($name1)?>">
名: <input name="name2" size="15"></font></td>
</tr>

hamajiさん、いろいろありがとうございました。
Parent: 1875  reply: 1878 返信 編集 削除

[1878] エラーやっぱりなくなりません

user: ももか | created: 2004-10-27 15:15
前のレスでエラーがなくなりましたと報告しましたが、何かの間違いでした。再度試したところ、同じエラーが出てきました。

自分の考えられるエラーといたしましては、
mail関数で送信したら新たなページにうつり、そこでdocument.form1.name1を記述していないので、そんなのはありませんということだと思います。
対策としましては、mail関数が起動したあとでは、onLoadイベントを発生させないようにすればいいと思っています。しかし、どう記述していいのかわかりせん・・。

いろいろ言いまして、すみません。
Parent: 1877  reply: 1880 返信 編集 削除

[1880] <body>タグの位置

user: hamaji | created: 2004-10-27 22:05
こんばんは。

>if(!strlen($mail1)){
で、メール送信の判断をされているので、
それを利用して<body>タグの位置を変えてやればいいと思います。

<?php
header("Content-Type: text/html; Charset=EUC-JP");
?>
<html>

<head>

<title>登録フォーム</title>
<script language="JavaScript">
<!--
//ページ読み込み時にフォーカスセットする関数
function load() {
document.form1.name1.focus();
}

//リセットボタンが押されたときにフォーカスセットする関数
function reset() {
document.form1.reset();
document.form1.name1.focus();
return false;
}

//-->
</script>
</head>

<?php
$mail1 = null;

$mail1 = $_POST['mail1'];
$msg = $_POST['msg'];

if(!strlen($mail1)){
/* ここにonLoadでJavaScriptを呼ぶ際の<body>タグを記述する */
?>
<body bgcolor="#ffffff" leftmargin="30" topmargin="60" onLoad="load()">

<form name="form1" method="post">
<table border=1 cellpadding=3 cellspacing=2 width=600 align="center">
<tr bgcolor="#6495ed">
<td colspan="2">
<center><font size="3" color="#fff8dc"><b>登録フォーム</b></font></center>
</td>
</tr>

<tr>
<td bgcolor=#e0e0e0 width="30%"><font size="2"><b>■お名前 漢字</b><font color="#ff0000">(*)</font></font></td>
<td bgcolor=#f0f0f0 width="70%"> <font size="2"> 姓: <input name="name1" size="15">
名: <input name="name2" size="15"></font></td>
</tr>
<tr>
<td bgcolor=#e0e0e0 width="30%"><font size="2"><b>■Eメールアドレス</b><font color="#ff0000">(*)</font></font></td>
<td bgcolor=#f0f0f0 width="70%"> <font size="2"><input name="mail1" size="50" value=""></font></td>
</tr>
<tr>
<td bgcolor=#e0e0e0 width="30%"><font size="2"><b>■登録内容</b><font color="#ff0000">(*)</font></font></td>
<td bgcolor=#f0f0f0 width="70%"> <font size="2">
<textarea name="msg" rows="8" cols="50"></textarea></font></td>
</tr>

<tr>
<td colspan="2"><p align="center">
<input type="submit" value="送信" onClick="return check()">
<input type="submit" value="クリア" onClick="return reset()">
</font></p></td>
</tr>
</table>
</form>

<?php
}
else{
/* メール送信後はフォームはいらないので、ただの<body>タグを記述する */
?>
<body>
<?php

$from = $mail1;

$to = $mail1;

$message = "問い合わせ内容";
$message .= "\n";
$message .= "$msg\n";

$message = mb_convert_encoding($message, "JIS", "EUC-JP");

$name = mb_encode_mimeheader($name1 . $name2);

if($from!="" && $to!=""){
$send = mail($to, "subject", $message);
echo "メール送信しました。<br>";
}
else{
echo "メール送信に失敗しました。";
}
}
?>
</body>
</html>
こんな感じでいかがでしょうか。

#ももかさんのソースを実行したら、
#mail()関数のSUBJECTがなかったのですが、その辺は大丈夫ですか?
Parent: 1878  reply: 1882 返信 編集 削除

[1882] 正しく動作しました

user: ももか | created: 2004-10-28 10:03
おはようございます。
hamajiさん、ありがとうございます。
<body>タグの位置を修正しましたら、きちんと動作しました。

mail()関数のsubjectに関してですが、実際のソースはsubjectを書いていますので、きちんとフォームでメール送れます!

これからも、この掲示板を利用させていただきます。よろしくお願いいたします。
Parent: 1880  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 531 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑