お世話になります。
ビジュアルをcssで調整するために、htmlとphpの分離したいんですが、どう分ければいいか教えていただけませんか?
ソースはこれです↓
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<link rel="stylesheet" type="text/css" href="base.css">
<title>ファイルのアップロードフォーム</title>
</head>
<body>
<form enctype="multipart/form-data" method="post">
<input type="file" name="myfile" size="30">
<input type="submit" value="アップロード">
<?php
//全てのエラー・警告を出力する
ini_set('error_reporting', E_ALL);
//アップするディレクトリ
$uploads_dir = '../../file_manager/uploads';
//データベースに接続
$con = mysql_connect('','','');
mysql_select_db("");
//セットされているかのチェック
if(isset($_FILES["myfile"])
and $_FILES["myfile"]["type"]=="application/pdf"
and $_FILES["myfile"]["error"] == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["myfile"]["tmp_name"];
$name = mysql_real_escape_string($_FILES["myfile"]["name"]);
$size = $_FILES["myfile"]["size"] / 1024;
//テーブルに格納
$sql ="insert into t_pdf_manage (name,size,upload_time,modify_time,flg) values('$name',$size,now(),now(),1)";
mysql_insert_id();
mysql_real_escape_string($sql);
$sql .=" on duplicate key update size=$size,modify_time=now(),flg=1";
$result=mysql_query($sql,$con);
//テーブルからidを抽出
$sql ="select id from t_pdf_manage where name='$name'";
$result=mysql_query($sql,$con);
//添字配列でidを取得
$row=mysql_fetch_row($result);
$up_name=$row[0];
//ファイル名をidにしてアップ
move_uploaded_file($tmp_name, "$uploads_dir/$up_name");
}
if(isset($_POST["del"])
and is_array($_POST["del"])) {
$sql ="update t_pdf_manage set flg=0 where id in(";
$flg=true;
foreach($_POST["del"] as $val) {
if($flg) {$flg=false;}
else {$sql.=",";}
$sql .="'".mysql_real_escape_string($val)."'";
}
$sql .=")";
$result=mysql_query($sql,$con);
}
$sql ="select id,name,size,upload_time,modify_time from t_pdf_manage where flg=1";
$result=mysql_query($sql,$con);
print "<table border=1>\n";
print "<tr>\n";
print "<th>名前</th>\n";
print "<th>サイズ(KB)</th>\n";
print "<th>アップロード</th>\n";
print "<th>更新</th>\n";
print "<th>表示</th>\n";
print "<th>削除</th>\n";
print "</tr>\n";
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
print "<tr>\n";
print "<td>".htmlspecialchars($row["name"])."</td>\n";
print "<td>".$row["size"]."</td>\n";
print "<td>".$row["upload_time"]."</td>\n";
print "<td>".$row["modify_time"]."</td>\n";
print "<td><a href=\"hyouji_test.php?id=" . $row["id"] . "\" target=\"new\"><img src=\"pdf.gif\"/></a></td>\n";
print "<td><input type=\"checkbox\" name=\"del[]\" value=\"".$row["id"]."\"></td>\n";
print "</tr>\n";
}
print "</table>\n";
mysql_close($con);
?>
<input type="submit" value="削除">
</form>
</body>
</html>
No.4ベストアンサー
- 回答日時:
>同じファイル内で分離できても、htmlとphpを別ファイルにはできないですか?
できますよ、と言うより別ファイルにする方が一般的です。
基本的には、2.のHTML表示の部分を別ファイルにして include "ファイル名"; とするだけです。/template/とかの専用ディレクトリにまとめておくとよいでしょう。
※尚「ビジュアルをcssで調整するために、htmlとphpの分離したい」は別問題です。「cssで調整する」のは単にCSS、あるいはHTML(文書構造)とCSS(見栄え)の分離になります。HTMLとPHPの分離は、処理(モデル)と表示(ビュー)の話になります。まだ混乱するかも知れませんが、うすっと頭の片隅に入れていてください。
No.5
- 回答日時:
>php中のものにcssを設定することはできますか?
できますよ。普通にセレクタから指定してみてください。
多分何か勘違いしてる様に思うのですが、CSSはすべてのPHP側の処理、
つまりサーバー側の処理が終わったデータを、ブラウザが受け取ってレンダリングしています。
ブラウザは単純にHTMLとCSSを受け取って描画してるだけです。
その実行結果のページのソースをブラウザで確認できますよね?
そのHTMLに対してCSSがかかっていると考えてください。
No.3
- 回答日時:
考え方を変えましょう。
今は「HTMLを表示しながら」必要に応じて データベースへ接続したり、削除したり、データを取得したりしていますよね。これを、順序を整理して
1.まずは処理だけを行う
・更新なのか削除なのか、何モードなのか判定
・送信内容がまともか確認(バリデート)
・データベースへの接続・更新・削除等の各処理、必要なデータの取得
ここでは何も出力せず、あくまでも「処理だけ」をします。
HTMLで必要なデータや、あるいはエラーメッセージ等は適宜変数へ入れておきます。
2.HTML表示
すべての処理が終わったら、ここで初めて <!DOCTYPE HTML PUBLIC ~ を開始します。
適宜HeaderやNaviなどの共通パーツを読み込んだり、エラーに応じた表示等々…。
必要なデータは変数に取得しているはずですから、ここではもうDBに接続したりしません。
また原則として、出力するHTMLでは、例えば<table border=1> などとはせず、<table id='Ichiran'>等としてidやclass名を振るだけです。見栄えに関することはすべてCSSの方に書くようにします。
※Ano2さんがお書きのように、HTML表示部分でも、たとえば一覧表示部分では
foreach($data as $res){
echo <<<EOL
<tr>
<td class='dataName'>{$res['name']}</td>
<td class='dataSize'>{$res['size']}</td>
<td class='dataDate'>{$res['date']}</td>
</tr>
EOL;
}
のようになり「表示に関する処理」は必要です。
No.2
- 回答日時:
実行結果で出力が決定するので、完全に切り離すとなると、予め実行結果のテーブルを変数に格納しておいて、html上に出力となると思いますが、もちろん実行環境でないとテーブルは生成されません。
これはMVCフレームワークやSmartyなどのテンプレートエンジンを使っても同じで、
やはりどこかでループ処理をして出力するものを生成しなければなりません。
つまり生成された結果に対してCSSで調整してやるか、予め生成内容を模したものを用意して、
CSSの調整を済ませておくというのが普通だと思います。
ひとつ気になるところがあるとすれば、ループの外にあるものに関してはわざわざprintを使わずに<?php?>の外に出してやった方がはるかに楽なのと、
一般にprintよりもechoの方が高速であるとされているのでそちらを使われたほうが良いでしょう。
この回答への補足
emoemoemosan さん、ありがとうございます。
php中のものにcssを設定することはできますか?
例)
echo "<tr>\n";
echo "<td>".htmlspecialchars($row["name"])."</td>\n";
echo "<td>".$row["size"]."</td>\n";
この<tr>や<td>の部分です。
No.1
- 回答日時:
単に画面とコードを分離したいだけなら、smarty とかのテンプレートエンジンみたいなライブラリを使い、
もっと深く、データ構造とかも分離なら、フレームワークを使うというところでしょう。
smarty
http://www.smarty.net/
一応日本語マニュアルもあるので使うのに困らないとは思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DBで検索結果に該当するデータ...
-
文字化けが解決できません。お...
-
アラートでyes noを作りたいです。
-
mysql_insert_id()の使い方
-
checkboxクリック時、SQLを実行...
-
phpでの更新ができません。
-
mysqlテーブルから一つレコード...
-
mysqlから取得した配列をカンマ...
-
smartyでMySQLから連想配列取り...
-
SELECT結果から動的にコンボボ...
-
実行時エラー3131 FROM 句の構...
-
MySQLでデータベースにデータin...
-
VBAをつかってクエリの情報を抽...
-
<VB.NET>INSERT文でDBにデータ...
-
ResultSetインターフェイスでの...
-
テキストボックスに入れた内容...
-
insert1つの処理でもトランザ...
-
Pro*Cの構文エラー
-
日またぎの計算
-
csvをDBへ読み込んだら、NULLが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
エクセルVBAについて
-
DBで検索結果に該当するデータ...
-
アラートでyes noを作りたいです。
-
phpでmysqlを使ってデータベー...
-
checkboxクリック時、SQLを実行...
-
dbに登録したデータをphpのプル...
-
PHP+MySQLでの配列のinsert文に...
-
pg_queryの結果を2回とりだす...
-
検索結果($_POST)が2ページ目...
-
PHPについてなのですが未定義の...
-
VBA初心者です。
-
sortable ギブアップです…助け...
-
PEAR::DBで取得したデータで処...
-
DBのデータを表示させたい
-
データベース表示結果のデザイン
-
PHP 勤務時間の合計を出したい
-
mySQLからデータを取り出す
-
PHP と MySQL でテーブルの行数...
-
連想配列、オブジェクト配列の...
おすすめ情報