• ベストアンサー

PHPの自作関数がよくわかりません

同じ処理をするときに関数を作ればソースが短くなるのだろうと思うのですがいまいち分かりません。 phpでユーザー登録の確認画面を作っていまして、名前やメールアドレス等によって、POSTの部分と変数が違うだけでほぼ一緒ですので、関数化できないかと考えています。 自作関数事態がよくわかっていません。アドバイスお願い致します if(isset($_POST['fname'])){ $fname=$_POST['fname']; } else{ $fname=""; }

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

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

$fname = Func_Get_Name($_POST); function Func_Get_Name($post){  if(isset($post['fname'])){   return $post['fname'];  }else{   return "";  } } って事かな? 質問の意味を勘違いしてたら失敬。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

相互リンク http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1393172938 私も三項演算子を使うことが多いです

全文を見る
すると、全ての回答が全文表示されます。
  • t_ohta
  • ベストアンサー率38% (5097/13328)
回答No.1

今やろうとしているような内容なら関数化は向かないような気がしますね。 関数化するより $a = array('fname', 'lname', ・・・・・); foreach ($a as $b) { if (isset($_POST[$b]) { $$b = $_POST[$b]; } else { $$b = ''; } } として、繰り返しの処理にした方がスッキリしますね。

nissanngtr34
質問者

お礼

お返事ありがとうございます。 なるほど。。。配列にしてしまってまとめるのですか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • phpのページが白紙で表示される

    phpのページが白紙で表示される phpでメールフォームを作成しています。 フォーム画面から確認画面に遷移すると ページが白紙で表示されてしまい困っています。 生成されたページのソースをブラウザで見ても 何も書かれておらず、本当に白紙の状態です。 <html>より前に書いたソースに問題がありそうですが 理由がわかりません。 どなたか解決策にお心当たりございましたらお願いいたします。 以下問題のページ<html>までのソース ———————————————————— <?php function checkInput($var) { if (is_array($var)) { return array_map('checkInput', $var); } else { if (get_magic_quotes_gpc()) { $var = stripslashes($var); } if (preg_match('/¥0/', $var)) { die('不正な入力です'); } if (!mb_check_encoding($var, 'UTF-8')) { die('不正な入力です'); } return $var; } } session_start(); $_POST = checkInput($_POST); $sei = isset($_POST['sei']) ? $_POST['sei'] :NULL; $mei = isset($_POST['mei']) ? $_POST['mei'] :NULL; $address = isset($_POST['address']) ? $_POST['address'] :NULL; $email = isset($_POST['email']) ? $_POST['email'] :NULL; $error = array(); if (trim($sei) == '') { $error[] = '必須項目です'; } else if (mb_strlen($sei) > 10) { $error[] = '10文字以内でお願いいたします'; } if (trim($mei) == '') { $error[] = '必須項目です'; } else if (mb_strlen($mei) > 10) { $error[] = '10文字以内でお願いいたします'; } if (trim($address) == '') { $error[] = '必須項目です'; } else if (mb_strlen($address) > 100) { $error[] = '100文字以内でお願いいたします'; } if (trim($email) == '') { $error[] = '必須項目です'; } else { $pattern = '/^([a-z0-9¥+_¥-])(¥.[a-z0-9¥+_¥-]+)*@([a-z0-9¥-]+¥.)+[a-z]{2,6}$/iD'; if (!preg_match($pattern, $email)) { $error[] = 'メールアドレスの形式が正しくありません'; } $_SESSION['sei'] = $sei; $_SESSION['mei'] = $mei; $_SESSION['address'] = $address; $_SESSION['email'] = $email; $_SESSION['error'] = $error; if(count($error) > 0) { $dirname = dirname($_SERVER['SCRIPT_NAME']); $dirname - $dirname == DIRECTORY_SEPARATOR ? '' : $dirname; $uri = 'http://' . $_SERVER['SERVER_NAME'] . $dirname . '/present.php'; header('HTTP/1.1 303 See Other'); header('Location: ' . $uri); } else { ?> <html> ———————————————————— よろしくお願いいたします。

    • 締切済み
    • PHP
  • phpの自作関数の戻り値について

    PHPで任意のCSVファイルをアップロードしてUTF6で別名保存するという関数です。 メインのupload.phpから require_once('UTF8CONV.php'); で呼び出しています。メインの部分は動きますが、戻り値(メッセージを変数で返したい)がうまくいかず並んでいます 以下UTF8CONV.php <?php //linuxのnkfコマンドでSJISからUTF8にファイル変換 //$INfile='sjistest.csv'; //$OUTfile='utf8.csv'; //パス自動取得する。 function convutf8($INfile,$OUTfile) { if(isset($_SERVER['DOCUMENT_ROOT'])||isset($_SERVER['PHP_SELF'])) { $PHPSELF=explode('/',$_SERVER['PHP_SELF']); $getpath= $_SERVER['DOCUMENT_ROOT'].$PHPSELF[1]; $command="nkf -w -Lw "."$getpath/"."upload/"."$INfile"." > "."$getpath/"."upload/"."$OUTfile"; //echo $command; exec($command); } else {$A="パス情報が取得できません"; return $A; } $filesize=filesize("$getpath/"."upload/"."$OUTfile"); if (!file_exists( "$getpath/"."upload/"."$OUTfile" )) { //echo "<br/>"; $A="ファイルが存在しません"; return $A; } else { $A="アップロードされたファイル".$OUTfile."は文字コードUTF8でファイルサイズは".$filesize."バイトです。"; return $A; } } ?> returnをechoに置き換えうると、表示されますが「return」でメイン(呼び出し側で、Echoしてもprint_rしても表示されません。CSVテキストとはアップされ、UTF8にOUTfileで指定した名称で保存されています。Returnの変数をJAVASCRIPTで情報window表示したいので、変数でほしいです。

    • 締切済み
    • PHP
  • datediff関数?

    あるオープンソースで $変数 = datediff( time() ,$変数); という関数があります。 また、その出力が 0d 16:00 という風になっています。 phpにはdatediff関数というものが無いかと思いますので関数を自作しなければならないと 思います。 そのユーザー定義関数が無いということは考えられますでしょうか? 私が見つけられないだけでしょうか? ご検討のつく片宜しくお願いします。

    • ベストアンサー
    • PHP
  • issetで変数チェック

    php初心者です issetで変数の中に値が入っているか調べたいのですがphp5.4でフォームから文字列を送るとfalseになってしまいます。 文字列が入っているかチェックしたいのですがどうしたらいいでしょうか? if(isset($_POST['title'])&&$_POST['title']!=''){ $title = $_POST['title']; }else{ $title = ''; } よろしくお願いします

    • ベストアンサー
    • PHP
  • PHPで変数のデータ受け渡しについて

    HTMLで下記のようにして入力された データを次ページに受け渡し、 issetで変数に値が代入されていれば ifで分岐処理させたいのですが、 elseの処理しかできません。    <FORM action="次ページ.php" method="GET">    キーワード<BR>    <INPUT type="text" name="keyword">    <INPUT type="submit" value="ボタン"> ボタンをクリックしたら次ページで    if (isset($keyword)) {     分岐処理1;     }    else{     分岐処理2;     } と行いたいのですが、$keywordに値が 代入されているにも関わらず elseの処理がされてしまいます。 どこか構文が間違っているのでしょうか。 どうか教えてください。

    • ベストアンサー
    • PHP
  • 関数の引数に未定義の変数を渡すとエラーが出る

    自作の関数で、issetとemptyを一緒に判定する関数を作っているのですがエラーが出ます。 ある変数が「未定義」または「null」または「""(空白)」の場合はnullである、という関数を作りたいです。 ------------------------------------------ function is_null_ex($value){  if (!isset($value)) {return true;}               // 未定義かnullの場合、trueを返す  else if (strlen(strval($value)) === 0) {return true;}   // 空白の場合はtrueを返す  else {return false;}                      // $valueに値が入っている場合はfalseを返す } is_null_ex($val); ------------------------------------------ 上記の関数で$valueが未定義の場合にfuncを使うと、次のようなエラーが出ます。 Notice: Undefined variable: val つまり、未定義の変数を引数に渡すとエラーが出ます。 「未定義なら関数に渡さなければ?」と思うかもしれませんが、そもそもこの関数は「未定義」または「null」または「""(空白)」を判定したい関数なのです。 この場合、どうすれば良いのでしょうか? エラーは出ますが上記の関数で「if (!isset($value)) {return true;}」の部分できちんと判定はされています。 PHP5.3系で運用しています。 ぞうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPについて教えてください。

    こんにちは。いつもお世話になります。shingetsuです。先日もPHPについて質問させていただいたのですが、また別のことで行き詰ったのでよろしければアドバイスをいただければと思います。よろしくお願いします。 if(!$_POST['name'] OR !$_POST['passwd'] OR !$_POST['address'] OR !$_POST['tel'] OR !$_POST['email']){ echo ("空欄があります。すべて記入して下さい。"); }else{ echo ("登録ありがとうございます。"); } というプログラムで、「登録ありがとうございます。」という箇所を別のPHPに誘導できるリンクにしたいのですが、どのような方法がありますでしょうか。 HTMLを使えば可能なわけですが、PHPとなるとどうなるのかわからなくなりました。簡単なヒントなどでもよろしいので教えてください。お願いします。

    • ベストアンサー
    • PHP
  • php言語の脆弱性について

    php言語の脆弱性について パスワード認証において、phpのstrcmp, strcasecmpといった関数には脆弱性があると聞きます。 そこで、具体的にどのような脆弱性があるのかお伺いしたいと思います。 たとえば、認証画面にパスワードの送信フォームがあり、パスワードが分からない場合 $pass = **** if (isset($_POST['pass'])) if (strcasecmp($_POST['pass'], $pass) == 0) echo "Correct!"; else echo "Incorrect" というプログラムになっていた場合、送信フォームにどのような文字列を渡せば認証が通るのでしょうか。 また、認証が通る仕組みについても教えていただけたらと思います。

  • HTMLとPHP

    こんにちは。いつもお世話になっています。 PHPとHTMLを勉強していてわからないことがあったのでよろしければ教えてください。 POSTでデータを取得するときにデータがあるか無いか判定してから、項目すべてに記入してあれば登録確認ページへ、空欄があればエラーページへいくようなサイトをつくったのですが、確認ページでデータが表示されませんでした。 if(!$_POST['name'] OR !$_POST['passwd'] OR !$_POST['address'] OR !$_POST['tel'] OR !$_POST['email']){ echo ("空欄があります。すべて記入して下さい。"); }else{ header("Location: http://localhost/my/myshop/confirm_user.php"); } エラー表示ページ(error.php)でこのように判定し、空欄がなければエラーページから確認ページ(confirm_user.php)へいくようにしました。 登録フォーム(input.php)で<FORM ACTION="error.php","confirm_user.php" METHOD="post"> としたのですが、2つのPHPにデータを送れないのでしょうか?

    • ベストアンサー
    • PHP
  • PHP ログインについて

    PHPを使い会員サイトを作っています。 遷移としては index→login→top でログインして中の各ページで、サイトロゴをクリックすればマイページトップに戻るようにしたいです。 ログイン時はPOSTでデータを受け取り、ログイン後はセッションで全ページを繋いでいます。 そののtopで困っています。 ログインしようとすると画面が真っ白になり、検証を見てもエラーは出ていませんでした。エラー表示になるよう設定しており、今までのエラーは見れていました。 session_start(); if(!isset( $_SESSION["uid"])&&(!isset( $_SESSION["pass"]))){ if(!isset ( $_POST ["uid"] )&&(!isset( $_POST["pass"]))){ header ( "Location: login.php" );} } if((isset ( $_POST ["uid"] ))&&(isset( $_POST["pass"]))){ login(); exit; } 上記で$_SESSIONのuidとpassがなければ$_POSTのuidとpassをチェック。$_POSTもなければ、login画面に移動。 $_POSTが入っていたら次のIF文で、関数login()。 関数login()は下記の通りです。 function login(){   function inputCheck($uid, $pass){ $flg=0; // IDの登録チェック require("dbConnect.php");//接続 $sql = "select * from usr where uid ={$uid}" ; //echo "sql=".$sql."<br>"; $result = $dbInfo->query ( $sql ); $record = $result->fetch ( PDO::FETCH_ASSOC ); $count = $result->rowCount (); if($count<=0){ echo "このIDは存在しません<br>"; $flg=1; } if($pass<>$record["pass"]){ echo "パスワードが違います<br>"; $flg=1; // データベースの切断 $dbInfo = null; } return $flg; } // 送信データの取得 $uid = htmlspecialchars($_POST ["uid"], ENT_QUOTES); $pass = htmlspecialchars($_POST ["pass"], ENT_QUOTES); $flg=inputCheck($uid, $pass); if($flg<>0){ require("login.php"); exit; }} 関数に入れ子で関数が使えると見たので中に入れましたが、inputCheck()をlogin()の外に出してみても同じように画面が真っ白になりました。 最初にログインだけ作って動かした際にはログインすることが出来ました。 ログイン状態のチェックが悪いのか関数の使い方が悪いのか、わかりません。 ご教授いただければ幸いです。

    • ベストアンサー
    • PHP