2017-01-14 2 views
1

ajax ausgeführt:undefined Offset- und Syntaxfehler aber Code korrekt

... 
success: function(data){ 
     console.log(data); 
    } 

position.php

Zwei-Arrays übertragen werden ($ids und $indexes), mit der gleichen Anzahl von Elementen.

extract($_POST); 

print_r($ids); 
print_r($indexes); 

for ($i = 0; $i <= count($ids); $i++) { 
    $stmt = $db->query("UPDATE " . $table . " SET inde = " . $indexes[$i] . " WHERE id = " . $ids[$i]); // this is line 10 
} 

Der Code ordnungsgemäß ausgeführt wird, das heißt alle Tabellendaten aktualisiert werden wie erwartet, aber Konsole (nach der Arrays Auflistung) zeigt einige Fehler:

Array 
    (
     [0] => 25 
     [1] => 23 
     [2] => 18 
     [3] => 26 
     [4] => 21 
    ) 
    Array 
    (
     [0] => 0 
     [1] => 1 
     [2] => 2 
     [3] => 3 
     [4] => 4 
    ) 

<b>Notice</b>: Undefined offset: 5 in <b>D:\matria\s02\admin\position.php</b> on line <b>10</b><br /> 

<b>Fatal error</b>: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064... near 'WHERE id =' at line 1 in D:\matria\s02\admin\position.php:10 

Jede Hilfe?

Antwort

1

Das Problem ist, mit Ihrem for Zyklus:

for ($i = 0; $i <= count($ids); $i++) { 

count($ids) 5 und wenn $i 5 erreicht, 5 < = 5 ist immer noch wahr. Allerdings beginnt die Indizierung von 0, damit Ihre möglichen Indizes liegen zwischen 0 und 4. Ändern Sie Ihr for zu:

for ($i = 0; $i < count($ids); $i++) { 

und dann wird es nicht versuchen, die Dinge zu tun, wenn $i erreicht 5.

EDIT:

die ursprüngliche Antwort behandeln Ihre effektiven Fehler, aber es gibt immer noch Dinge, nach dem Update Refactoring/verbessert werden:

  • Sie einen arr hast ay genannt $indexes, die auf eigenen Indizes den Index als Wert auch speichert. Wenn es kein Gegenbeispiel in der Frage unerwähnt ist, dann ist diese ganze Array ist überflüssig und Sie können $indexes entfernen und können Sie $i statt $indexes[$i]
  • Ihre $i < count($ids) in dem für den Zyklus verwenden wird die Anzahl der $ids bei jeder Iteration berechnen. Es ist viel eleganter, es zu berechnen nur einmal vor dem for mit so etwas wie $myCount = count($ids); und $i < $myCount dann in Ihrem for verwenden, um die Dinge zu berechnen nur einmal

Vorgeschlagene Code:

extract($_POST); 

print_r($ids); 

$myCount = count($ids); 
for ($i = 0; $i < $myCount; $i++) { 
    $stmt = $db->query("UPDATE " . $table . " SET inde = " . $i . " WHERE id = " . $ids[$i]); // this is line 10 
} 
+0

Sie ein Zauberer sind . Danke vielmals. – bonaca

+0

Gern geschehen –