phpのUndefined variableエラーの原因と解決方法

このQ&Aのポイント
  • phpファイルを実行する際に、Undefined variableエラーが発生しました。エラーの原因は、変数$pElementが定義されていないことです。
  • Undefined variableエラーを解決するためには、変数$pElementを事前に定義する必要があります。変数の初期値を設定することでエラーを回避することができます。
  • 初歩的なエラーですが、変数を使用する前に必ず定義するようにしましょう。また、エラーメッセージに表示されるファイルと行数を確認し、エラーの発生箇所を特定することも重要です。
回答を見る
  • ベストアンサー

php Undefined variableエラー

下記ファイルを実行した際、Notice: Undefined variable: pElement in C:\xampp\htdocs\scrape_func.php on line 31とエラーが出てしまいます。どこに問題がありますでしょうか?初歩的な質問かと思いますが、よろしくお願い致します。 <?php /* スパイダリング関数群のインクルード */ include( "scrape_func.php" ); /* getURL関数を使用して、ページの生データを取得する。 */ $_rawData = getURL( "http://www.oreilly.co.jp/catalog/soon.shtml" ); /* 生データをutf-8に変換する。 */ $_rawData = mb_convert_encoding($_rawData, "UTF-8", "auto"); /* 解析しやすいよう、生データを正規化する。 */ $_rawData = cleanString( $_rawData ); /* 次は若干ややこしい。 必要な項目の開始部分と終了部分は、事前にhtmlから確認してある。こういったものを利用して必要なデータを取得する。 */ $_rawData = getBlock( "<font COLOR=\"#80000\">", "</td></tr>", $_rawData ); /* これで箇条書きに必要な特定データを入手できた。ここでは項目を配列化した後、繰り返しによって、処理を行っている。 */ $_rawData = explode( "<P>", $_rawData ); /* 繰り返しを行いながら、個々の項目を解析する。 */ foreach( $_rawData as $_rawBlock ) { $_item = array(); $_rawBlock = trim( $_rawBlock ); if( strlen( $_rawBlock ) > 0 ) { /* 番兵を最後尾に付加する */ $_rawBlock = $_rawBlock . "<P>"; /* 項目のタイトルは<DD class="title"> ... <p>間にある。 */ $_item[ "title" ] = strip_tags( getBlock( "<DD class=\"title\">", "p", $_rawBlock ) ); /* ISBNは<DT>と<DDの間にある。 */ $_item[ "isbn" ] = getBlock( "<DT>", "<DD>", $_rawBlock, false ); /* スパイダリンした結果を表示する */ print( implode( chr(10), $_item ) . chr(10) . chr(10) ); /* 文字列として保存する (後述するメールの例で使用。) */ $_text .= implode( chr(10), $_item ) .chr(10) . chr(10); } } ?> scrape_func.php <?php function getURL( $pURL ) { $_data = null; if( $_http = fopen( $pURL, "r" ) ) { while( !feof( $_http ) ) { $_data .= fgets( $_http,1024 ); } fclose( $_http ); } return( $_data ); } function cleanString( $pString ) { $_data = str_replace( array( chr(10), chr(13), chr(9) ), chr(32), $pString ); while( strpos( $_data, str_repeat( chr(32), 2 ), 0 ) != false ) { $_data = str_replace( str_repeat( chr(32), 2 ),chr(32), $_data ); } return( trim( $_data ) ); } function getBlock( $pStart, $pStop, $pSource, $pPrefix = true ) { $_data = null; $_start = strpos( strtolower( $pSource ), strtolower( $pStart ), 0 ); $_start = ( $pPrefix == false ) ? $_start + strlen( $pStart ) : $_start; $_stop = strpos( strtolower( $pSource ), strtolower( $pStop ), $_start ); if($_start > strlen( $pElement ) && $_stop > $_start ){ $_data = trim( substr( $pSource, $_start, $_stop - $_start )); } return( $_data ); } function getElement( $pElement, $pSource ) { $_data = null; $pElement = strtolower( $pElement ); $_start = strpos( strtolower( $pSource ), chr(60) . $pElement, 0 ); $_start = strpos( strtolower( $pSource ), "</" . $pElement . chr(62), $_start ); if( $_start > strlen( $pElement ) && $_stop > $_start ) { $_data = trim( substr( $pSource, $_start, $_stop - $_start ) ); } return( $_data ); } ?>

noname#163332
noname#163332
  • PHP
  • 回答数3
  • ありがとう数2

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

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

> if($_start > strlen( $pElement ) && $_stop > $_start ){ ↓ if(isset($pElement) && $_start > strlen( $pElement ) && $_stop > $_start ){ ※Notice: Undefined variable: pElement in C:\xampp\htdocs\scrape_func.php on line 31 「Notice: Undefined variable」 でgoogle検索してみましょう。 http://www.google.co.jp/search?q=Notice%3A+Undefined+variable&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a エラーメッセージで検索をすることが解決の第一歩です。

noname#163332
質問者

お礼

ご回答ありがとうございます。そもそも、変数$pElementに値を格納していなかったのが、問題だったんですね。それで、undefined valuableエラーと出てしまっていたと。ありがとうございます。おかげさまで無事解決致しました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

ん~・・・ >function getBlock( $pStart, $pStop, $pSource, $pPrefix = true ) { >$_data = null; >$_start = strpos( strtolower( $pSource ), strtolower( $pStart ), 0 ); >$_start = ( $pPrefix == false ) ? $_start + strlen( $pStart ) : $_start; >$_stop = strpos( strtolower( $pSource ), strtolower( $pStop ), $_start ); >if($_start > strlen( $pElement ) && $_stop > $_start ){ >$_data = trim( substr( $pSource, $_start, $_stop - $_start )); >} >return( $_data ); >} このユーザー関数getBlock()の中で$pElementを利用していますが 関数の外側からも持ってきていないし、なかで宣言もしていないので $_start > strlen( $pElement )自体無意味ですね よくよく仕様を見直した方がよいでしょう

noname#163332
質問者

お礼

ご回答ありがとうございます。そもそも、変数$pElementに値を格納していなかったのが、問題だったんですね。それで、undefined valuableエラーと出てしまっていた訳なんですね。ありがとうございます。おかげさまで無事解決致しました。

回答No.1

> if($_start > strlen( $pElement ) && $_stop > $_start ){ ↓ if(isset($pElement) && $_start > strlen( $pElement ) && $_stop > $_start ){ ※Notice: Undefined variable: pElement in C:\xampp\htdocs\scrape_func.php on line 31 「Notice: Undefined variable: * in * on line *」(環境によって変わる部分は「*」にする) でgoogle検索してみましょう。 http://www.google.co.jp/search?q=Notice:+Undefined+variable:+*+in+*+on+line+*&hl=ja&safe=off&client=firefox-a&hs=cOa&rls=org.mozilla:ja:official&prmd=imvnsfd&lr=lang_ja&sa=X&ei=1tpDT4rCCoyTiQedxLW8BA&ved=0CBwQuAE&biw=1440&bih=715 エラーメッセージで検索をすることが解決の第一歩です。

関連するQ&A

  • PHP Undefinedvariableエラー。

    PHP初心者です。ソースを実行すると、下記のようにエラーメッセージが出てしまいます。どこに問題がありますでしょうか? 初歩的な質問かと思いますが、よろしくお願い致します。 Notice: Undefined variable: pElement in C:\xampp\htdocs\scrape_func.php on line 29 <?php /* スパイダリング関数群のインクルード */ include( "scrape_func.php" ); /* getURL関数を使用して、ページの生データを取得する。 */ $_rawData = getURL( "http://www.oreilly.co.jp/catalog/soon.shtml" ); /* 生データをutf-8に変換する。 */ $_rawData = mb_convert_encoding($_rawData, "UTF-8", "auto"); /* 解析しやすいよう、生データを正規化する。 */ $_rawData = cleanString( $_rawData ); /* 次は若干ややこしい。 必要な項目の開始部分と終了部分は、事前にhtmlから確認してあ る。こういったものを利用して必要なデータを取得する。 */ $_rawData = getBlock( "<font COLOR=\"#80000\">", "</td></tr>", $_rawData ); /* これで箇条書きに必要な特定データを入手できた。ここでは項目を配列化した後、繰り返 しによって、処理を行っている。 */ $_rawData = explode( "<P>", $_rawData ); /* 繰り返しを行いながら、個々の項目を解析する。 */ foreach( $_rawData as $_rawBlock ) { $_item = array(); $_rawBlock = trim( $_rawBlock ); if( strlen( $_rawBlock ) > 0 ) { /* 番兵を最後尾に付加する */ $_rawBlock = $_rawBlock . "<P>"; /* 項目のタイトルは<DD class="title"> ... <p>間にある。 */ $_item[ "title" ] = strip_tags( getBlock( "<DD class=\"title\">", "p", $_rawBlock ) ); /* ISBNは<DT>と<DDの間にある。 */ $_item[ "isbn" ] = getBlock( "<DT>", "<DD>", $_rawBlock, false ); /* スパイダリンした結果を表示する */ print( implode( chr(10), $_item ) . chr(10) . chr(10) ); /* 文字列として保存する (後述するメールの例で使用。) */ $_text .= implode( chr(10), $_item ) .chr(10) . chr(10); } } ?>

    • 締切済み
    • PHP
  • PHPでUndefined variableエラー

    PHPでUndefined variableエラーが発生します: <b>Notice</b>: Undefined variable: result in <b>/opt/lampp/htdocs/samples/chapter3/3-2/gen_defined_vars.php</b> on line <b>58</b><br /> どうやって直せばいいのか教えてください。 58行目がおかしいと出ていますが、$resultが未定義なので54行目のことだと思います。 ちなみに 9ー12行目は自分で直しました。お願いします。 1 <html> 2 <head> 3 <title>環境変数コード生成フォーム</title> 4 </head> 5 <body> 6 <?php 7 // 選択リストの値を取得 8 $name = "param"; 9 if ( isset($_POST[$name]) ) { 10 $selected_value = $_POST[$name]; 11 } 12 //$selected_value = isset($_POST[$name]) ? $_POST[$name] : ""; 13 14 // 定義済み変数を取得 15 $array = get_defined_vars(); 16 17 // 配列から選択リストを作成する関数 18 // パラメータ:配列/選択リスト名/選択値 19 function disp_list($array, $name, $selected_value = "") { 20 echo "<select name=\"" . $name . "\">"; 21 while (list($value, $text) = each($array)) { 22 echo "<option "; 23 if ($selected_value == $value) { 24 echo " selected "; 25 } 26 echo " value=\"".$value."\">" . $value . "</option>"; 27 } 28 echo "</select>"; 29 } 30 31 // 入力内容を処理する 32 $temp = "<?php echo \$_SERVER[\"%s\"] ?>"; 33 if (isset($_POST["param"])) { 34 $param = $_POST["param"]; 35 $result = sprintf($temp, $param); 36 } 37 else { 38 $param = ""; 39 } 40 41 ?> 42 <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> 43 <table cellpadding="10"> 44 <tr> 45 <td>環境変数を選択:<br /> 46 <?php echo disp_list($array["_SERVER"], $name, $selected_value); ?> 47 <input type="submit" value="作成" name="sub1"> 48 </td> 49 </tr> 50 <tr> 51 </tr> 52 <tr> 53 <td>作成されたコード:<br /> 54 <textarea name="ta1" rows="3" cols="40"><?php echo $result ?></textarea> 55 </td> 56 </tr> 57 </table> 58 </form> 59 </body> 60 </html>

    • ベストアンサー
    • PHP
  • PHPによるスクレイピングについて。

    amazonでapiを使わず、スクレイピングをしたいと考えています。ソースを取得後、取得ソース中の下記部分を正規表現で抽出したいと考えていますが、実行すると、「Array ( [0] => Array ( ) [1] => Array ( ) )」 と表示されてしまいます。どこに問題がありますでしょうか? <a href="http://www.amazon.co.jp/gp/offer-listing/B000JJRWIU/ref=sr_1_olp_9/377-5056805-4862865?ie=UTF8&s=dvd&qid=1330077227&sr=1-9">9 点の全新品/中古品を見る</a> <span class="otherprice">¥ 1,197</span>より</span></td></tr><tr><td class="pointsEarnable"></td></tr><tr><td class="fastTrackList">通常5~7日以内に発送</td></tr> <tr><td class="srListSSS"><span class="srEmphSSS">通常配送無料</span></td></tr> <?php include( "scrape_func2.php" ); $_rawData = getURL( "http://www.amazon.co.jp/%E6%81%8B %E6%84%9B-%E5%A4%96%E5%9B%BD%E6%98%A0%E7%94%BB- DVD/b/ref=bw_ab_562016_5? ie=UTF8&node=589344&pf_rd_p=106708969&pf_rd_s=left- 1&pf_rd_t=101&pf_rd_i=562016&pf_rd_m=AN1VRQENFRJN5&pf_rd_r=1G XM2TY1R5SDE3MA35XJ" ); $_rawData = mb_convert_encoding($_rawData, "SJIS", "ASCII,JIS,UTF-8,EUC-JP,SJIS"); /*<a href="http://www.amazon.co.jp/gp/offer-listingで始まり、</span></td></tr>で終わる部分を抽出*/ preg_match_all("/(<a href=\"http:\/\/www.amazon.co.jp\/gp\/offer-listing <\/span><\/td><\/tr>)/", $_rawData, $match); print_r($match); ?> scrape_func2.php <?php function getURL( $pURL ) { $_data = null; if( $_http = fopen( $pURL, "r" ) ) { while( !feof( $_http ) ) { $_data .= fgets( $_http,1024 ); } fclose( $_http ); } return( $_data ); } ?>

    • ベストアンサー
    • PHP
  • [PHP]formのtextareaの改行を消せない

    [PHP]formのtextareaの改行を消せない formのtextareaに改行して数行のデータを入れ、それを改行毎にexplodeで分けて居るのですが、1個1個のデータから改行の情報が消えません。 textareaに 1234 2345 3456 $data=explode("\n",$_POST[textarea]) で、dataに配列として入れて、 echo $data[0] . "," . $data[1] . "," . $data[2]; と表示させてみると、 1234 ,2345 ,3456 と4ケタの数字のあとに半角スペースが入ります。 HTMLソースで見ると改行されているようです。 str_replace("\n","",$data[0]) とやっても、消えません。 この改行(半角スペース)があるため、 if (mb_strlen($data[0])==4) で、Trueにならなくて困っています。 if (mb_strlen($data[0])==4 or mb_strlen($data[0])==5) とすることで解決は出来るのですが、そのほかでも使用したいので、出来れば最初からこの改行(半角スペース)を消したいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • $error配列がUndefined indexに

    簡単な入力フォームを初心者用の本に沿って作成しているのですが、 入力フォームのチェックで$error配列を使う部分で、 nameがblankかどうか確認する部分で、なぜかnameがNotice: Undefined indexとなってしまいます。 お詳しい方、下記のコードを見て何か原因をお分かりになりますでしょうか? <?php session_start(); if(!empty($_POST)){ if($_POST['name']==''){ $error['name']='blank'; } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Upload</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <p>次のフォームに必要事項をご記入下さい。</p> <dl> <dt>ニックネーム<span class="required">必須</span></dt> <dd><input type="text" name="name" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>" /> <?php if ($error['name'] == 'blank'): ?> <p class="error">* ニックネームを入力してください</p> <?php endif; ?> </dd> </dl> </form> </body> </html>

    • 締切済み
    • PHP
  • PHP に詳しい方教えてください

    以下のスクリプトを実行作成して実行するとエラーが出てしまいます。エラーを出さないようにする方法を教えていただけませんか。 ※ エラーがでるものの、正常に動作はしています。 ---エラーメッセージ--- Notice: Use of undefined constant id - assumed 'id' in C:\xampp\htdocs\shop\update.php on line 12 --スクリプト--- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>商品管理</title> </head> <body> <?php require('dbconnect.php'); $id = $_REQUEST[id]; $sql = sprintf("SELECT * FROM my_items WHERE id=%d", ★12行目★ mysql_real_escape_string($id) ); $recordSet=mysql_query($sql); $data = mysql_fetch_assoc($recordSet); ?> <p>変更する内容を記入してください</p> <form id="frmUpdate" name="frmUpdate" method="post" action="update_do.php"> <dl> <dt> <label for="maker_id">メーカーID</label> </dt> <dd> <input name="maker_id" type="text" id="maker_id" size="10" maxlength="10" value="<?php print(htmlspecialchars($data['maker_id'], ENT_QUOTES)); ?>" /> </dd> <dt> <label for="item_name">商品名</label> </dt> <dd> <input name="item_name" type="text" id="item_name" size="35" maxlength="255" value="<?php print(htmlspecialchars($data['item_name'], ENT_QUOTES)); ?>" /> </dd> <dt> <label for="price">価格</label> </dt> <dd> <input name="price" type="text" id="price" size="10" maxlength="10" value="<?php print(htmlspecialchars($data['price'], ENT_QUOTES)); ?>" /> </dd> <dt> <label for="keyword">キーワード</label> </dt> <dd> <input name="keyword" type="text" id="keyword" size="50" maxlength="255" value="<?php print(htmlspecialchars($data['keyword'], ENT_QUOTES)); ?>" /> </dd> </dl> <input type="submit" value="変更する" /> <input type="hidden" name="id" value="<?php print(htmlspecialchars($data['id'], ENT_QUOTES)) ?>" /> <form > </body> </html>

    • ベストアンサー
    • PHP
  • explode時の改行コードでtrim以外の方法

    aaa bbb ccc というテキストデータ(改行あり)を読み込み、explodeで配列に入れる操作を行ったのですが、cccのところで改行コードも代入されてしまいます。trimでとれたのですが、毎回このような事を行うのは汚く感じるのですが、他に方法はありませんでしょうか? よろしくお願いいたします。 <?php $data = file("./a.txt"); $aa = explode( " ", $data[0] ); echo strlen($aa[0])." "; echo strlen($aa[1])." "; echo strlen($aa[2])."<br>"; echo $aa[0]." "; echo $aa[1]." "; echo $aa[2]."<br>"; $ab=trim($aa[2]); echo strlen($ab)."<br>"; ?> 実行結果 3 3 5 aaa bbb ccc 3

    • ベストアンサー
    • PHP
  • phpのエラーについて

    phpでメールフォームを作っています。 メールフォーム(1)、(2)、(3)と3つ作っています。 (2)で確認して記入内容に間違いがなれけば送信して(3)を表示。 間違っていたら(1)に戻るというものです。 確認するページ(2)の記述でParse error: syntax error, unexpected T_STRING in……とエラーが出ます。 その問題の行は、セッションを開始したすぐ下の行の die('不正アクセスの疑いがあります。'); という部分です。 この行と、それより以前・以後を何度も確認しましたがエラーの原因となるものが発見できません…… PHP初心者なのでもうお手上げです>< どなたかご教授よろしくお願いします!!! レンタルサーバーはヘテムルでphpは5.2.8です。 <?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); if(isset($_POST['ticket']) && isset($_SESSION['ticket'])){ $ticket = $_POST['ticket']; if(!in_array($ticket, $_SESSION['ticket'])){ die('不正アクセスの疑いがあります。'); //この行がエラーとなります。 } }else{ die('不正アクセスの疑いがあります。'); } $name = isset($_POST['name']) ? $_POST['name'] : NULL ; $email = isset($_POST['email']) ? $_POST['email'] : NULL ; $name = isset($_POST['comment']) ? $_POST['comment'] : NULL ; $error = array(); if(trim($name) == ''){ $error[] = 'お名前は必須項目です。'; } else if(mb_strlen($name) > 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[] = 'メールアドレスの形式が正しくありません'; } } if(trim($comment) == ''){ $error[] = 'コメントは必須項目です。'; } else if(mb_strlen($comment) > 500){ $error[] = 'コメントは500文字以内でお願いします。'; } $_SESSION['name'] = $name; $_SESSION['email'] = $email; $_SESSION['comment'] = $comment; $_SESSION['error'] = $error; if(count($error) > 0) { $dirname = dirname($_SERVER['SCRIPT_NAME']); $dirname = dirname == DIRECTORY_SEPARATOR ? '' : $dirname; $uri = 'http://' .$_SERVER['SERVER_NAME'] . $dirname . '/○○.php'; header('HTTP/1.1 303 See Other'); header('Location: ' . $uri); } else { ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>確認フォーム</title> </head> <body> <div id="form"> <p>以下の内容でよろしければ送信ボタンを押してください。</p> <dl> <dt>お名前:</dt> <dd><?php echo h($name);?></dd> </dl> <dl> <dt>メールアドレス:</dt> <dd><?php echo h($email);?></dd> </dl> <dl> <dt>コメント:</dt> <dd><?php echo nl2br(h($comment));?></dd> </dl> <form action="thank.php" method="post"> <input type="hidden" name="ticket" value="<?php echo h($ticket);?>" /> <input type="submit" name="submit" value="送信する" /> </form> </div> </body> </html> <?php } function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?>

    • ベストアンサー
    • PHP
  • PEARのmimeDecodeについて

    お世話になります 下記スクリプトにてメールをPHPで受け取ることは出来ているのですが、 画像データの処理について教えて頂けないでしょうか? $FromAddress,$Subject,$MailBodyとそれぞれの変数で取得したデータはデータベースに格納出来ています。 しかし、添付されている画像データを取り出してデータベースに格納する所でつまずいています。 // ファイルを保存 $fp = fopen("/tmp/". time() . $type, "w"); $length = strlen($part->body); fwrite($fp,$part->body,$length); fclose($fp); 上記部分で画像データは取得出来ていると思われるのですが、データベースに格納出来るデータに変更するための処理をアドバイス願います。 宜しくお願いします ちなみにPHP4です #PHPファイル########################### /////////////////////////////////// //PEARのパスを設定 require_once 'Mail/mimeDecode.php'; #-- メールデータの取得 $params['include_bodies'] =true; $params['decode_bodies'] =true; $params['decode_headers'] =true; $params['input'] = file_get_contents("php://stdin"); //標準入力 $params['crlf'] = "\r\n"; $mail_data = Mail_mimeDecode::decode($params); #-- From $FromAddress = $mail_data->headers['from']; $FromAddress = addslashes($FromAddress); //エスケープ処理 $FromAddress = str_replace('"','',$FromAddress); #-- 署名つきの場合 preg_match("/<.*>/",$FromAddress,$str); if($str[0]!=""){ $str=substr($str[0],1,strlen($str[0])-2); $FromAddress=$str; } #-- Subject フィールドの取得 $Subject = $mail_data->headers['subject']; $Subject = mb_convert_encoding($Subject,"UTF-8","JIS"); #-- 本文の取得 switch(strtolower($mail_data->ctype_primary)){ case "text": //テキストメール $MailBody = $mail_data->body; $MailBody = mb_convert_encoding($MailBody,"UTF-8","JIS"); break; case "multipart": //マルチパート(添付ファイル(画像前提)付) foreach($mail_data->parts as $part){ switch(strtolower($part->ctype_primary)){ case "text": $MailBody = $part->body; $MailBody = mb_convert_encoding($MailBody,"UTF-8","JIS"); break; case "image": $type = strtolower($part->ctype_secondary); // jpg,gif,png以外の画像形式は受け付けない if($type != "jpeg" and $type != "jpg" and $type != "gif" and $type != "png"){ continue; } // ファイルを保存 $fp = fopen("/tmp/". time() . $type, "w"); $length = strlen($part->body); fwrite($fp,$part->body,$length); fclose($fp); break; } } break; default: $MailBody=""; }

    • ベストアンサー
    • PHP
  • MD5ハッシュのデータが

    <? include "config.php"; $Data = '<form action=register.php method=post> Login: <br><input type=text name=login><br><br> Password:<br><input type=password name=passwd><br><br> Repeat password:<br><input type=password name=repasswd><br><br> Email:<br><input type=text name=email><br><br> <input type=submit name=submit value="Registration"> </form>'; if (isset($_POST['login'])) { $Link = MySQL_Connect($DBHost, $DBUser, $DBPassword) or die ("Can't connect to MySQL"); MySQL_Select_Db($DBName, $Link) or die ("Database ".$DBName." do not exists."); $Login = $_POST['login']; $Pass = $_POST['passwd']; $Repass = $_POST['repasswd']; $Email = $_POST['email']; $Login = StrToLower(Trim($Login)); $Pass = StrToLower(Trim($Pass)); $Repass = StrToLower(Trim($Repass)); $Email = Trim($Email); if (empty($Login) || empty($Pass) || empty($Repass) || empty($Email)) { echo "All fields is empty."; } elseif (ereg("[^0-9a-zA-Z_-]", $Login, $Txt)) { echo "Login have a incorrect format."; } elseif (ereg("[^0-9a-zA-Z_-]", $Pass, $Txt)) { echo "Password have a incorrect format."; } elseif (ereg("[^0-9a-zA-Z_-]", $Repass, $Txt)) { echo "Repeat password have a incorrect format."; } elseif (StrPos('\'', $Email)) { echo "Email have a incorrect format."; } else { $Result = MySQL_Query("SELECT name FROM users WHERE name='$Login'") or ("Can't execute query."); if (MySQL_Num_Rows($Result)) { echo "Account <b>".$Login."</b> is exists"; } elseif ((StrLen($Login) < 4) or (StrLen($Login) > 10)) { echo "Login must have more 4 and not more 10 symbols."; } elseif ((StrLen($Pass) < 4) or (StrLen($Pass) > 10)) { echo "Password must have more 4 and not more 10 symbols."; } elseif ((StrLen($Repass) < 4) or (StrLen($Repass) > 10)) { echo "Repeat password must have more 4 and not more 10 symbols."; } elseif ((StrLen($Email) < 4) or (StrLen($Email) > 25)) { echo "Email must have more 4 and not more 25 symbols."; } elseif ($Pass != $Repass){ echo "Password mismatch."; } else { $Salt = $Login.$Pass; $Salt = md5($Salt); $Salt = "0x".$Salt; MySQL_Query("call adduser('$Login', $Salt, '0', '0', '0', '0', '$Email', '0', '0', '0', '0', '0', '0', '0', '', '', $Salt)") or die ("Can't execute query."); echo "Account <b>".$Login."</b> has been registered."; } } } echo $Data; ?> 上のスクリプトで登録をしてphpmyadminで登録されたデータを見ると、 パスワードが空になっていたり文字が化けた1文字とかになって書き込まれています。 PHP上で何か問題があるのかと <?php $str = 'test'; if (md5($str) === '098f6bcd4621d373cade4e832627b4f6'){ eco "MD5OK"; exit; } ?> のように書いてみると正常にMD5OKと出ますのでデータベース側に問題があるような気がします。 どうしたら正常に書き込まれるようになるか分かる方いらっしゃいませんでしょうか?

    • ベストアンサー
    • MySQL

専門家に質問してみよう