Actually you have to change the read array from key based to element (numeric) based and everything works correctly!
<?php
$db = dbase_open( "yourfile.dbf", 2); // 0=RO, 1=WO, 2=RW
if ($db) {
$row = dbase_get_record_with_names($db, 1);
unset($row["deleted"]); // drop the field
// do whatever it is you want to the $row["elements"]
// then convert to numeric to store:
$rarr = array();
foreach ($row as $i=>$vl) $rarr[] = $vl;
dbase_replace_record($db, $rarr, 1);
dbase_close($db);
}
?>
That code actually works!
dbase_replace_record
(PHP 4, PHP 5)
dbase_replace_record — Ersetzt einen Datensatz in einer Datenbank
Beschreibung
Ersetzt in der Datenbank den angegebenen Datensatz record_number mit den Daten aus record .
Parameter-Liste
- dbase_identifier
-
Die Datenbank-Verbindungskennung, die von dbase_open() oder dbase_create() zurückgegeben wurde.
- record
-
Ein indiziertes Datenarray. Falls die Anzahl der Elemente nicht mit der Anzahl der Datenbankfelder übereinstimmt, schlägt dbase_replace_record() fehl.
Hinweis: Vergessen Sie nicht, den deleted-Schlüssel zu löschen, wenn Sie für diesen Parameter den Rückgabewert von dbase_get_record() verwenden.
- record_number
-
Eine Ganzzahl, die von 1 bis zur Anzahl der Datensätze in der Datenbank (wie von dbase_numrecords() zurückgegeben) geht.
Rückgabewerte
Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.
Beispiele
Beispiel #1 Aktualisieren eines Datensatzes in der Datenbank
<?php
// im lesen-schreiben-Modus öffnen
$db = dbase_open('/tmp/test.dbf', 2);
if ($db) {
// den alten Datensatz holen
$datensatz = dbase_get_record_with_names($db, 1);
// den Eintrag 'deleted' entfernen
unset($datensatz['deleted']);
// das Datumsfeld mit dem aktuellen Zeitstempel aktualisieren
$datensatz['Datum'] = date('Ymd');
// den Datensatz ersetzen
dbase_replace_record($db, $datensatz, 1);
dbase_close($db);
}
?>
Siehe auch
- dbase_add_record() - Hängt einen Datensatz an eine Datenbank an
- dbase_delete_record() - Markiert einen Datensatz als gelöscht
dbase_replace_record
11-Feb-2008 05:03
11-Feb-2006 12:30
If you get "unexpected error", try to change the assoc array, $row, to an indexed array with array_values().
Example:
<?php
$row = array_values($row);
dbase_replace_record($db, $row, 1);
?>
The dbase_replace-function cannot handle an assoc array.
Hope this will save someone a headache! ;)
11-Feb-2005 09:15
The dbase add and replace functions do NOT like to use the associative array.
<?php
//This gives "unspecified error" on replace and add:
$row = dbase_get_record_with_names($db, 1);
unset($row['deleted']);
dbase_replace_record($db, $row, 1);
dbase_add_record($db, $row);
//To further prove the point,
//The first add works, the second one fails:
$testrow1=array('one','2','three');
dbase_add_record($db,$testrow1);
$testrow2=array('FIELDA' => 'xxx','FIELDB' => '9','FIELDC' => 'yyyyy');
dbase_add_record($db,$testrow2);
?>
