2017-09-05 4 views
1

Also verwende ich eine Datenbank, um Schiffsdaten zu speichern.Fehler beim Durchlaufen eines Arrays

Während ich Daten in die Datenbank lade, überprüfe ich, ob das Schiff bereits existiert. Manchmal hat mehr als ein Schiff den gleichen Namen. Dieser Code versucht, durch das Array zu gehen, alle Schiffe mit demselben Namen herauszuziehen und dann zu fragen, ob das der richtige ist - wenn nicht, dann ist es ein weiterer mit dem gleichen Namen.

$sql = "SELECT Ship_Primary_Key, ship_original_rate, Ship_Launch_Year from Ships WHERE Ship_Name = '" . $shipname . "'"; 
$result = $conn->query ($sql); 
if ($result-> num_rows > 0) //Does the ship name already exist in the DB? { 
    $ships_in_db = mysqli_fetch_all ($result,MYSQLI_ASSOC); 
    foreach ($ships_in_db as $row) { 
     echo "new record is " . $shipname . " as a " . $shiprate . ". Records already include " . $shipname . ", launched " . $row["Ship_Launch_Year"] . " as a " . $row ['ship_original_ra 
     $yesno = trim(fread(STDIN,5)); 
     if ($yesno == "y" || $yesno == "yes") { 
      //ship already exists in the DB. Get the Key 
      echo $shipname . " is not new to the database and the key is " . $row["Ship_Primary_Key"] . "\n"; 
      $shipkey = $row["Ship_Primary_Key"]; 
      break 1; 
      } 
     } 

     //if you get through the loop of ships without assigning a primary key, ship is new 
     if (empty($shipkey)) { 
      $shipkey = write_ship_to_DB($shipname,$shiprate,$launchyear,$launchname,$conn); 
     } 
    } 

Das Problem ist also, ich weiß, dass ich mindestens drei Schiffe mit dem gleichen Namen in dem ersten Satz von Daten (die verschieden sind). Das Problem ist, es fragt immer nur nach dem ersten. Wenn ich 'n' setze, geht es einfach weiter und fragt nie nach dem zweiten Schiff mit dem gleichen Namen, der bereits existiert.

Ich denke, es ist ein Problem mit der Foreach-Schleife und der Break-Anweisung. Ich würde jede mögliche Hilfe mit diesem

+0

Haben Sie versucht, 'var_dump ($ ships_in_db)' zu tun, um zu sehen, was im Array ist? –

+0

Was passiert, wenn Sie versuchen, die Pause zu entfernen? Die Pause stoppt offensichtlich die Schleifenanweisung, nachdem sie mit Ihrer Bedingung auf Ihrer 'yesno'-Variable passiert ist, ich kann nicht scheinen zu verstehen, was Ihre Bedingung tut. – Cedric

+0

Etwas scheint sich tatsächlich geändert zu haben - aus irgendeinem Grund wird nur ein Schiff mit dem gleichen Namen zurückgegeben. Ich muss das untersuchen. –

Antwort

0

schätzen Ich habe das Problem herausgefunden.

Wegen der Schleife- Ich habe die Variable "Ship_Id" nicht zurückgesetzt, was bedeutete, dass das zweite oder n-te Mal ein Schiff mit dem gleichen Namen kam, ein neues Schiff wurde nicht erstellt.

Jetzt habe ich das gelöst. Das Problem ist also nicht dieser Code - es ist ein anderer Code.

Verwandte Themen