30556


こんにちは。  
現在、googlemapを通じて現在地の緯度経度とコメントをデータベース上に送信する機能の開発をしています。

環境はMAMPのlocalhostでPHPのバージョンは7.0.0でデータベースはPDO接続で行なっています。  
フロント側はjQueryMobileを使用しています。

緯度経度の数値はデータベースに送信は行えましたが、タイトル通り英数字、かな文字ともNULLとしてmysqlのデータベースに表示されています。

NULLが出てきてしまう理由がよくわかりません。またINSERTをPHPに実装後にtextarea部分を入力をしようとするとテキストエリアが消滅してしまいます（文字は入力されている様子ですがブラウザからでは見えない状態です）この二つの問題に回答していただけるとありがたいです。

HTML（送信フォーム）

[code]

      <form role="form" id="form" name="form1" method="post" action="sent.php" onSubmit="return cheak_alret()" data-ajax="false">
      <div class="ui-field-contain">
      <label for="text-title">タイトル</label>
        <input type="text" name="place" id="title" value="" />
      </div>
    
      <!--経度の情報をajaxに-->
      <div class="ui-field-contain">
      <label for="text-Latitude">経度</label>
        <input type="text" name="Latitude" id="Latitude" />
      </div>
      <!--緯度の情報をajaxに-->
      <div class="ui-field-contain">
      <label for="text-Longitude">緯度</label>
        <input type="text" name="Longitude" id="Longitude" />
      </div>
    
      <div class="ui-field-contain">
          <label for="text-comment">コメント</label>
          <textarea cols="40" rows="8" name=textarea id="comment"></textarea>
        </div>
      <div role="main" class="ui-content">
          <button type="submit" class="ui-btn" onclick='return confirm("よろしいですか？（現段階では送信されません）");'>確認</button>
      </div>
    
[/code]

JavaScript(入力チェック)

[code]

    function cheak_alret(){
    if(document.form1.title.value == ""){
    alert("タイトルを入力してください")
    return false;
    }
    if(document.form1.Latitude.value == ""){
    alert("経度を入力してください")
    return false;
    }
    if(document.form1.Longitude.value == ""){
    alert("緯度を入力してください")
    return false;
    }
    if(document.form1.comment.value == ""){
    alert("コメントを入力してください")
    return false;
    }
    }
    
[/code]

sent.php(PDO)

[code]

    <?php
    $db_user="root";
    $db_pass="root";
    $db_host="localhost";
    $db_name="localmaker";
    $db_type="mysql";
    
    $dsn= "$db_type:host=$db_host;
          dbname=$db_name;
          charset=utf8;";
    
    try{
    $pdo=new PDO($dsn, $db_user,$db_pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE,
            PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    }catch(PDOException $Exception){
    die('エラー' .$Exception->getMessage());
    }
    
    try{
    $pdo->beginTransaction();
    $sql ="INSERT INTO marker ( title, Longitude, Latitude, comment)VALUES( :title, :Longitude, :Latitude, :comment)";
    $stmh = $pdo->prepare($sql);
    $stmh->bindValue(':title',
            $_POST['title'], PDO::PARAM_STR);
    $stmh->bindValue(':Longitude',
            $_POST['Longitude'],  PDO::PARAM_INT);
    $stmh->bindValue(':Latitude',
            $_POST['Latitude'], PDO::PARAM_INT);
    $stmh->bindValue(':comment',
            $_POST['comment'], PDO::PARAM_STR);
    $stmh->execute();
    $pdo->commit();
    print "データを".$stmh->rowCount()."件挿入しました<br>";
    }catch(PDOException $Exception){
    $pdo->rollback();
    print "エラー：" .$Exception->getMessage();
    }
    ?>
    <body>
    <div data-role="page" data-add-back-btn="true" data-back-text="戻る">
      <div data-role="header">
        <h1>DEMO</h1>
      </div>
      <div role="main" class="ui-content">
        <?php
          print'場所';
          echo $_POST["place"];
        ?><br />
        <?php
          print'経度';
          echo $_POST["Longitude"];
        ?><br />
        <?php
          print'緯度';
          echo $_POST["Latitude"];
        ?><br />
        <?php
          print'コメント';
          echo nl2br ($_POST["textarea"]);
         ?>
      </div>
    
[/code]

[![Mysql上のデータベース](https://i.stack.imgur.com/FvAzj.png)](https://i.stack.imgur.com/FvAzj.png)

[![テキストエリア消滅](https://i.stack.imgur.com/C2mnW.png)](https://i.stack.imgur.com/C2mnW.png)


CC BY-SA 3.0
2016-11-20T09:51:17.213
30554
2016-11-20T11:31:34.123
13526
question
php mysql google-maps
mysql上のデータベースにPHPをを介してINSERTを行うと文字列がNULLと表示される


タイトルに書かれた、INSERTした文字列がNULLになってしまう件についてお答えします。

JavaScriptでの `document.form1.xxx.value` の `xxx`、またフォーム送信時の項目名＝PHPでの
`$POST['xxx']` の `xxx`、どちらもid属性ではなくname属性の値です。つまり質問に書かれたHTMLでは `title`
`comment` ではなく `place` `textarea` です。

一方、入力チェックのJavaScriptやsent.phpの `bindValue()`
のパラメータではid属性の値を指定しているため、目的の値が取得できていません。sent.php後半の表示部分は正しく表示されていると思いますが、こちらは正しい名前で参照しています。

参照している際の名前かname属性、どちらかを修正すれば期待通りに動作するはずです。


CC BY-SA 3.0
2016-11-20T11:31:34.123
30556
2016-11-20T11:31:34.123
8000
30554
answer