SQL

2016-03-27 19 views
0

'da PHP değişkenlerini bağlamada sorun yaşıyorum Bir girdinin varlığına bağlı olarak veritabanımda girdileri değiştirmek veya eklemek için Java'dan PHP'ye 3 tamsayı değeri gönderiyorum. aşağıdaki hatayı değişkenleri bağlama ve almak ile sorun yaşıyorum: Ben özellikle alıyorum Uyarı konusunu soruyorum Bu sorudaSQL

Notice: Undefined index: userid in C:\xampp\htdocs\attendanceradio.php on line 9 

Notice: Undefined index: eventid in C:\xampp\htdocs\attendanceradio.php on line 10 

Notice: Undefined index: attending in C:\xampp\htdocs\attendanceradio.php on line 11 

Notice: Undefined index: attending in C:\xampp\htdocs\attendanceradio.php on line 12 

Warning: mysqli_stmt_bind_result(): Number of bind variables doesn't match number of fields in prepared statement in C:\xampp\htdocs\attendanceradio.php on line 23 

, bunun için yeni ve ben ne yapıyorum bilmek istiyorum yanlış. Herhangi bir yardım şaşırtıcı, şimdiden teşekkürler!

Görsel: Ben de denedim

<?php 

    $user = 'root'; 
    $pass = ''; 
    $db = 'testuser'; 

    $con=mysqli_connect('localhost', $user, $pass, $db) or die('Unable to connect'); 

    $userid = $_POST['userid']; 
    $eventid = $_POST['eventid']; 
    $attending = $_POST['attending']; 
    $attending2 = $_POST['attending']; 

    $statement = mysqli_prepare($con, 
    'INSERT INTO user_has_event(user_user_id, event_event_id, attendance) 
     VALUES (?, ?, ?) 
     ON DUPLICATE KEY UPDATE attendance = ?'); 

    mysqli_stmt_bind_param($statement, 'iiii', $userid, $eventid, $attending, $attending2); 
    mysqli_stmt_execute($statement); 

    mysqli_stmt_store_result($statement); 
    mysqli_stmt_bind_result($statement, $userid, $eventid, $attending, $attending2); 

    mysqli_stmt_close($statement); 

    mysqli_close($con); 
?> 

:

$statement = mysqli_prepare($con, 
'INSERT INTO user_has_event(user_user_id, event_event_id, attendance) 
    VALUES (?, ?, ?) 
    ON DUPLICATE KEY UPDATE attendance = ?'); 

mysqli_stmt_bind_param($statement, 'iii', $userid, $eventid, $attending); 

Java kodu:

İşte enter image description here benim kodudur 0
public class ServerRequests { 

    ProgressDialog progressDialog; 
    public static final int CONNECTION_TIMEOUT = 1000 * 15; 
    public static final String SERVER_ADDRESS = "http://10.0.2.2:80/";//Connects to the emulator 

    public ServerRequests(Context context) { 
     progressDialog = new ProgressDialog(context); 
     progressDialog.setCancelable(false); 
     progressDialog.setTitle("Processing"); 
     progressDialog.setMessage("Please wait..."); 
    } 

    public void GetAttendanceDataAsyncTask(Attendance attendance, GetAttendanceCallback attendanceCallBack) { 
     progressDialog.show(); 
     new getAttendanceDataAsyncTask(attendance, attendanceCallBack).execute(); 
    }  
public class getAttendanceDataAsyncTask extends AsyncTask<Void, Void, Void> { 
     Attendance attendance; 
     GetAttendanceCallback attendanceCallBack; 

     public getAttendanceDataAsyncTask(Attendance attendance, GetAttendanceCallback attendanceCallBack) { 
      this.attendance = attendance; 
      this.attendanceCallBack = attendanceCallBack; 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      Map<String, Integer> dataToSend = new HashMap<>(); 
      dataToSend.put("userid", MainActivity.getUserID()); 
      dataToSend.put("eventid", EventPage.getEventID()); 
      dataToSend.put("attending", EventPage.getRadio()); 

      String encodedStr = StrEncoder.getEncodedData(dataToSend); 

      BufferedReader reader = null; 

      try { 
       URL url = new URL(SERVER_ADDRESS + "/attendanceradio.php"); 

       HttpURLConnection con = (HttpURLConnection) url.openConnection(); //Opens attendanceradio.php 

       con.setConnectTimeout(CONNECTION_TIMEOUT); //Setting timeouts 
       con.setReadTimeout(CONNECTION_TIMEOUT); 

       con.setRequestMethod("POST"); //Request post 

       con.setDoOutput(true); 
       OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream()); 

       writer.write(encodedStr); 
       writer.flush(); 


       StringBuilder sb = new StringBuilder(); 
       reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

       String line; 
       while ((line = reader.readLine()) != null) { //Read until there is something available 
        sb.append(line + "\n");  //Read and save line by line 
       } 
       line = sb.toString();   //Saving complete data received in string 

       //Check values received in Logcat 
       Log.i("custom_check", "The values received in the store part are as follows:"); 
       Log.i("custom_check", line); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } finally { 
       if (reader != null) { 
        try { 
         reader.close();  //Closing the 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
      return null; 
     }} 
+0

olası kopyası [PHP: Notice: Tanımsız değişken ve Uyarı: Tanımsız dizin] (http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index) –

+0

^Bilinmeyen/takılmamış HTML formunuz başarısız oldu^ –

+0

Elbette her zamanki gibi: prosedürel mysqli ifadeleri yerine PDO nesneleri kullanmalısınız. – Gralgrathor

cevap

0
$data = json_decode(trim(key($_POST), '[]'), true); 
    $userid = $data['userid']; 
    $eventid = $data['eventid']; 
    $attending = $data['attending']; 

Bu sorunum giderildi, değişkenler düzgün bir şekilde atanmıyordu. Onları diziden çıkarmak zorunda kaldı. Ayrıca sonuç bind kaldırıldı.

0
Notice: Undefined index: userid in C:\xampp\htdocs\attendanceradio.php on line 9 

sen aslında değil PHP senaryoya Java uygulaması 3 tamsayı değerlerini gönderilen olduğunu söyler.

Java uygulamanızın verilerinizi GET parametreleri olarak kodladığından şüpheleniyorum. $ _POST yerine $ _GET veya $ _REQUEST deneyin. Neyin yollandığını ve nasıl görüldüğünü görmek için $ _REQUEST sayfasını dökün.

+0

İlgili Java kodumu göndereceğim – kmil

+0

Değişkenleri Java'dan aldığım için değil mi? – kmil

+0

Cevabımı değiştirdim. Muhtemelen POST değil, parametreleri GET verileri olarak gönderirsiniz. – Gralgrathor