• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:簡単な投稿サイトを作りたい)

簡単な投稿サイトを作る際の注意点

amanojaku1の回答

回答No.5

>これらの作業はすべてphpで行うよりサーバの負担を避けるためにinputに入力された文字列をphpの変数に入れるまではajaxを使ったjsで行うべきでしょうか? ajaxは良く知りませんが、ざっくりと言うとajaxはバックグラウンドでサーバと通信するためのライブラリーです。 ajaxを使ってバックグラウンドでサーバと通信するとサーバの負担は上がるでしょう、もしバックグラウンドでサーバと通信する必要がないならajaxを使う必要もないと思います。

関連するQ&A

  • データベースに"や'を保存できない

    phpで会員制サイトの制作を勉強しています。 データベースへはPDOで接続しています。 MySQLデータベースを使用しています。 自己紹介文のような長めの文章をデータベースのTEXT型カラムにUPDATEで保存したいです。 $stmt = $db->prepare("UPDATE member SET text=:text WHERE id=:id"); $stmt -> bindParam(':text ',$text,PDO::PARAM_STR); $stmt -> bindParam(':id',$id,PDO::PARAM_INT); $stmt -> execute(); というSQL文を作成し、 文字列データを保存することはできたのですが、 「"」や「'」のような記号を含めるとそれ以降の文章が消えた状態で保存されてしまいます。 例えば顔文字などで「"」や「'」のような記号を使用する場合もあると思うので、 できれば、データベースに保存したいです。 どうしたら安全に「"」や「'」が保存できるでしょうか? ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • プリぺアドステートメントで変数が認識されない

    趣味でHPを作ろうとPHPを始めました。 初歩的な質問で恐縮なのですがどなたかご協力頂けないでしょうか? 多少省略していますが現在作成中のスクリプトは以下の通りです。 $sql="SELECT * FROM property WHERE price BETWEEN ? AND ? AND citycd=?"; $stmt = $db->prepare($sql); $stmt->execute(array($price1,$price2,$citycd1)); $rows=$stmt->fetchAll(PDO::FETCH_ASSOC); foreach($rows as $r){ echo .$r['plan'].; } 上記のなかでarrayの中の変数が変数として認識されません。 変数は$_POSTで受け取っているものなのですが、受け取りの成功は確認済です。 また、変数の代わりに数字を直で入れれば動くので、やはり変数の書き方に問題があるかと思います。 変数のセットの仕方は { } や '..' など色々あると思います。 マニュアルでそのあたりを調べて何パターンか試してみたのですがうまくいきません。 http://php.net/manual/ja/language.types.string.php 恥ずかしい質問ですがよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • selectによるレコード取得結果の有無で条件分岐

    PHP(PDO)とMySQLでプログラムを組んでいます。 DBからselectでレコードを取得するのですが、もし該当するレコードが一件もない場合は404のエラーページにリダイレクトさせたいのですが、その場合の条件式は if(!$stmt->fetch()){ } で大丈夫でしょうか?一応下にプラグラムの抜粋を載せてみました。 他に何かよい方法がございましたら教えていただきたいです。 よろしくお願いします。 sql="SELECT・・・・"; $stmt=$db->prepare($sql); $stmt->bindParam(':・・',・・・']); $stmt->execute(); if(!$stmt->fetch()){ header("Location:・・・・"); } $stmt->execute(); while($row=$stmt->fetch()){ }

    • ベストアンサー
    • MySQL
  • SQLインジェクション対策

    SQLインジェクション対策として、変数を直接SQLに埋め込むのではなく、PDOのprepareメソッドを利用して作成したステートメントに値をバインドする形式にする場合、ユーザー定義関数をどのように 修正すればいいですか? function update_item_stock($db, $item_id, $stock){ $sql = " UPDATE items SET stock = {$stock} WHERE item_id = {$item_id} LIMIT 1"; return execute_query($db, $sql); } function execute_query($db, $sql, $params = array()){ try{ $stmt = $db->prepare($sql); return $stmt->execute($params); }catch(PDOException $e){ set_error('更新に失敗しました。'); } return false; } 上記のユーザー定義関数を下記のようにbindValueを用いて表す場合、$stmt->bindValueの部分を 上記のどこに追加すればいいですか? try { $sql = 'UPDATE item_stock SET stock = ?, update_date = ? WHERE item_id = ?'; $stmt = $db->prepare($sql); $stmt->bindValue(1, $update_stock, PDO::PARAM_INT); $stmt->bindValue(2, $date, PDO::PARAM_STR); $stmt->bindValue(3, $item_id, PDO::PARAM_INT); $stmt->execute(); $complete_msg[] = '在庫変更に成功しました。'; } catch (PDOException $e) { $err_msg[] = '更新に失敗しました。理由:' . $e->getMessage(); }

    • 締切済み
    • PHP
  • SQLiteでのDateTimeの扱い

    SQLiteのデータベースにphpで値を保存したいのですが、カラムのタイプがdatetimeだと上手くいきません。 現在の時刻をSQLiteに書き込むということをしたいです。 カラムのタイプをdatetimeからtextに変更するのは避けたいので、下のphpを変更して書き込めるようにするにはどうすれば良いのでしょうか? 詳しい方よろしくお願いします。 SQLite DB ---- CREATE TABLE "dt" ("ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,"REGIST" DATETIME) ---- PHP ---- $sqlite = 'SQLiteへのパス'; $db = new PDO($sqlite); $now = date('Y-m-d H:i:s'); $nfe = $db->prepare('insert into dt(REGIST) values(?)'); $nfe->execute(array($now)); ----

  • phpからsqliteにselect抽出

    phpからsqliteにselect抽出しています。 $sql = "select * from Table where C=?" $st = $db->prepare($sql); $st->bindParam(1, $key, PDO::PARAM_STR); $st->execute(); while ($row = $st->fetch(PDO::FETCH_ASSOC)) { *** *** } でエラーにはなりませんが、データがとれません。 updateやinsertで?(インジェクション)はうまくいくのですが、Selectでなぜ取得できないのでしょうか? bindParamをarrayにしたりprepare をqueryにしたりしましたが、 データが1件しか取れなかったりします。

    • ベストアンサー
    • PHP
  • PDOでLIKE検索

    LIKE検索でつまづいでいます。 こまめにチェックしながら進めており、エラーが表示されるわけではないのですが、うまくキーが引き渡せていないのが原因だとは思うのですが、どう対策すればいいかというところでつまづいています。 文字コードの指定、直接パラメーターを使わない、プレースホルダの使い方、キーの渡し方等アドバイスをいただけないでしょうか。 ※全件表示だと動作します。また、$keyの中身はきちんと渡っているのは確認できましたが、select文の部分に反映されていないような状態。。。 【検索フォーム】 <form name="" method="POST" action="result.php"> <button type="submit" name="area" value="新宿">新宿</button> </form> 【検索結果】 define('DB_HOST', 'localhost'); define('DB_USER', 'ユーザー名'); define('DB_PASSWORD', 'DBパスワード'); define('DB_NAME', 'DB名'); try { $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD, array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET 'utf8'") ); } catch (PDOException $e) { echo $e->getMessage(); exit; } $key = "%".$_POST['area']."%"; $stmt = $dbh->prepare('SELECT * FROM salon WHERE area LIKE :area'); $stmt->bindParam(':area', $key, PDO::PARAM_STR); $stmt->execute(); ?> <body> <?php foreach ($stmt as $row) : ?> <?php echo htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8'); ?> <?php echo htmlspecialchars($row['area'],ENT_QUOTES,'UTF-8'); ?> <?php endoforeach; ?> </body> アドバイスをいただければ幸いです。

    • ベストアンサー
    • PHP
  • PHP PDO化作業中ORDERでソートできない

    WAMP初級者です。 いままでPEAR::DBを使って書いていたサイトがあり、PDOを利用するように書き換えていますが、いろいろ試してもorderでの並び替えが効いてくれません。どなたかアドバイス頂けないでしょうか。 該当箇所のみ切り出して例示いたします。 キーワード検索した結果画面で、$keywordはPOSTで渡って来ています。 ●うまくいく例(画面に期待したものが表示される) $connection=new PDO('mysql:host=localhost;dbname=test_db','root','root'); $connection->query('SET NAMES utf8'); $query="select * from test_tbl join test2_tbl using(Code) where NameW lik e :keyword"; $stmt=$connection->prepare($query); $stmt->bindValue(":keyword","%$keyword%",PDO::PARAM_STR); $stmt->execute(); ●これだと画面が真っ白になる(オーダーでソートしたいのですが。。) $orderKB="10K+10B"; $direction = "desc"; $connection=new PDO('mysql:host=localhost;dbname=test_db','root','root'); $connection->query('SET NAMES utf8'); $query="select * from test_tbl join test2_tbl using(Code) where NameW lik e :keyword order by :orderKB :direction"; $stmt=$connection->prepare($query); $stmt->bindValue(":keyword","%$keyword%",PDO::PARAM_STR); $stmt->bindValue(":orderKB", $orderKB, PDO::PARAM_STR); $stmt->bindValue(":direction", $direction, PDO::PARAM_STR); $stmt->execute(); ちなみに、10Kと10Bというのは数字データで合計した数字の高い順に並び替えを したいです。 初歩的な質問ですみませんが、どなたお助けいただけますと幸いです。 環境はApache/2.2.4 (Win32) PHP/5.4.22です 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • mysql_queryがある場所について

    ZendFramework-1.11.7を使用しています。 Zend_DbでPdo_Mysqlで接続して利用しています。 そこで、クエリを実際に実行している箇所を探しているのですが、 ソースの中にmysql_queryが見つからないのです・・・ PHPとかでSQLを発行したい場合にはmysql_queryでやるんですよね?? ┬ Zend │└ Db │ ├ Statement.php ファイルには public function execute(array $params = null) { /* * Simple case - no query profiler to manage. */ if ($this->_queryId === null) { return $this->_execute($params); } があるのですが、これは $this->_execute($params); を実行していて ┬ Zend │└ Db │ ├ Statement │ │ ├ Pdo.php ファイルには public function _execute(array $params = null) { try { if ($params !== null) { return $this->_stmt->execute($params); } else { return $this->_stmt->execute(); } があるのですが、これは $this->_stmt->execute(); を実行しているようなのです。 なんか行ったり来たり(^^;)していて最終的にどこでSQLを発行(mysql_queryを実行)しているのかが フォルダ全体を文字列検索しても見つからないのです・・・ _stmtが何のオブジェクトなのかが定かではないので、追跡しづらいのかもしれませんが、 どこでSQLを発行しているのか教えて頂けないでしょうか?

    • ベストアンサー
    • PHP
  • phpプリペアードステートメントについて質問です。

    phpの練習で、以下のようなhtmlファイルとphpファイルを作り XAMPで作業をおこなっています。 以下にあるhtml.phpファイルでのやり取りはうまくいっているのですが、 このphpをプリペアードステートメントにする所で躓いています。 いろいろ調べてやってはみたものの、どうしても%を使った あいまい検索のところがわかりません。 ---------------------------------------------------------------- 以下、プリペアードステートメントにする前の ページ内容です。こちらではうまくいっています。 html <form method="post" action="kensaku.php"> ご意見コードを入力してください。<br /> <input name="code" type="text" style="width:100px"><br /> <br /> <input type="submit" value="送信"> </form> php <?php $code=$_POST['code']; $dsn = 'mysql:dbname=phpkiso;host=localhost'; $user = 'root'; $password =''; $dbh = new PDO($dsn,$user,$password); $dbh->query('SET NAMES UTF-8'); $sql = "select * from `anketo` where `goiken` like '%{$code}%' "; $stmt = $dbh->prepare($sql); $stmt-> execute(); while(1) { $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { break; } print $rec['code']; print $rec['nickname']; print $rec['email']; print $rec['goiken']; print '<br />'; } $dbh = null; ?> ---------------------------------------------------------------- 以上のphpの中の以下の分を $sql = "select * from `anketo` where `goiken` like '%{$code}%' "; $stmt = $dbh->prepare($sql); $stmt-> execute(); ↓ $sql ="SELECT*FROM anketo WHERE goiken like ?"; $stmt = $dbh->prepare($sql); $data[] = $code; $stmt->execute(array("%$_GET[$data]%")); こんな風に直しては見たのですが、なんだか うまくい行かずです。 よろしければ教えてください。 宜しくお願い致します。

    • 締切済み
    • PHP