質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • PHP

    24054questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • JavaScript

    20415questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • jQuery

    8157questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

  • JSON

    1455questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

jQueryのデータPOST処理がローカル環境以外でエラーになってしまいます

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 323

chibameizin

score 3

【わからないこと】
jQueryで別ページのPHPに変数を渡しMySQLにデータを格納しています。

ローカル環境ではエラーが出ずに動作しているのですが、サーバー環境(Xサーバー)にデータを移動させテストしたところ下記のエラーが出ました。

Parse error: Invalid numeric literal in /home/richnaru/dietdietdiet.net/public_html/dm_into.php on line 256

「dm_into.php」は、変数を受け取る側のPHPファイルです。
下記は、データを投げるのjQueryです。postで変数を渡しています。

エラーがでなければ、結果がコールバック表示されます。

【dm_php(jQuery記述側のPHPファイル)】

<div  id="dm_input">
<input id="num" type="text" size="3" value="" />
<div id="slider" style="width:300px;"></div>

<form id="textmemo_form">
<textarea id="textmemo" type="text" name="textmemo" rows="5" value=""</textarea>
</form>

<input  class="submit_button"  id="dm_botton" type="button" name="ok" value="OK" />
</div>

<!-- カレンダーjQuery -->
<p><input type="text" id="datepicker" placeholder="日付指定" value="" name="datepicker"></p>
<p><input id="timepicker1" type="text" placeholder="時刻指定" name="timepicker1"/></p>
<p>&nbsp;</p>
<!-- カレンダーjQuery END-->

【jQuery】

<script type="text/javascript">
jQuery(function () {
    $('#dm_botton').click(function() {
        $.post('dm_into.php',{
                dm_score: $('#num').val(),
                textmemo: $('#textmemo').val(),
                datepicker: $('#datepicker').val(),
                timepicker1: $('#timepicker1').val()
            }, function(data){
                $('#dm_input').html(data);
    });
    });
});
</script>

【db_into.php】

if(isset($_POST['dm_score'])){
$dm_score = $_POST['dm_score'];
    if(isset($_POST['textmemo'])){
    $textmemo = $_POST['textmemo'];
}
// タイムシフト投稿処理
    if(isset($_POST['datepicker']) OR isset($_POST['timepicker1'])){
        $datepicker = $_POST['datepicker'];//日付指定
        $datepicker = str_replace("/", "-", $datepicker);//文字置換

        $timepicker1 = $_POST['timepicker1'];//日付指定

        //時刻文字(AM、PM)のトリミング
        $cut = 3;//カットしたい文字数
        $str=$timepicker1;
        $replace = substr( $str , 0 , strlen($str)-$cut );
        //echo "<p class='red'>timepickerトリム後時刻=".$replace."</p>";
        $target_day=$datepicker.$replace;

        //PMの場合12時間加算する
        if(strpos($timepicker1,'PM') !== false){
          //'PM'が含まれている場合 12時間加算する
        //12時間後にする
        //echo "<p class='red'>PMのため12時間追加</p>";//D

        //echo "<p class='red'>replace=".$replace."</p>";//D

        $replece_time1 =mb_substr($replace, 0, 2);

        echo "<p class='red'>replece_time1=".$replece_time1."</p>";

var_dump($replece_time1);

            if($replece_time1==01){
            $replece_time1="13";
            }
            else if($replece_time1==02){
            $replece_time1="14";
            }
            else if($replece_time1==03){
            $replece_time1="15";
            }
            else if($replece_time1==04){
            $replece_time1="16";
            }
            else if($replece_time1==05){
            $replece_time1="17";
            }
            else if($replece_time1==06){
            $replece_time1="18";
            }
            else if($replece_time1==07){
            $replece_time1="19";
            }
            else if($replece_time1==08){
            $replece_time1="20";
            }
            else if($replece_time1==09){
            $replece_time1="21";
            }
            else if($replece_time1==10){
            $replece_time1="22";
            }
            else if($replece_time1==11){
            $replece_time1="23";
            }
            else if($replece_time1==12){
            $replece_time1="24";
            }

        $replece_time2 =mb_substr($replace, 3, 2);
        $replace=$replece_time1.":".$replece_time2;//再度時刻を合成
        $target_day=$datepicker.$replace;
        }

        //時刻形式に整形します
        $target_day= date("Y-m-d H:i:s",strtotime($target_day . "+0 hour"));

        //完成した時刻配列の表示
        //echo "<p class='red'>完成時刻配列表示".$target_day."</p>";//D

        //指定時刻が未来の場合処理を実行しないようにする
        $date_time1 = new DateTime();//現在時刻
        $date_time2 = new DateTime($target_day);//指定時刻

        if ($date_time1 < $date_time2){
          echo '<p class="red">※ 指定日時が未来です。「現在時刻」で投稿します</p>';
        }
        elseif($target_day < $_SESSION['start_date']){
        //指定時刻が登録日の前なら現在時刻を投稿すyる
        //    $_SESSION['start_date'] //D 登録日の年月日+時刻のデータ
          echo '<p class="red">※ 指定日時が登録日前です。「現在時刻」で投稿します</p>';        
        }

        else{
        //タイムシフト時刻を代入
        $date=$target_day;
        }

    }//    if(isset($_POST['datepicker']) OR isset($_POST['timepicker1'])){

    //echo "<p class='red'>\$_SESSION[start_date]".$_SESSION['start_date']."</p>";//D 登録日の年月日+時刻のデータ


//テキスト(DMツイート)を150文字でトリミングします
$textmemo = mb_strimwidth($textmemo, 0, 300, '…', 'UTF-8');

//上記変数をDBに格納する処理

【追記】

dm_into.phpの256行目がエラーと出てるのですが、他のjQueryで変数を渡しても同じエラーメッセージがでます。

256行目の変数は

$replece_time1

です。この直前の文字列(jQueryのPOSTで受け取ったデータをトリミングしたもの)がエラーの原因の可能性があります。

ローカル環境(PHP5)ではエラーがでません。
サーバー側(PHP7)でのみ上記のエラーメッセージがでてしまいます。


サーバーのPHPバージョンが7、ローカル5.68で、PHPバージョン7以上にするとエラーになり、サーバーのバージョンを5に下げるとエラーがでません。

PHP5とPHP7との互換性の問題があるようです。

現在、ローカルのバージョンをサーバー側に合わせる作業を進めております。

投稿内容に不備があり本日追記させていただきました。ご指摘頂いたのに正しく対応できず心よりお詫び申し上げます。

修正対応できる点などありましたらご指摘いただけるとありがたいです。
現在ローカルがPHP5のままで、PHP7に変更中ですがこちらは少々時間がかかります点のみご了承ください。

【エラー該当個所】
replece_time1で変数に0を先頭に付けた数字を使っていたのが原因だとご回答いただきました。

下記はvar_dumpでの出力です。

replece_time1(var_dump)=
string(2) "11"

PHP5では0が先頭になる数字がエラーにならず、PHP7ではエラーになることが原因でした。
質問に不備がありみなさまに不快な思いをさせてしまったことをお詫び申し上げます。

また、わかりにくい質問に対しご回答いただきましたみなさまに心からお礼申し上げます。
誠にありがとうございました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • chibameizin

    2018/04/12 01:38

    ありがとうございます。反映させていただきました。

    キャンセル

  • Kosuke_Shibuya

    2018/04/12 01:40

    dm_into.php を提示せずに何をしているんですか?

    キャンセル

  • chibameizin

    2018/04/12 11:23

    投稿内容に不備がありご指摘頂いたのに即座に対応できずお詫び申し上げます。修正し投稿いたしますので少々お時間ください。

    キャンセル

回答 2

checkベストアンサー

+1

dm_into.phpの256行目で発生したパースエラーの原因となった変数をvar_dump等で値を出力してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/12 11:23

    承知いたしました。
    再度、投稿いたしますので少々お時間ください。

    キャンセル

  • 2018/04/12 11:36

    if($replece_time1==01){
    の01をシングルクォートで囲めば、解決ではないでしょうか。
     ※else if内も同様

    <例>
    if($replece_time1=='01'){

    キャンセル

  • 2018/04/12 11:48

    ご回答いただいた個所でエラーになっていました。
    var_dump の結果も記載しておきますね。

    replece_time1(var_dump)=
    string(2) "11"

    本当に助かりました。心からありがとうございました。

    キャンセル

+1

状況がややわかりにくいですが、こちらにあるように
phpでは数値の先頭に0をつけると8進数になりますが、その際
8進数の整数値として不正な数字(例: 8 または 9)が指定されたとき
php5までは適当に無視してくれたものがphp7ではパースエラーになります。

  • 8進数010は10進数8
  • 8進数08はphp5では0、PHP7ではエラー

その手の誤表記をされている可能性はあります
(たとえばswitchで文字列をしていするところを8進数表記にしてしまったとか)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/12 11:22

    とてもわかりやすくありがとうございます。
    変数を受け取ったファイルの側で教えていただいたPHP7とPHP5との違いでエラーになっているようですね。ローカル環境をPHP7に上げて試行錯誤してみます。質問内容も修正加筆してみます。
    わかりにくくなってしまっているのに丁寧に教えていただいて感謝です。ありがとうございます。

    キャンセル

同じタグがついた質問を見る

  • PHP

    24054questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • JavaScript

    20415questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • jQuery

    8157questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

  • JSON

    1455questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。