###前提・実現したいこと
追記:以下内容でこのページは遷移できたのですが、別のページも同じようにしたら文字化けが起こるのと、二行目以降の一覧データが入っていないようなエラーが起こっています。
$i = 0;
while($row = mysqli_fetch_row($result)){
$engineer_id = $row[0];
$engineer_name = $row[1];
$entry_day = $row[2];とした時に、この中の変数を二回以上使うと何かエラーが起こるのでしょうか?
また、<script type="text/javascript">
function moveDetail(number) {
document.frmMoveDetail.engineer_id.value=number;
document.frmMoveDetail.submit();
}
</script>の意味がよくわかっておらず、意味を教えていただければと思いました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
以下前回の質問
〜〜〜
PHPとmysqlを利用して対象のデータベーステーブルから情報一覧をtableで表示します。
そして、tableの行をクリックすると、対象の行がhoverにより色が変わって、対象の内容の詳細画面へ飛ぶというシステムを作っています。
ただ、調べたところjavascriptを利用した方法があるようなのですが、どう移動させていいか全くわかりません。
〜〜〜
###該当のソースコード
今回の動作しないコード↓ <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>一覧</title> <style type="text/css"> .list { border : blue; border-style : solid; width:1200px; } .list td { border-top:solid 1px; border-top:solid 1px; line-height:18px; } .list tr:hover { background-color:red; } </style> <body> <table> <tr> <th>エンジニア番号</th><th>技術者名</th><th>入社日</th> </tr> <#ENGINEERLIST#>//phpで変換予定 <form method="post" id="frmMoveDetail" name="frmMoveDetail" action="engineer_detail.php"> <input type="hidden" id="engineer_id" name="engineer_id" value="<#ENGINEERID#>"> </form> </body> <script type="text/javascript"> function moveDetail(number) { document.frmMoveDetail.engineer_id.value=number; document.frmMoveDetail.submit(); } </script> </html> <?php $link=mysqli_connect(DB_SERVER,DB_ACCOUNT_ID,DB_ACCOUNT_PW,DB_NAME); if (!$link) { echo "接続エラー" exit; } mysqli_set_charset($link,"utf8");//utf8にセット $query = 'select * from engineer_info where 1 order by engineer_id'; $engineer_line = "";//変数を初期化する if($result = mysqli_query($link,$query)){ $i = 0; while($row = mysqli_fetch_row($result)){ $engineer_id = $row[0]; $engineer_name = $row[1]; $entry_day = $row[2]; $engineer_line.="<tr onclick='moveDetail(".$engineer_id[$i].")'><td>".$engineer_id[$i]."</td> <td>".$engineer_name[$i]."</td> <td>".$entry_day[$i]."</td></tr>\n"; $i++; } mysqli_free_result($result); } mysqli_close($link); $fp = fopen('./engineer_list.html','r');//htmlを読み込み while(!feof($fp)){ $html_line = fgets($fp); $html_line1 = str_replace('<#LOGINNAME#>',$shain_mei,$html_line); $html_line2 = str_replace('<#ENGINEERID#>','.$engineer_id.',$html_line1); $lines = str_replace('<#ENGINEERLIST#>',$engineer_line,$html_line2); echo $lines; } fclose($fp); exit(); ?> 以下前回質問をさせていただき遷移できた方法↓ <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>情報一覧</title> <style type="text/css"> .list { border : blue; border-style : solid; width:1200px; } .list td { border-top:solid 1px; border-top:solid 1px; line-height:18px; } .list tr:hover { background-color:red; } </style></head> <body> <header> <div class="header-right"><#LOGINNAME#>がログイン中</div> </header> <div class="center"> <h1>情報一覧</h1> </div> <table class="list"> <tr> <th>契約名</th><th>技術者</th><th>パートナー</th><th>業務概要</th><th>作業場所</th> <th>契約金額</th><th>支払いサイト</th><th>契約開始時期</th><th>契約終了時期</th><th>その他備考</th> </tr> <#CONTRACTLIST#> <form method="post" id="frmMoveDetail" name="frmMoveDetail" action="contract_detail.php"> <input type="hidden" id="contract_id" name="contract_id" value=""> </form> </body> <script type="text/javascript"> function moveDetail(number) { document.frmMoveDetail.contract_id.value=number; document.frmMoveDetail.submit(); } </script> </html> <?php require_once('./database_config.php'); $link=mysqli_connect(DB_SERVER,DB_ACCOUNT_ID,DB_ACCOUNT_PW,DB_NAME); if (!$link) { echo "エラー"; exit; } mysqli_set_charset($link,"utf8"); //contract_infoというテーブルから、契約情報をcontract_id順に抽出 $query='select * from contract_info where 1 order by contract_id'; $line=""; if ($result = mysqli_query($link, $query)) { //テーブルの中身を1行ずつ取り出して、変数にセット $i=0; while ($row = mysqli_fetch_row($result)) { $contract_id[$i] = $row[0]; $contract_name[$i] = $row[1]; $engineer_name[$i] = $row[2]; $partner_name[$i] = $row[3]; $overview[$i] = $row[4]; $place[$i] = $row[5]; $contract_money[$i] = $row[6]; $payment_site[$i] = $row[7]; $contract_start_term[$i] = $row[8]; $contract_end_term[$i] = $row[9]; $memo[$i] = $row[10]; // 一覧用の値をセットして、これを<#CONTRACTLIST#>というものに入れ替えたいです $line.="<tr><td>".$contract_name[$i]."</td><td>".$engineer_name[$i]."</td> <td>".$partner_name[$i]."</td><td>".$overview[$i]."</td><td>".$place[$i]."</td> <td>".$contract_money[$i]."</td><td>".$payment_site[$i]."</td> <td>".$contract_start_term[$i]."</td><td>".$contract_end_term[$i]."</td> <td>".$memo[$i]."</td><td><input type='submit' value='info' onclick='mov eDetail(".$contract_id[$i].")' /></td></tr>\n"; $i++; } mysqli_free_result($result); } mysqli_close($link); $fp=fopen('./contract_list.html','r'); while(!feof($fp)) { $html_line=fgets($fp); $html_line1 = str_replace('<#LOGINNAME#>',$shain_mei,$html_line); $lines=str_replace("<#CONTRACTLIST#>",$line,$html_line1); echo $lines; } fclose($fp); exit(); ?>
###試したこと
<tr onclick='moveDetail(".$engineer_id[$i].")'><td>".$engineer_id[$i]."</td><td>".$engineer_name[$i]."</td> に対してPHP Notice: Uninitialized string offset: 1 in /home/vagrant/contract_kadai2/engineer_list.php on line 40というエラーが起こっているため、ここあたりのengineer_id[$i]がうまく機能していない?と思い、いじって見ましたが変化ない状態です。また、ターミナルから直接insert intoにして追加しても一つ目の行のデータにはid番号が表示されますが、二行目以降がidが表示されなくなります。
以下二つデータがある中でソースを確認した時の表示です。
moveDetail()にidが入っていない。
かつ�と文字化けが起こる。
ただ、一つ目の行をクリックして詳細画面へ行くと、文字化けも起こらずに、一つ目のidのデータが抽出されて出てきていました。
###補足情報(言語/FW/ツール等のバージョンなど)
macbook利用、local環境にてテスト中です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/05/17 03:34
2017/05/17 06:14
退会済みユーザー
2017/05/19 17:18
2017/05/20 17:14