2017-06-01 4 views
0

Ich mache ein System mit PHP-Code, aber löschen Funktion mit SQL funktioniert nicht.Ich weiß nicht, warum es passiert.Löschen Funktion funktioniert nicht

Unten ist mein Code:

function deleteEmployee($params) 
{ 
    $tid = $_SESSION['tmid']; 
    $data = array(); 
    //print_R($_POST);die; 
    $sql = "delete from `cusinfo` WHERE TICKET_ID='".$params["id"]."' AND AGENT_CODE_STAFF_ID IN (SELECT id FROM `users` where tm_groupid = '$tid')"; 
    echo $result = mysqli_query($this->conn, $sql) or die("error to delete employee data"); 
} 
+1

„kann nicht funktioniert“ ist kein Problembeschreibung. _Warum_ geht es nicht? – HoneyBadger

+2

Ersetzen Sie die 'die' Zeichenfolge durch' mysqli_error ($ this-> conn) '. Es sollte Ihnen sagen, wenn es einen mysql Fehler gibt – Jelmergu

+0

@Jelmergu, Es zeigt immer noch nichts, während ich delete klicken –

Antwort

1

Das Problem ist wahrscheinlich in der Linie echo $result = mysqli_query($this->conn, $sql) or die("error to delete employee data");

Wie ich in einem Kommentar sagte: Ersetzen des die String mit mysqli_error ($ this-> conn) sollte ein Fehler angezeigt.

Doch nach einigen Tests fand ich, dass in einem Echo einer Variablen zugewiesen wird vielleicht seltsame Ergebnisse geben, ich testen echo $test = "hello" or die("test"); und festgestellt, dass weder hello noch test auf dem Bildschirm angezeigt wurde, aber 1 angezeigt wurde, was wahrscheinlich die boolean wahr war.

Eine bessere Möglichkeit, zu sehen, ob die Abfrage ausgeführt wurde sein könnte:

//other code that stayed the same 
    $statement = mysqli_prepare($this->conn, "delete from `cusinfo` WHERE TICKET_ID=? AND AGENT_CODE_STAFF_ID IN (SELECT id FROM `users` where tm_groupid = ?)"); 
    $statement = mysqli_stmt_bind_param($this->conn, $params['id'], $tid); // 
    $sql = msyqli_stmt_execute($statement); // returns either true or false 
    if ($sql === true) { 

     echo "Successfull"; // executing successfull code 
    } 
    else { 
     var_dump(mysqli_stmt_error_list($statement)); // handling error 
     die; 
    } 

Dies wird einige SQL-Fehler in einer Weise behandeln, die zu erwarten ist (sie sind ‚abgeladen und starb‘).

Mit vorbereiteten Anweisungen wird der korrekte Weg bedeuten, dass die meisten SQL-Injektionen gestoppt werden können, und mit einer DELETE-Abfrage möchten Sie sicherstellen, dass SQL-Injektionen gestoppt werden.

Hinweis: Ich bin kein Experte auf SQL-Injektionen
Anmerkung 2: I PDO hätte für vorbereitete Anweisungen verwendet aber, so scheint es mir viel mehr logisch zu sein, mit zu arbeiten

1
echo $result = mysqli_query($this->conn, $sql) or die("error to delete employee data"); 

In über der Linie sind Sie Ausführungs Abfrage und echo es. Aber wenn es nicht ausgeführt wird, sind Sie echo Ihre eigene Nachricht. Dies verhindert eine tatsächliche Fehlermeldung. Und wenn die Zeile, die Sie löschen möchten, nicht in TICKET_ID angezeigt wird, können Sie sie nicht sehen. Sie sehen nur Ihre Nachricht "error to delete employee data".

Um dies zu lösen:

echo mysqli_error($this->conn); 

Dies wird Ihnen Verbindungsfehler.

Oder:

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
if ($result) { 
    echo "Record deleted successfully"; 
} else { 
    echo "Error deleting record: " . $conn->error; 
} 

Viele viele Funktion haben, diese Fehler zu behandeln. stackoverflow question, php manual und .

+0

Sie sollten den PHP-Handbuch Link zu 'mysqli_error' und nicht zu einem veralteten' mysql_error' bearbeiten – Jelmergu

+0

@Jelmergu: danke Mann! – Blasanka