sql >> データベース >  >> RDS >> Mysql

複数の画像をAndroidからmysqlphpに保存しますが、挿入される画像は1つだけです

    まず、doInBackgroundの画像データを上書きします ループ。

    次に、PHPアップロードコードがループに入っていません

    JAVA

    JSONを作成するときは、ループを1つだけにする必要があります。必要なものはすべて、そこに配置してください

    for (ImageAndText i : listItems) {
        JSONObject object = new JSONObject();
    
        String type = i.getType();
        String[] Type = type.split(":");
        String amount = i.getAmount();
        String[] Amount = amount.split(":");
        String description = i.getDescription();
        String[] Description = description.split(":");
    
        //Image
        String image = i.getImage().toString()
        Uri imageUri = Uri.parse(image);
    
        object.put("amount", Amount[1]);
        object.put("type", Type[1]);
        object.put("description", Description[1]);
        object.put("ts_id", id);
        object.put("image", image);
        object.put(Configs.KEY_IMAGE, getStringImage(imageUri));
    
        jsonArray.put(object);
    }
    

    次に、JSONを配置します hashmapで 送信する

    @Override
    protected String doInBackground(String... params) {
        try {
            HashMap<String, String> data = new HashMap<String, String>();
            data.put("listItems", jsonArray.toString());
    
            RequestHandler rh = new RequestHandler();
            String result = rh.sendPostRequest(Configs.STAFF_BENEFIT, data);
            return result;
        } catch (Exception e) {
            return "";
        }
    }
    

    PHP

    PHPが変更されるため、$image = $_POST['image'];は必要ありません。

    json $listItems = json_decode( $_POST['listItems'], true );から画像データを取得します

    アップロードコードをループに入れ、アップロードが成功した場合にのみ挿入します

    foreach( $listItems as $item ){ 
        $path=time()."$id.png";
        $actualpath="http://192.168.107.115:80/Android/CRUD/PhotoUpload/$path";
        $bytes=file_put_contents( $savepath, base64_decode( $item['image'] ) );
        if( !$bytes ){
            echo 'Error saving image';  
        }else{
            $stmt->bind_param('sssss', 
            $item['type'], 
            $item['amount'], 
            $item['description'], 
            $actualpath, 
            $item['ts_id'] );
            $res=$stmt->execute();
            if( !$res ) echo 'Query failed with code: '.$stmt->errno;
        }
    } 
    

    編集:

    完全なPHPスクリプト

    <?php
        if( $_SERVER['REQUEST_METHOD']=='POST' ){
            if( !empty( $_POST['listItems'] ) ){
                $listItems = json_decode( $_POST['listItems'], true ); 
                $mysqli = new mysqli("127.0.0.1:3307", "root", "", "androiddb");
                if( $mysqli->connect_errno ) echo "Failed to connect to MySQL";
                $sql="INSERT INTO `staff_benefit` 
                     ( `type`, `amount`, `description`, `image`, `ts_id` ) 
                      VALUES ( ?, ?, ?, ?, ? )";
                if($stmt=$mysqli->prepare($sql )){
                    $url="http://192.168.107.115:80/Android/CRUD/PhotoUpload/";
                    foreach( $listItems as $item ){ 
                        $image_name = time().".png";
                        $save_path = 'PhotoUpload/'.$image_name;
                        $image_url = $url.$image_name;
                        $bytes=file_put_contents($save_path, base64_decode($item['image']));
                        if( !$bytes ){
                            echo 'Error saving image';  
                        }else{
                            $stmt->bind_param('sssss', 
                            $item['type'], 
                            $item['amount'], 
                            $item['description'], 
                            $image_url, 
                            $item['ts_id'] );
                            if( !$res=$stmt->execute()){ 
                                echo 'Query failed with code: '.$stmt->errno;
                            }
                        }
                    } 
                }
                $mysqli->close();
            }
        }
    ?>
    



    1. AccessはODBCデータソースとどのように通信しますか?パート3

    2. データベース内のすべての列を大文字と小文字を区別しないように変換するにはどうすればよいですか

    3. DreamweaverでPHPテストサーバーを設定する方法は?

    4. Bashで変数を宣言しますか?