2016-07-14 11 views
-1

Ich verwende PDO, um Daten in der Datenbank zu speichern, aber die Daten scheinen nicht gespeichert zu werden, und sogar es wirft keinen Fehler. Ich benutze die OKhttp3 Klasse von Android, um POST Anfragen an meine PHP-Datei mit dem Namen chatroom.php zu senden.Daten werden nicht in der Datenbank mit PDO gespeichert

<?PHP 
include("PDOConnection.php"); 

//Define some value 
define("ACTION_ADD_ROOM","addRoom"); 
define("ACTION_SELECT","select"); 
define("RESULT_SUCCESS",0); 
define("RESULT_ERROR",1); 
define("RESULT_ROOM_EXISTS",2); 

$action=$_POST["action"]; 
$result=RESULT_ERROR; 

if(isset($action)) 
{ 
    if($action==ACTION_ADD_ROOM) 
    { 
     $name=$_POST["name"]; 
     $chatdesc=$_POST["chatdesc"]; 

     if(isset($_FILES['chatImage'])) 
      $image=$_FILES['chatImage']['name']; 

    } 
    else if($action==ACTION_SELECT) 
    { 
     $Id=$_POST["id"]; 
    } 

    if(ACTION_ADD_ROOM==$action) 
    { 
     //check exists Room 
     if(isExistRoom($cnn,$name)) 
     { 
      $result=RESULT_ROOM_EXISTS; 
     } 
     else 
     { 
      insertChatroom($cnn,$name,$chatdesc,$image); 
      $result=RESULT_SUCCESS; 
     } 
    } 
    else if(ACTION_SELECT==$action) 
    { 
     if(login($cnn,$Id)) 
     { 
      $result=RESULT_SUCCESS; 
      //login success 
     } 
     else 
     { 
      //login fail 
      $result=RESULT_ERROR; 
     } 
    } 

    if((isset($_FILES['chatImage']) && $result==RESULT_SUCCESS && ACTION_ADD_ROOM==$action)) 
    { 
     $errors= array(); 
     $file_name = $_FILES['chatImage']['name']; 
     $file_size =$_FILES['chatImage']['size']; 
     $file_tmp =$_FILES['chatImage']['tmp_name']; 
     $file_type=$_FILES['chatImage']['type']; 

     $expensions= array("jpeg","jpg","png"); 

     if(empty($errors)==true) 
     { 
      $id=returnID($cnn,$name); 

      if(!is_dir("uploads/Rooms/".$id)) 
       mkdir("uploads/Rooms/".$id, 0700); 

      move_uploaded_file($file_tmp,"uploads/Rooms/".$id."/".$file_name); 
     }else{ 
      print_r($errors); 
     } 
    } 
} 

echo $result; 
function insertChatroom($cnn,$name,$chatdesc,$image) 
{ 
    try 
    { 
     $query = "INSERT INTO chatroom (name, 'chatdesc', image) VALUES(?, ?, ?)"; 
     $stmt = $cnn->prepare($query); 
     $stmt->execute([$name, $chatdesc, $image]); 
    } 
    catch(\PDOException $e) 
    { 
     echo "ERROR " . $e->getMessage(); 
    } 
} 

function isExistRoom($cnn,$name) 
{ 
    $query="SELECT * FROM chatroom WHERE name == ?"; 
    $stmt=$cnn->prepare($query); 
    $stmt->bindParam(1,$name); 
    $stmt->execute(); 

    $rowcount=$stmt->rowCount(); 
    //for debug 
    //var_dump($rowcount); 
    return $rowcount; 
} 

function login($cnn,$Email,$Password) 
{ 
    return 1; 
} 

function returnID($cnn,$name) 
{ 
    $query="SELECT * FROM chatroom WHERE name = ? "; 
    $stmt=$cnn->prepare($query); 
    $stmt->bindParam(1,$name); 

    $stmt->execute(); 
    $result = $stmt->fetchColumn(); 

    //for debug 
    //var_dump($rowcount); 
    return $result; 
} 
?> 

Ich denke, es zwischen dem Senden POST Anfrage unter Verwendung einer HTML-Seite oder von Android, aber nur für den Fall ist nicht anders, hier ist mein Code für Android:

package com.example.android.chatroom.Activities.RegisterActivity; 

import android.content.Context; 
import android.location.LocationListener; 
import android.os.AsyncTask; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.util.Log; 
import android.view.View; 
import android.widget.ProgressBar; 
import com.example.android.chatroom.Tags; 
import com.example.android.chatroom.chatroom; 
import java.io.File; 
import java.io.IOException; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import okhttp3.MediaType; 
import okhttp3.MultipartBody; 
import okhttp3.OkHttpClient; 
import okhttp3.Request; 
import okhttp3.RequestBody; 
import okhttp3.Response; 


public class ChatroomNetworkCallTask extends AsyncTask<String, Void, String> { 
    ProgressBar mProgress; 
    FloatingActionButton btnRegister; 
    View view; 
    Context context; 
    //Activity ReciveActivity; 
    File imageFile; 
    chatroom Rooms=new chatroom(); 
    public static String Result; 
    private static final MediaType MEDIA_TYPE = MediaType.parse("image/*"); 
    private static final String IMGUR_CLIENT_ID = "..."; 
    private OkHttpClient client=new OkHttpClient(); 
    public ChatroomNetworkCallTask(chatroom Rooms, File ImageFile, Context mconext,View view) 
    { 
     this.context=mconext; 
     if(ImageFile!=null) { 
      this.imageFile = ImageFile; 
      Log.d("getrealfile:", "NEtwork: " + imageFile.getName() + " And Absolute: " + imageFile.getAbsolutePath()); 
     }else 
     { 
      Log.d("getrealfile:","Image not set to update"); 
     } 
     this.Rooms=Rooms; 
     this.view=view; 
     mProgress= Rooms.getPbar(); 
     btnRegister=Rooms.getBtnSend(); 

    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     if(mProgress!=null) 
      mProgress.setVisibility(View.VISIBLE); 
     if (btnRegister!=null) 
      btnRegister.setEnabled(false); 
    } 

    @Override 
    protected String doInBackground(String... params) { 

     try { 
      Log.d("FIlePath:",imageFile.getAbsolutePath()); 
      RequestBody requestBody = new MultipartBody.Builder() 
         .setType(MultipartBody.FORM) 
         .addFormDataPart("action", Rooms.getStatus()) 
         .addFormDataPart("name", Rooms.getChatroomName()) 
         .addFormDataPart("chatdesc", Rooms.getChatroomDesc()) 
         .addFormDataPart("chatImage", "imgRoom.jpg", 
          RequestBody.create(MEDIA_TYPE, imageFile)) 

         .build(); 


      Request request = new Request.Builder() 
        .header("Authorization", "Client-ID " + IMGUR_CLIENT_ID) 
        .url(Tags.ChatroomAddress) 
        .post(requestBody) 
        .build(); 

      Response response = client.newCall(request).execute(); 

      Result=response.body().string().toString(); 
      Log.d("resultValue:",Result); 
      Pattern p = Pattern.compile("-?\\d+"); 
      Matcher m = p.matcher(Result); 
      StringBuilder build = new StringBuilder(); 
      while (m.find()) { build.append(m.group()); } 


      return build.toString(); 




     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


     return null; 
    } 

    @Override 
    protected void onPostExecute(String o) { 
     super.onPostExecute(o); 
     Log.d("valueOfo:",""+o); 
     String msg = null; 

     if(o != null && o.trim().matches(".*\\d+.*")){ 

      switch (o.toString().trim().toString().trim()) { 
       case "0": 
        msg = "اطلاعات شما با موفقیت ثبت شد"; 
        break; 
       case "1": 
        msg = "خطا در ثبت اطلاعات"; 
        break; 
       default: 
        msg="خطایی بس ناجوانمردانه"; 
      } 

     } 



     Snackbar.make(view, msg != null ? msg : "لطفا مجددا تلاس فرمایید",Snackbar.LENGTH_SHORT).show(); 

     if(mProgress!=null) 
      mProgress.setVisibility(View.INVISIBLE); 
     btnRegister.setEnabled(true); 

    } 

} 
+1

warum beginnen Sie nicht mit einfachen POST-Beispiel und sehen, ob es funktioniert, dann können wir debuggen/überprüfen Sie Ihren Code. – samayo

Antwort

1

Erste hinzufügen $cnn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); so, um Ihren Code PDO löst tatsächlich Ausnahmen aus. Sie erhalten dann einen Fehler:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''chatdesc', image)

Dies wird durch die einfachen Anführungszeichen in Ihrer Abfrage verursacht. Entfernen Sie diese und es wird wahrscheinlich funktionieren

Verwandte Themen