2016-12-20 4 views
0

Danke fürs Lesen!PHP inkrementieren alle IDs in einer CSV

Ich habe eine App, mit der Menschen Elemente in einer CSV hinzufügen, bearbeiten und löschen können. Ich habe einen Fehler gefunden, bei dem, wenn es nicht eindeutige IDs gibt und Sie versuchen, sie zu bearbeiten oder zu löschen, sie alle bearbeiten oder löschen, während das System die Tabelle durchsucht, um die ID zu finden, die auch der des Objekts entspricht Bei der Verwendung muss der Benutzer in der Lage sein, die ID zu ändern

Die Lösung, die ich gefunden habe, ist ziemlich einfach, sollte der Benutzer ein Objekt bearbeiten und seine ID zu einer bereits bestehenden ändern, dann wird das System nimm alle Objekte mit einer ID größer oder gleich der neuen ID und inkrementiere sie alle um eins.

Der folgende Code ist meine if-Anweisung, die prüft, ob die ID existiert bereits

if($exists == "true") //does the $newImageID already exist in the gallery? 
{ 
    $table = fopen($fullURL,'r'); //$fullURL is the location of the CSV tested and works 
    $temp_table_two = fopen($tempURL,'w'); 

    while (!feof($temp_table_two)) { 
     $getid = fgetcsv($temp_table_two, 1024); 

     if($getid[0] >= $newImageID) 
     { 
      // $getid[0]++; //increase id in temp_table_two by 1 if it is > $newImageID 
      echo $getid[0]; 
     } 
    } 
    fclose($table); 
    fclose($temp_table); 
    rename($tempURL,$fullURL); 
} 

Dieser Code findet nach fopen und vor fclose. Im Kontext ist $ exists entweder "true" oder "false" (wird später in boolean geändert), die while-Schleife analysiert meine $ temp_table (a fopen) und ob das erste Spaltenobjekt (die ID) gleich oder größer ist als der in der neuen ID, dann wird es inkrementiert. Dies bedeutet, dass das neue Objekt wird „geschlitzten in“ sozusagen und schiebt den Rest nach unten

Seltsamer meiner Anfrage nach einem langen Spinner Zeitüberschreitung wird, nachdem ich diesen Code ausführen, und ich habe keine Ahnung, was das Problem ist

Vielen Dank für Ihre Hilfe im Voraus

EDIT: ich habe die Quelle des Problems ist die while-Schleife selbst zu finden, soll ich alles aus als solchen Kommentar:

while (!feof($temp_table_two)) { 
     $getid = fgetcsv($temp_table_two, 1024); 

    // if($getid[0] >= $newImageID) 
    // { 
    //  // $getid[0]++; //increase id in temp_table_two by 1 if it is > $newImageID 
    //  echo $getid[0]; 
    // } 
    } 

der Code immer noch nicht funktioniert Das Einzige, was noch laufen muss, ist th e-Schleife, die nichts

EDIT 2 macht: Nach einer Antwort, habe ich mit der temporären Tabelle entfernt und arbeite nur aus der Tabelle selbst, diese if-Anweisung vor dem Hinzufügen der neuen Daten mit seiner ID ausgeführt wird

if($exists == "true") //does the $newImageID already exist in the gallery? 
{ 
    $table = fopen($fullURL,'r+'); 

    while (!feof($table)) { 
     $getid = fgetcsv($table, 1024); 

     if($getid[0] >= $newImageID) 
     { 
      echo $getid[0]; 
      $getid[0]++; //increase id in temp_table_two by 1 if it is > $newImageID 

     } 
    } 
    fclose($table); 
} 

Der Code läuft nicht mehr ab, aber die Elemente in $ getid [0] werden nicht inkrementiert. Ich habe sie wiederholt und es hallt alle IDs gleich oder größer als meine $ newImageID, aber die $ getid [0] ++; scheint die CSV überhaupt nicht zu beeinflussen

+0

können Sie hinzufügen, was initialisiert '$ temp_table' auf Ihre Frage? –

+0

@JohnJoseph Ich habe den Code wie gewünscht geändert, ich testete $ tempURL und es löst den Speicherort meiner CSV – Jordan

+0

Versuchen Sie, den Modus der fopen von 'w' zu 'r +' –

Antwort

1

Sie testen, wenn Sie das Ende der temporären Datei erreichen, und das ist falsch. Sie müssen die Ursprungsdatei überprüfen und auch daraus lesen!

while (!feof($table)) { 
    $getid = fgetcsv($table, 1024); 
+0

Danke, das hat die Endlosschleife behoben, bitte überprüfe meine neue Bearbeitung auf die Frage, da die Zelle nicht geändert wird – Jordan

0

Versuchen Sie folgendes:

if ($csv = fopen($temp_table_two, 'r+')) do { 
    $getid = fgetcsv($csv, 1024); 

    if($getid[0] >= $newImageID) 
    { 
     echo $getid[0]; // $getid[0]++; 
    } 
} while (!feof($csv)); 

Das wird Ihre while-Schleife von Timing verhindern sich durch in einer unendlichen stecken, wenn es ein Problem ist es, die Datei zu öffnen. feof gibt nur dann true zurück, wenn EOF erreicht wird, andernfalls wird false zurückgegeben, was dazu führen kann, dass es niemals ausbrechen kann.

Damit Ihre Daten tatsächlich in die CSV-Datei geschrieben werden, funktioniert Ihr aktueller Code nicht, da fgetcsv Ihnen nur eine Array-Darstellung einer CSV-Zeile in der Datei bietet. Schreiben in dieses Array ändert nur das Array, nicht zurück in die Datei.

Dafür sehen diese ähnliche Antwort: Append data to middle line/row of a csv instead of the last line or row

oder

http://php.net/manual/en/function.fputcsv.php