人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

このコードのどこが間違っているか
分かる人教えてもらえませんか?
<?php
if (isset($_COOKIE['my_id'])){
$myId=$_COOKIE['my_id'];
}else{
$myId='';
}
?>



<form action='sample17.php' method='post'>
<dl>
<dt>ID</dt>
<dd><input type='text' name='my_id' id='my_id'
value='<?php
echo $myId;?>'/></dd>
<dt>パスワード</dt>
<dd><input type='text'name='password' id='password'
/></dd>
<dt>IDの保存</dt>
<p><input type='checkbox' name='save' id='save'
value='on'/><label for='save'>IDを保存する</label>
</p>
<input type='submit' value='送信'>
</form>
<?php
$myId=$_POST['my_id']
$password=$_POST['password']
$save=$_POST['save']

//Cookieに保存
if($save=='on'){
setcookie('my_id',$myId,time()+60*60*24*14);
$message='記録しませんでした';
}
?>

<p><?php echo $message; ?></p>
<p><a herf='./sample17_input.php'>戻る</a></p>

●質問者: HGIUGYIVB
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● xnissy
ベストアンサー
$myId=$_POST['my_id']
$password=$_POST['password']
$save=$_POST['save']

行末にセミコロンがありません。


<dd><input type='text'name='password' id='password'
/></dd>

'text'とnameの間にスペースがありません。


<p><input type='checkbox' name='save' id='save'
value='on'/><label for='save'>IDを保存する</label>
</p>

<dl>タグの中には<p>タグは書けません。また<dl>タグが閉じられていません。


$message='記録しませんでした';

cookieに保存しているのだから「記録しました」ではないのでしょうか。


<p><a herf='./sample17_input.php'>戻る</a></p>

herfじゃなくてhrefです。


2 ● うぃんど

phpは先頭行から順に実行されるということをまずは再認識しましょう

その上で、フォームからIDを受け取った場合に、

どのような順序で実行されるかを考えましょう

質問文のコードであれば、

クッキーの値を読み取って表示したあとで、

フォームから受信したIDをクッキーに保存しようとしているので、

当然ながら、表示されているIDは古いもの(新規登録なら何も無し)となる

対応としては

$_POSTの値を読み取ってクッキーに書き込むという処理を末尾ではなく冒頭に持ってきて、

$_POSTが無い場合はクッキーを読み取るという形にすると良いでしょう

文法エラーを防ぐ方法は前回回答させていただいたが、

処理の流れ(どの順番で何を行わなければならないか?)については、

phpに限らずしっかりと事前に考えておく必要があることを再認識されることを願いたい

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ