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

if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。
以下のPHPプログラム名は keizi.php です。
その
if(preg_match("/[^0-9]/",$gu_d)){
ですが どんな意味がありますか?

ちなみに、以上との関連性がある
/** スレッドグループ番号(gu)を取得し$gu_dに代入 **/
$gu_d=$_GET["gu"];
 ですが!
同ファイル内の

http://afurieitohannei.la.coocan.jp/sns/keizi_to …

の <a href="keizi.php?gu=$kekka[0]">$kekka[0] $kekka[1]</a>
とリンクされいると思われます。

よろしくお願いいたします。

<?php

/** データベース情報等の読み込み **/
require_once("data/db_info.php");

/** データベースへ接続、データベース選択 **/
$s=new PDO("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS);

/** スレッドグループ番号(gu)を取得し$gu_dに代入 **/
$gu_d=$_GET["gu"];

/** $gu_dに数字以外が含まれていたら処理を中止 **/
if(preg_match("/[^0-9]/",$gu_d)){
print <<<eot1
不正な値が入力されています<BR>
<a href="keizi_top.php">ここをクリックしてスレッド一覧に戻ってください</a>
eot1;

/** $gu_dに数字以外が含まれていない、正常な値での処理 **/
}elseif(preg_match("/[0-9]/",$gu_d)){

/** 名前とメッセージを取得してタグを削除 **/
$na_d=isset($_GET["na"])?htmlspecialchars($_GET["na"]):null;
$me_d=isset($_GET["me"])?htmlspecialchars($_GET["me"]):null;

/** IPアドレス取得 **/
$ip=getenv("REMOTE_ADDR");

/** スレッドグループ番号(gu)に一致するレコードを表示 **/
$re=$s->query("SELECT sure FROM tbj0 WHERE guru=$gu_d");
$kekka=$re->fetch();

/** スレッド内容の表示文字列$sure_comを作成 **/
$sure_com="「".$gu_d." ".$kekka[0]."」";

/** スレッド表示のタイトル等書き出し **/
print <<<eot2
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SQLカフェ $sure_com スレッド</title>
</head>
<body style="background-color:silver">
<div style="color:purple;font-size:35pt">
$sure_com スレッド!
</div>
<br>
<div style="font-size:18pt">$sure_com のメッセージ</div>
eot2;

/** 名前($na_d)が入力されていればtbj1にレコード挿入 **/
if($na_d<>""){
$re=$s->query("INSERT INTO tbj1 VALUES (0,'$na_d','$me_d',now(),$gu_d,'$ip')");
}

/** 水平線表示 **/
print "<hr>";

/** 日時の順にレスデータを表示 **/
$re=$s->query("SELECT * FROM tbj1 WHERE guru=$gu_d ORDER BY niti");

$i=1;
while($kekka=$re->fetch()){

print "$i($kekka[0]):$kekka[1]:$kekka[3] <br>";
print nl2br($kekka[2]);
print "<br><br>";
$i++;
}


print <<<eot3
<hr>
<div style="font-size:18pt">
$sure_com にメッセージを書くときはここにどうぞ
</div>
<form method="GET" action="keizi.php">
<div>名前 <input type="text" name="na"></div>
メッセージ
<div>
<textarea name="me" rows="10" cols="70"></textarea>
</div>
<input type="hidden" name="gu" value=$gu_d>
<input type="submit" value="送信">
</form>
<hr>
<a href="keizi_top.php">スレッド一覧に戻る</a>
</body>
</html>
eot3;

/** $gu_dに数字以外も、数字も含まれていないときの処理 **/
}else{
print "スレッドを選択してください。<br>";
print "<a href='keizi_top.php'>ここをクリックしてスレッド一覧に戻ってください</a>";
}

?>
参考URL
http://afurieitohannei.la.coocan.jp/sns/tbj0.htm

質問者からの補足コメント

  • うーん・・・

    以上のプログラムですが!

    /* $gu_dに数字以外が含まれていたら処理を中止 */
    if(preg_match("/[^0-9]/",$gu_d)){

     これは 変数 $gu_dに数字が含まれていたら処理を中止
    なので リンク先の"gu"に数字が含まれていた場合の判断
    基準ですよね 
    次に
    /* $gu_dに数字以外が含まれていない、正常な値での処理 */
    }elseif(preg_match("/[0-9]/",$gu_d)){

    数字以外が含まれていない だったら 処理を実行する と思います。
    すなわち、数字以外の言語しか受け付けないよう! と意味ですよね
    違っていたなら ごめんなさい です。
     
     もし、私が正しければ掲示板のスレッド(題目・タイトル)
    数字が含まれている場合でもちゃんと数字がが出てきます。
     これは なぜですか?私の疑問です。よろしくお願いいたします。

      補足日時:2022/05/06 23:22
  • うーん・・・

    試しに
    /* $gu_dに数字以外が含まれていたら処理を中止 */
    if(preg_match("/[^0-9]/",$gu_d)){の
    [^0-9]の^caretを取り除き
    if(preg_match("/[0-9]/",$gu_d)){ としました。

    次に
    * $gu_dに数字以外が含まれていない、正常な値での処理 */
    elseif(preg_match("/[0-9]/",$gu_d)){
    [0-9]に^caretを追加して
    elseif(preg_match("/[^0-9]/",$gu_d)){
    として 試しました結果は

    1234 と入力したところ 
    不正な値が入力されています
    ここをクリックしてスレッド一覧に戻ってください
    と出ました。

    次に
    ああああ と入力したところ
    不正な値が入力されています
    ここをクリックしてスレッド一覧に戻ってください
    と出ました。

      補足日時:2022/05/06 23:53
  • うーん・・・

    なんでこんな結果となるのでしょうか?
    ちゃんと整理しないと、こんがらがって分からなくなりそうです。

    なんだか 参考書の違った結果になったような気がします。
    難しいですね 参考書がすべて正しいとは思わないのですが
    結果で全てか たまたま そうなったのか
    環境は一緒でも インフラ変えたら違ったなどなど
     試さないとわかりまりませんね?
    経験が私にはないので なんとも言えないです。

      補足日時:2022/05/06 23:58

A 回答 (1件)

>if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。



は質問文に

>/** $gu_dに数字以外が含まれていたら処理を中止 **/
>if(preg_match("/[^0-9]/",$gu_d)){

とありますけど、物足りない点があるのなら具体的に書かれた方が。
と、未経験者は思います。
    • good
    • 1
この回答へのお礼

ご回答下さいましてありがとうございます。
回答が付かないと思っていましたので嬉しいです^^

 物足りない点があるのなら具体的に書かれた方が。

ご指摘いただきましてありがとうございます。
 
そうでした! 
 この プログラム 意味を理解するうえで
全体の補足に「理解に苦しんでいる点」を書き込みます。
のでよろしくお願いいたします。

お礼日時:2022/05/06 23:02

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