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 — Remplace un enregistrement dans une base dBase
Description
dbase_replace_record() remplace les données associées à l'enregistrement dbase_record_number par les données enregistrées dans record , dans la base dbase_identifier .
Liste de paramètres
- dbase_identifier
-
L'identifiant du lien à la base de données, retourné par dbase_open() ou dbase_create().
- record
-
Un tableau indexé des données. Le nombre d'éléments doit être égal au nombre de champs dans la base de données, sinon dbase_replace_record() échouera.
Note: Si vous utilisez dbase_get_record() pour retourner la valeur de ce paramètre, n'oubliez pas de réinitialiser la clé nommée deleted.
- record_number
-
Un entier entre 1 et le nombre total d'enregistrements dans la base de données (comme retourné par la fonction dbase_numrecords()).
Valeurs de retour
Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.
Exemples
Exemple #1 Mise à jour d'un enregistrement dans une base de données
<?php
// Ouverture en mode lecture-écriture
$db = dbase_open('/tmp/test.dbf', 2);
if ($db) {
// Récupération de l'ancienne ligne
$row = dbase_get_record_with_names($db, 1);
// Supprime l'entrée effacée
unset($row['deleted']);
// Mise à jour de la date du champ avec le timestamp courant
$row['date'] = date('Ymd');
// Remplace l'enregistrement
dbase_replace_record($db, $row, 1);
dbase_close($db);
}
?>
dbase_replace_record
11-Feb-2008 06:03
11-Feb-2006 01: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 10: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);
?>
