2016-01-25 4 views
-1

Я новичок в php, и я застрял, чтобы найти max(id), указав конкретный идентификатор.Как решить mysqli_fetch_array() ожидает, что параметр 1 будет mysqli_result, строка в php

В Деятельность A, есть listView. Когда список обнаруживает длительное нажатие, он проверяет, является ли idmax id. Если да, он будет удален, если нет, отобразится список не может быть удален.

Это то, что я пробовал.

listViewUpdate.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
        public boolean onItemLongClick(final AdapterView<?> p, View v, final int po, long id) { 

iD = details1.get(po).getID(); 
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
builder.setTitle("Delete"); 
builder.setMessage("Are you sure you want to delete?"); 
builder.setIcon(android.R.drawable.ic_dialog_alert); 
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
public void onClick(DialogInterface dialog, int ii) { 
checkMaxID(ID,iD); // ID is foreign key 
// delete(iD); 
objadapter.removeItem(po);        

    } 
}); 

public void checkMaxID(final int foreignKey,final String iD) 
{ 
class check extends AsyncTask<Void,Void,String>{ 
// ProgressDialog loading; 
@Override 
protected void onPreExecute() { 
super.onPreExecute(); 
// loading = ProgressDialog.show(Edit_Staff.this,"Updating...","Wait...",false,false); 
    } 

@Override 
protected void onPostExecute(String s) { 
super.onPostExecute(s); 
// loading.dismiss(); 
Toast.makeText(getActivity(), s, Toast.LENGTH_LONG).show(); 
} 

@Override 
protected String doInBackground(Void... params) { 
HashMap<String,String> hashMap = new HashMap<>(); 
hashMap.put(Configs.KEY_ID, iD); 
hashMap.put(Configs.KEY_TWD, String.valueOf(foreignKey)); 
RequestHandler rh = new RequestHandler(); 
String s = rh.sendPostRequest(Configs.URL_CHECK_ID, hashMap); 
return s; 
    } 
} 

check ue = new check(); 
ue.execute(); 
    } 

checkID.php

<?php 
    if($_SERVER['REQUEST_METHOD']=='POST'){ 

     //Getting values 

     $id = $_GET['id']; 
     $foreignKey = $_GET['twd']; 

     //Creating an sql query 
     $sql = "SELECT MAX(id) FROM work_details WHERE twd = '$foreignKey'"; 
     $row = mysqli_fetch_row($sql); 
     $maxId=$row[0]; 

     //Importing our db connection script 
     require_once('dbConnect.php'); 

     //Executing query to database 
     if($id==$maxId){ 

     $sql = "DELETE FROM work_details WHERE id=$id;";  

     }else{ 
      echo 'list cannot be deleted'; 
     } 

     //Closing the database 
     mysqli_close($con); 
    } 
?> 

Когда я нажимаю да в диалоговом окне подтверждения, я получаю сообщение об ошибке.

Ошибка

enter image description here

Может кто-то помочь? Спасибо

+0

ли это сообщение об ошибке на заказ написал один? Дайте более подробную информацию, потому что мы не можем помочь вам с такой скудной информацией об ошибках. – Milkncookiez

+0

@MikeM. Извините, я не получил ответа от моего предыдущего поста. Пожалуйста, помогите мне .. Спасибо – John

+0

Кто угодно пожалуйста ??? Я застрял с утра до сих пор! – John

ответ

3

В этом коде вы не выполнять запросы поэтому вы не можете получить.

Попробуйте этот подход:

<?php 
    if(isset($_GET['id'], $_GET['twd'])){ 
     /*Importing our db connection script*/ 
     require_once('dbConnect.php'); 
     /* check connection */ 
     if (mysqli_connect_errno()) { 
      printf("Connect failed: %s\n", mysqli_connect_error()); 
      exit(); 
     } 

     $sql = sprintf("SELECT MAX(id) as MaxId FROM work_details WHERE twd = '%s'", 
         mysqli_real_escape_string($_GET['twd'])); 

     if ($result = mysqli_query($con, $sql)) { 
      /* fetch associative array */ 
      if ($row = mysqli_fetch_row($result)) { 
       if($row[0] === $_GET['id']){ 
        $sql = sprintf("DELETE FROM work_details WHERE id='%s';", 
            mysqli_real_escape_string($_GET['id'])); 
        if ($result = mysqli_query($con, $sql)) { 
         echo 'success'; 
        }else{ 
         echo 'failed'; 
        } 
       } 

      } 

      /* free result set */ 
      mysqli_free_result($result); 
     } 
     /* close connection */ 
     mysqli_close($con); 
    } 
?> 
+0

СПАСИБО МУЖЧИНА !!!! «) – John

1

Ошибка объясняет сам и сообщает вам, что вы делаете неправильно. В любом случае, вот подсказка: mysqli_fetch_row() не принимает строку SQL (запрос) в качестве параметра. Вместо этого он принимает результат, который пришел из БД, когда этот запрос был выполнен, и он извлекает строку (одну запись) из этого результата.

Проще говоря:

  1. Вы должны декларировал SQL запрос (у вас уже есть что)
  2. Вы должны выполнить запрос (это часть вас не хватает)
  3. Вы должны принести ряд по строке результаты результата запроса (это часть, которую вы смешиваете с этапом 2.)

Не просто код случайным образом. Попытайтесь понять, что вы кодируете и что происходит под капотом (по крайней мере, на небольшой глубине).

Вот хороший и очень простой пример, похожий на ваш код. Вы можете оформить на примере фрагменты кода: http://php.net/manual/en/mysqli-result.fetch-row.php

А вот альтернатива, очень хороший объектно-ориентированный PHP модуль, который можно использовать для взаимодействия с БД: http://php.net/manual/en/mysqli-result.fetch-row.php

+0

Спасибо за ваш ответ ... Я просмотрел ссылку, которую вы дали, но я до сих пор не имею понятия, чтобы решить no.2 ... – John

Смежные вопросы