Actually you have to change the read array from key based to element (numeric) based and everything works correctly!
$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!
--- Want to be famous?
http://www.3famous.com/ - 100% PHP BABY!
dbase_replace_record
(PHP 4, PHP 5)
dbase_replace_record — Modifica un registro de la base de datos
Descripción
Modifica un registro de la base de datos con los datos indicados.
Lista de parámetros
- dbase_identifier
-
El identificador de base de datos, devuelto por la función dbase_open() o dbase_create().
- record
-
Una matriz indexada con los datos. El número de elementos debe ser igual que el número de campos de la base de datos, ya que de otra forma la función dbase_add_record() fallará.
Note: Si se emplean los valores devueltos por la función dbase_get_record(), se dede resetear el valor de la clave asociativa deleted.
- record_number
-
Un número entero que puede tomar un valor entre 1 y el número de registros que contiene la base de datos (el número total se puede obtener con la función dbase_numrecords()).
Valores retornados
Devuelve TRUE si todo se llevó a cabo correctamente, FALSE en caso de fallo.
Ejemplos
Example #1 Actualizar un registro de la base de datos dBase
<?php
// abrir en modo lectura y escritura
$db = dbase_open('/tmp/test.dbf', 2);
if ($db) {
// obtener el valor actual del registro
$fila = dbase_get_record_with_names($db, 1);
// borrar la clave 'deleted'
unset($fila['deleted']);
// actualizar el campo de la fecha con la marca de tiempo actual
$fila['fecha'] = date('Ymd');
// Modificar el registro
dbase_replace_record($db, $fila, 1);
dbase_close($db);
}
?>
dbase_replace_record
11-Feb-2008 09:03
10-Feb-2006 04:30
If you get "unexpected error", try to change the assoc array, $row, to an indexed array with array_values().
Example:
$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 01:15
The dbase add and replace functions do NOT like to use the associative array.
<?
//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);
?>
