• ベストアンサー

MySqlに、\'の2つを含む文字を登録できません

PHP5.2 MySql5.1.34 文字コードSJIS \' の2つを含む文字を登録できません。 /".!% は登録できます。 <?php if(!$_POST['mes']){ print <<< html ブログ記事を投稿 <form action="$PHP_SELF" method="post"> <table border="1"> <tr> <td>日付</td> <td> <textarea rows="3" cols="20" name="created_at"></textarea> </td> </tr> <tr> <td>タイトル</td> <td> <textarea rows="3" cols="40" name="mes"></textarea> </td> </tr> <tr> <td>URL</td> <td> <textarea rows="3" cols="60" name="url"></textarea> </td> </tr> <tr> <td colspan="2"> <input type="submit" value="書き込む"> </td> </tr> </table> </form> html; }else{ $dbcon = mysql_connect("サーバ","ユーザ名","パスワード"); mysql_set_charset("sjis",$dbcon); mysql_select_db("データベース名"); $today = date("Y/m/d H:i:s"); $created_at = str_replace("\r\n", "", $_POST['created_at']); $mes = str_replace("\r\n", "", $_POST['mes']); $url = str_replace("\r\n", "", $_POST['url']); $sql_mes = "insert into message(updated_at,created_at,mes,url) values('" . $today . "','" . $created_at . "','" . $mes . "','" . $url . "')"; $result_mes = mysql_query($sql_mes); mysql_close($dbcon); print "記事の投稿が完了しました。<br>"; } ?>

  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

登録時にエスケープしましょうね。 http://www.php.net/manual/ja/function.mysql-real-escape-string.php シングルクォーテーション、\は、MySQLで利用される文字なので、 ちゃんとエスケープしてあげないと登録ができないだけではなく、 データ破壊や盗難に繋がります。

wai-girl
質問者

お礼

naktak様 回答をありがとうございます。 mysql_real_escape_string を使い解決できました。

関連するQ&A

  • MySqlに登録したデータを更新すると文字化けする

    PHP5.2 MySql5.1.34 文字コードSJIS MySqlに登録したデータを更新すると文字化けします。 回答をよろしくお願い致します。 // MySQLのクライアントの文字コードをsjisに設定 mysql_query("SET NAMES 'sjis'") or die("can not SET NAMES sjis"); // データを取り出す $sql = "SELECT created_at, mes, url FROM message WHERE (id = ".$_POST["id"].");"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); // 取り出したデータを表示する print "<form action=koushin.php method=post accept-charset=\"Shift_JIS\">"; print "日付:<input type=text size=30 name=created_at value=" . $row["created_at"] . "> "; print("<br>"); print("<br>"); print "メッセージ:<input type=text size=50 name=mes value=" . $row["mes"] . "> "; print("<br>"); print("<br>"); print "URL:<input type=text size=80 name=url value=" . $row["url"] . "> "; print "<input type=hidden name=id value=" .$_POST["id"]. ">"; print("<br>"); print("<br>"); print "<input type=submit value=更新>"; print("<br>"); print("<br>"); print "</form>"; koushin.php <?php $sv = "サーバ"; $dbname = "データベース"; $user = "ユーザー"; $pass = "パスワード"; $conn = mysql_connect($sv, $user, $pass) or die("接続エラー"); mysql_select_db($dbname) or die("接続エラー"); $id = $_POST["id"]; $created_at = $_POST["created_at"]; $mes = $_POST["mes"]; $url = $_POST["url"]; $sql = "UPDATE message SET updated_at = now() , created_at = '{$created_at}' , mes = '{$mes}' , url = '{$url}' WHERE id = $id"; $res = mysql_query($sql, $conn) or die("更新エラー"); mysql_close($conn); ?>

    • ベストアンサー
    • MySQL
  • textarea内のタグを反映させたいのですが

    http://okweb.jp/kotaeru.php3?q=984300を参考に 改行を犠牲にして自動リンクを利用できるようにしたのですが、 HTMLの一部に編集内容を反映したいため FONTタグ等も利用したいんです。 何か良い方法はありませんでしょうか? よろしくお願いします。 <?PHP 文字制限のため省略ですが参考元と同様です。 ?> <html> <title>テキストファイルのデータ更新</title> </head> <body> <form method="post" action="edit.php"> data1の変更 - <textarea name ="data1" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data1']); ?></textarea><br> data2の変更 - <textarea name ="data2" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data2']); ?></textarea><br> data3の変更 - <textarea name ="data3" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data3']); ?></textarea><br> <input type="submit" value="送信"> </form> <table> <tr><td>data1</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data1']); ?></td></tr> <tr><td>data2</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data2']); ?></td></tr> <tr><td>data3</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data3']); ?></td></tr> </table> </body> </html>

    • 締切済み
    • PHP
  • php MySQL で、更新ボタンを押すと何回も書き込まれる

    いつもお世話になります。 PHP Ver.4.46 MySQL Ver.4.0.27 です。 フォームよりMySQLのデータベースへ書き込んでその内容を表示しようと思っています。 しかし、更新ボタンを押すと 、『情報を再送信する必要があります』と表示され、『はい』を押すと、 テキストボックスの内容が空白なのに同じデータが次々と書き込まれてしまいます。 過去ログを調べてよく似たようなものがあったので http://oshiete1.goo.ne.jp/qa3473685.html 試してみましたが、ダメでした。 //★★★★★★★★の行を追加してみました。 よろしくお願いいたします。 スクリプトは以下のようなものです。 <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table border="1"> <tr> <td>お名前</td> <td><input type="text" name="g_name" size="30"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="g_mail" size="30"></td> </tr> <tr> <td>メッセージ</td> <td> <textarea rows="5" cols="30" name="g_mes"></textarea> </td> </tr> <tr> <td colspan="2"> <input type="submit" value="書き込む" onClick="return confirm('書き込んで良いですか?')"> </td> </tr> </table> </form> <?php $sv = "localhost"; $dbname = "guestbook"; $user = "root"; $pass = "********"; // データベースに接続する $conn = mysql_connect($sv, $user, $pass) or die("接続エラー"); mysql_select_db($dbname) or die("接続エラー"); ?> <?php // POSTメソッドで送信された場合は書き込み処理を実行する if ($_SERVER["REQUEST_METHOD"] == "POST") { // フォームからデータを受け取る $g_name = cnv_dbstr($_POST["g_name"]); $g_mail = cnv_dbstr($_POST["g_mail"]); $g_mes = cnv_dbstr($_POST["g_mes"]); // 名前とメッセージが入力されていればデータの追加を実行する if (!empty($g_name) and !empty($g_mes)) { // データを追加する $sql = "INSERT INTO guestdata(g_name, g_mail, g_mes, g_date) "; $sql .= "VALUES("; $sql .= "'" . $g_name . "',"; $sql .= "'" . $g_mail . "',"; $sql .= "'" . $g_mes . "',"; $sql .= "'" . date("Y/m/d H:i:s") . "'"; $sql .= ")"; $res = mysql_query($sql, $conn) or die("データ追加エラー"); if ($res) { echo "<p>書き込みありがとうございました</p>"; //★★★★★★★★ header("Location:" . $_SERVER["PHP_SELF"] . ".php"); // $_SERVER["REQUEST_METHOD"]=""; //rqg 初期化 これではダメだった }else{ echo "<p>書き込み失敗</p>"; } } // 名前やメッセージが空白の場合はエラーメッセージを出力する else { echo "<p><b>お名前とメッセージを入力してください</b></p>"; } } // SQLコマンド用の文字列に変換する関数 function cnv_dbstr($string) { // タグを無効にする $string = htmlspecialchars($string); // magic_quotes_gpcがONの場合はエスケープを解除する if (get_magic_quotes_gpc()) { $string = stripslashes($string); } // SQLコマンド用の文字列にエスケープする $string = mysql_real_escape_string($string); return $string; } ?>

    • ベストアンサー
    • PHP
  • PHPでMySQLにデーターを追加するところで壁に当たってしまいました

    PHPでMySQLにデーターを追加するところで壁に当たってしまいました。 PHP5.3&MYSQL5.1 1.フォームへ入力 2.確認画面 3.MySQLへデーター追加 1.form <html> <head><title></title></head> <body> <form method="post" action="conf.php"> <table> <tr><th>番号</th><td><input type="text" name="id" /></td></tr> <tr><th>タイトル</th><td><input type="text" name="title" /></td></tr> <tr><th>テキスト</th><td><textarea name="cont" cols="40" rows="5" /></textarea></tr> <tr><th>日付け</th><td><input type="text" name="update" size="10" /></td></tr> </table> <input type="submit" value="送信" /><input type="reset" value="リセット" /> </form> </body> </html> 2.確認画面 <html> <head><title></title></head> <body> <table> <tr><th>番号</th><td><?php echo htmlspecialchars($_POST["id"]) ?></td></tr> <tr><th>タイトル</th><td><?php echo htmlspecialchars($_POST["title"]) ?></td></tr> <tr><th>テキスト</th><td><?php echo htmlspecialchars($_POST["cont"]) ?></td></tr> <tr><th>日付け</th><td><?php echo htmlspecialchars($_POST["update"]) ?></td></tr> </table> <form method="post" action="upld.php"> <input type="hidden" name="did" value="<?php echo htmlspecialchars($_POST["id"]) ?>" /> <input type="hidden" name="title" value="<?php echo htmlspecialchars($_POST["title"]) ?>" /> <input type="hidden" name="cont" value="<?php echo htmlspecialchars($_POST["cont"]) ?>" /> <input type="hidden" name="update" value="<?php echo htmlspecialchars($_POST["update"]) ?>" /> <input type="submit" value="登録" /> </form> </body> </html> 3.MySQLへデーター追加 <?php $Con = mysql_connect("localhost","root",""); if ($Con == false) {dir ("MySQLの接続に失敗。");} if (!mysql_select_db("phpdata",$Con)) {dir ("データーベース接続に失敗。");} $sql = "insert into daimoku(id,title,cont,update) values('".$_POST["id"]."','".$_POST["title"]."','".$_POST["cont"]."','".$_POST["update"]."')";//SQL文の作成 $res = mysql_query($sql) or die(mysql_error());//クエリの実行 mysql_close($Con);//切断 ?> <html> <head> <title></title> </head> <body> <p>ご登録ありがとうございました。</p> <a href="01.php">戻る</a> </body> 以上のコードでデーターの追加が出来ません。 どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • MYSQL

    <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> <table border="1"> <form action="for3.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php $text = htmlspecialchars($_REQUEST['text']); var_dump($_REQUEST); ?> <?php $subject = (isset($_POST['subject']))&&(is_string($_POST['subject'])) ? trim($_POST['subject']) : ''; $text = (isset($_POST['text']))&&(is_string($_POST['text'])) ? trim($_POST['text']) : ''; if (($subject !== "")&&($text !== "")) { $subject = htmlspecialchars($subject); $text = str_replace(array("\r", "\n"), "", nl2br($text)); $fp = fopen('test1.txt', 'a'); flock($fp, LOCK_EX); fwrite($fp, implode('<>', array($text, $subject, date('Y-m-d h:i:s'))) . PHP_EOL); flock($fp, LOCK_UN); fclose($fp); } else { if ($_POST) { $errmsg = "入力が不足しています"; } } if (isset($errmsg)) { printf('<strong style="color:#e01;">%s</strong><br />', $errmsg); } ?> <strong style="color:#e01;">タイトルと本文を入力してください</strong><br /> <?php if (file_exists('test1.txt')) { $fp = fopen('test1.txt', 'r'); while ($line = fgets($fp)) { list($text, $subject, $date) = explode('<>', $line); printf('<div class="box"><strong style="float:left;">%s</strong><small style="float:right;">%s</small><p style="clear:both;">%s</p></div>', $text, $date, $subject); } } ?> </div> </body> </html> phpですでに作成できてる簡易掲示板を MYSQL DBに追加したいにですが参考になるサイトなどないでしょうか・

    • ベストアンサー
    • MySQL
  • 特定の文字が文字化けします

    こんにちは。 とても困ってます。 例えば、phpで echo "<P><FORM ACTION=\"main.php\">"; echo "<METHOD=POST>"; echo "<INPUT TYPE=HIDDEN NAME=res VALUE=\str_request\">"; echo "<INPUT TYPE=HIDDEN NAME=action VALUE=post>"; echo "<TEXTAREA NAME=\"str\" ROWS=\"8\" COLS=\"50\"></TEXTAREA>"; echo "<INPUT TYPE=\"submit\" VALUE=\"send">"; echo "</METHOD></FORM></P>"; と記述して「send」ボタンを押下して文字列をPOSTした場合、 受け取った文字($str)の特定の文字が文字化けします。 特定の文字とは、「る」「れ」「ろ」などです。 どなたか原因がわかる方いらっしゃらないでしょうか?

    • 締切済み
    • PHP
  • このメルフォタグについて…

    <div id="main"> <BR class="clear"> <h2>Contact</h2> <div class="txt"> <table cellspacing="3" cellpadding="3" border=0> <tr> <td>NAME</td> <td><input name="name" type="text" size="30"></td> </tr> <tr> <td>MAIL</td> <td><input name="mail" type="text" size="30"></td> </tr> <tr> <td>URL</td> <td><input name="url" type="text" value="http://" size="30"></td> </tr> <tr> <td valign="top">COMMENT</td> <td><textarea name="msg" cols="30" rows="5">ご感想や管理人へのお便りはこちら☆</textarea></td> </tr> <tr> <td colspan="2" align="right"> <input type="button" name="submit" value="SUBMIT" class="b"></td> </tr> </table> </div> テンプレートをお借りしたのですが、メルフォタグがこのようになっていました。 が、このままでは使用出来ないので、どこに自分のメアドを入れればいいのか教えて下さい。

  • TEXTAREA に入力時の位置

    大きなサイトの入力フォームは、テキスト入力エリア内をクリックすると左上角から入力できますが、以下のようにhtmlを書くと、クリックしたところから入力が始まってしまいます。 大手のように、左上角から入力を始めるようにするにはどうすればいいのでしょうか。 ご存知の方がおられましたら教えてください。 よろしくお願い致します。 <TR> <TD> 下の文: </TD> <TD> <TEXTAREA rows="10" cols="50" name="body"> </TEXTAREA> </TD> </TR>

    • ベストアンサー
    • HTML
  • テキストエリアのブラウザ表示について

    以下のコードを書くと、 Chromでは、大きなテキストエリアが表示されますが、 IE8では、2行で小さく表示されてしまいます。 IEでも大きく表示したいです。 ご存知の方がおられましたら教えてください。 よろしくお願い致します。 <table> <TR> <TD> 文: </TD> <TD> <TEXTAREA rows="10px" cols="50px" name="test"> <img src="test.gif\"> </TEXTAREA> </TD> </TR> </table>

    • ベストアンサー
    • HTML
  • PHP&MySQLのエラー(syntax)への対処

    PHPとMySQLを使った検索プログラムを作ってみているのですが、実際に動かしてみると、検索結果表示画面に以下のようなエラーがでます。 SELECT * FROM (テーブル名) where You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 いろいろとPHPに関するサイトやQ&Aを見て考えてみたのですが、解決策がわかりません。 アドバイス、ご指摘の程お願い戴けないでしょうか。 以下が検索結果表示のコードになります。 <body> <?php $debug = false; //DB Connect $url = "localhost"; $user = "ユーザー名"; $pass = "パスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($HTTP_POST_VARS); //Error Check //Request Method Check if($_SERVER["REQUEST_METHOD"] != "POST") { echo "Error: invalid method"; exit(); } //Create Query $query = "SELECT * FROM テーブル名"; //Create Search Criteria $where = array(); if (isset($_POST['type'])and($_POST['type'] !== '')) { $where[] = sprintf("(type='%s')", mysql_real_escape_string($_POST['type'])); } if (isset($_POST['name'])and($_POST['name'] !== '')) { $where[] = sprintf("(name='%s')", mysql_real_escape_string($_POST['name'])); } if (isset($_POST['address'])and($_POST['address'] !== '')) { $where[] = sprintf("(address like '%%%s%%')", mysql_real_escape_string($_POST['address'])); } if (isset($_POST['description'])and($_POST['description'] !== '')) { $where[] = sprintf("(description like '%%%s%%')", mysql_real_escape_string($_POST['description'])); } if (count($where <> 0)) { $query .= ' where ' . implode('and', $where); } //Result $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); ?> <h2>Search Result</h2><br> <?php if($num_rows == 0) { $message = "No date"; } else { $message = $num_rows ."hits"; echo $message; } ?> <table> <tr> <td>Type</td> <td>Company</td> <td>Address</td> <td>Description of Business</td> </tr> <?php while($row = mysql_fetch_assoc($result)): ?> <tr> <td><?php echo $row['type']; ?></td> <td><?php echo $row['name']; ?></td> <td><?php echo $row['address']; ?></td> <td><?php echo $row['description']; ?></td> </tr> <?php endwhile; ?> </table> </body> 解決策をご指導よろしくお願い申し上げます。

    • ベストアンサー
    • PHP