このコードのどこが間違っているか

分かる人教えてもらえませんか?
<?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>

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/10/16 12:02:02
  • 終了:2011/10/16 13:44:49

ベストアンサー

id:xnissy No.1

xnissy回答回数1029ベストアンサー獲得回数2032011/10/16 13:01:20

$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です。

その他の回答(1件)

id:xnissy No.1

xnissy回答回数1029ベストアンサー獲得回数2032011/10/16 13:01:20ここでベストアンサー

$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です。

id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492011/10/16 13:03:04

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

 

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

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

 

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

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

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

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

 

対応としては

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

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

 

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

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

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

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません