アプリ版:「スタンプのみでお礼する」機能のリリースについて

php・MySQL初心者です。
何とかここまで自力でやってこれたのですが、もうお手上げで…。
サンプルコードを解析し、部分的に理解しながら進んでる状態です。



やりたいことは、
「ユーザーが入力した文字列の最後の1文字だけを抜き出し、データベースに代入する」です。 ←(2)
ちなみに、
「ユーザーが入力した文字列をそのまま、データベースに代入する」はできました。←(1)

参考に、(1)のソースコードの一部を書きます。
-------------------------------------------
『main.php』
<form action="result.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="<?= $file_maxsize ?>">
タイトル:<INPUT type="text" name="title" size="50"><br>
コメント:<INPUT type="text" name="comment" size="50"><br>
<input type="submit" value="送信">
</form><hr>
-------------------------------------------
『result.php』
$comment = @trim($_REQUEST['comment']);

//※

$query = "insert into main_t (comment, last)"
. " values ('$comment', '$last')";
$result = mysql_query($query);
-------------------------------------------
だいたいこんな感じで(1)は出来ました。
(関係がありそうなところだけを抜き出したつもりです…)
『main.php』で出力して確認もしました。



(2)の現状の私のコードを書きます。
-------------------------------------------
『result.php』
$x = mysql_query("select right('$title', 1)");
$last = mysql_fetch_assoc($x);
-------------------------------------------
これを(1)の //※  の部分に記述してみましたが、うまくいきません。
出力するとなぜか「Ar」と出てきます…泣

『select right('いちもじ', 1)』で『じ』とちゃんと右一文字が取り出せるのをbatファイル?みたいなので確認しました。
このSQL文をPHP内で行いたいのですが、やり方がわかりません…。
(そもそも根本的に間違っているのでしょうか…)



$x = mysql_query("select * from ○○ where 条件");
$last = mysql_fetch_assoc($x);

みたいにfromで検索先や条件を指定して得た「配列」を取得し、表示する方法はネット検索で沢山見つかったのですが、fromやwhereを使わず、結果も配列ではなく1つだけ得られるような場合は、どうすればよいのでしょうか?

わかりづらい文章ですみません;
難しい質問かとは思いますが、PHPやMySQLに詳しい方がいましたら、是非ともご教授いただけたらと思います。
よろしくお願いいたします。

A 回答 (3件)

その後、どうですか?



文字エンコーディングについては、お使いのエンコーディングを指定して(あるいは内部エンコーディングでよければ省略してもよいです)、以下のコードで動くのではないでしょうか?
エンコーディングはutf8としていますが、これは適宜変えてください(もしくは省略してください)


$last_char = mb_substr($str, mb_strlen($str,'utf8')-1, 1, 'utf8');

まだ質問が閉じられていなかったので、気になりました。
    • good
    • 0

通りがかりのものです。


ユーザからの入力の最後の一文字を取得するために、データベースを使用する必要はありません。PHPで行うのが一般的です。
まず、mb_系の関数が使えることを確認してください。多分使えます。もし使えない場合は使えるようにしてください。
http://php.netで、これらの関数の使い方を学んでください。

健闘を祈る。

参考URL:http://php.net/
    • good
    • 0

mb_substr


http://php.net/manual/ja/function.mb-substr.php

サポートされる文字エンコーディング
http://php.net/manual/ja/mbstring.supported-enco …

//※の部分は以下のようになるかと

$encoding = "SJIS";

$last = mb_substr($title, -1, 1, $encoding);


※PHPのリファレンス見ただけでテストとかしていません。エンコーディングは環境に応じて変えてください。

ご参考になれば幸いです。


>php・MySQL初心者です。
それどころか、プログラミング自体、初心者ですよね・・・。
これ難しい質問じゃなくて文字列処理の問題で、基礎的なことです。ようするに勉強不足なだけです。(だからPHPをろくにしらない私でも答えられるわけで・・・)
ネットは基礎的なことを学ぶには不向きな面もありますので、書籍で基礎を体系的に学ぶことをおすすめします。(一番いいのは知っている人に教えてもらうことですが、難しいですよね)

あと、エスケープ処理を行ってください。(下のリファレンスの例を参考にしてください)

mysql_real_escape_string
http://php.net/manual/ja/function.mysql-real-esc …

mysqli_real_escape_string
http://php.net/manual/ja/mysqli.real-escape-stri …

リファレンスに mysql_query とかは現在では非推奨とあるので、注意してください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!