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
Haben Sie versucht, 'var_dump ($ ships_in_db)' zu tun, um zu sehen, was im Array ist? –
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
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. –