1

MySQL データベースにデータを追加する小さな PHP スクリプトを作成しています。私はjQueryを使用して、テキストデータを処理中のPHPファイルに送信しています。これにより、データがMySQLデータベースに入れられ、その部分は問題なく動作します。

しかし、この同じ形式で、ファイルをサーバー内のフォルダーにアップロードし、そのパスまたはファイル名をデータベース列「Img」に保存する必要があります。

Stack サイトを検索しましたが、これを行う方法の手がかりが得られませんでした。jQuery でこれができない場合は、テキスト送信部分を失うことなくこれをアーカイブする方法を教えてください。ここにコードをリストします。

私のプロセスPHP:

include ('connect.php');

$data = ("SELECT * FROM poiinfo");

$poiName = $_REQUEST['Name'];
$poiDes = $_REQUEST['Descrip'];
$poiCon = $_REQUEST['ConInfo'];
/*$poiImg = $_REQUEST['Image']; */ <-- my Image data but this is not the way need correct this

$dbData = "INSERT INTO poiinfo(`Name`, `Des.`, `Contact`) VALUES ('$poiName','$poiDes','$poiCon')";

$putData = mysql_query($dbData);

if ($putData){
    echo "Data inserted";
}else {
    echo "Not Done";
}

私のフォーム:

<?php

/**
 * @author SiNUX
 * @copyright 2013
 */

include ('connect.php');

$lastId = mysql_query("SELECT ID FROM poiinfo ORDER BY ID DESC LIMIT 1");

if ($row = mysql_fetch_array($lastId)){

    $nId = $row['ID'];
    $nId == "0";
    $nId = $nId++;

    mysql_quary("INSERT INTO poiinfo ('ID') VALUES ('$nId')");

}else {

    $lId = $row['ID'];
    $lId = $lId + 0;
    $lId++;
    $tId = $lId;
}
?>
<!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" />

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>

<script type="text/javascript">
 $(document).ready(function(){
  $("#save_data").click(function(){
    var name  = document.getElementById("Name").value;
    var desc = document.getElementById("Descrip").value;
    var con = document.getElementById("ConInfo").value;

    var dataString = 'Name='+name+'&Descrip='+desc+'&ConInfo='+con;
    $.ajax({
      type:'POST',
      data:dataString,
      url:'AddPoiPro.php',
      success:function(data){
       if(data="Data inserted") {
          //alert("Data  Success");
          document.getElementById('msg').innerHTML= "<div style=\"background-color:#0F0; text-align:center; color: #060\">Data Saved</dive>";
          $('#msg').delay(1500).fadeOut();
        } else {
          //alert("Not Inserted");
          document.getElementById('msg').innerHTML= "<div style=\"background-color:#0F0; text-align:center; color: red\">Data Not Saved</div>";
        }
     } 
   });
  });
});
</script>

<title>AddPOI</title>
</head>

<body>
<form method="post" enctype="multipart/form-data" name="form1" id="form1">
  <p>
    <label for="poiid">ID :</label>
    <input type="text" name="poiid" id="poiid" readonly="readonly" style="width:70px;" value="<?php echo $tId; ?>" />
  </p>
  <p>
    <label for="Name">POI Name :</label>

    <input type="text" name="Name" id="Name" />
  </p>
  <p>
    <label for="Descrip" style="alignment-adjust:middle">POI Description :</label>
    <textarea name="Descrip" id="Descrip" cols="45" rows="5"></textarea>
  </p>
  <p>
    <label for="ConInfo">Contact Infomation :</label>
    <textarea name="ConInfo" id="ConInfo" cols="45" rows="5"></textarea>
  </p>
  <p>
    <label for="Img">POI Image :</label>
    <!--<input type="file" name="Image" id="Image" /> --> <-- File upload place but for now it's commented out.
  </p>
  <p><div id="msg"></div></p>
  <p>  
  <div align="center">
    <input type="button" name="Submit" id="save_data" value="Submit" style="width:100px;" />
    <input type="reset" name="reset" id="reset" value="Rest Data" style="width:100px;" />
  </div>
  </p>
</form>
</body>
</html>

ほとんどの投稿で私が言ったように、AJAXまたはjQueryがファイルのアップロードを処理できないことがわかったので、それを行う方法があれば教えてください。

また、皆さんはコーディングの第一人者です。私はただのバッタなので、これは良いコーディングですか、それとも自分のスタイルをさらに改善する必要がありますか。また、上記の形式では、ヘッダーに ajax 部分があり、それを別のファイルに移動する必要があります。フォームにリンクします。

4

1 に答える 1

0

残念ながら、セキュリティ上の理由から、AJAX 経由でファイルをアップロードすることはできません。(JavaScript がファイル システムにアクセスできたらどうなるか想像できますか?)

formこれを回避するには、target属性を invisible に設定してa を使用しますiframe。これにより、ページを更新せずにファイルをアップロードできます。

この投稿は役に立つかもしれません。

于 2013-01-16T10:26:19.290 に答える