<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xml:base="https://www.webmaster-forums.net/crss/node/1013126" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title></title>
    <link>https://www.webmaster-forums.net/crss/node/1013126</link>
    <description></description>
    <language>en</language>
          <item>
    <title></title>
    <link>https://www.webmaster-forums.net/serverside-scripting/database#comment-1076220</link>
    <description> &lt;p&gt;Eh Nico, one little adjustment:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;sub write {&lt;br /&gt;	my $self = shift;&lt;br /&gt;	my $currec;&lt;br /&gt;	my @fieldnames = ();&lt;br /&gt;	&lt;br /&gt;	zBase::read($self);&lt;br /&gt;	if(!$self-&amp;gt;{modified}) { return 0; }&lt;br /&gt;	foreach (sort keys %{$self-&amp;gt;{fieldnames}}) {&lt;br /&gt;		$fieldnames[$self-&amp;gt;{fieldnames}{$_}] = $_;&lt;br /&gt;	}&lt;br /&gt;	$currec = join($joinc, @fieldnames);&lt;br /&gt;	open(DB, &amp;quot;&amp;gt;$self-&amp;gt;{filename}&amp;quot;) or Common::warning(&amp;quot;Could not open $self-&amp;gt;{filename} for writing: $!&amp;quot;);&lt;br /&gt;	flock(DB, 2) or die &amp;quot;$!&amp;quot; if($Settings::use_flock);&lt;br /&gt;	print DB &amp;quot;$currec\n&amp;quot;;&lt;br /&gt;	foreach $currec (@{$self-&amp;gt;{db}}) {&lt;br /&gt;		print DB &amp;quot;$currec\n&amp;quot;;&lt;br /&gt;	}&lt;br /&gt;	flock(DB, 8) or die &amp;quot;$!&amp;quot; if($Settings::use_flock);&lt;br /&gt;	close(DB);&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;&#039;&lt;/p&gt;
 </description>
     <pubDate>Sat, 30 Dec 2000 09:18:14 +0000</pubDate>
 <dc:creator>zef</dc:creator>
 <guid isPermaLink="false">comment 1076220 at https://www.webmaster-forums.net</guid>
  </item>
  <item>
    <title></title>
    <link>https://www.webmaster-forums.net/serverside-scripting/database#comment-1076186</link>
    <description> &lt;p&gt;Thank you very much!!&lt;br /&gt;
Regards,&lt;/p&gt;
&lt;p&gt;Nico.-&lt;/p&gt;
 </description>
     <pubDate>Fri, 29 Dec 2000 11:50:40 +0000</pubDate>
 <dc:creator>Nico</dc:creator>
 <guid isPermaLink="false">comment 1076186 at https://www.webmaster-forums.net</guid>
  </item>
  <item>
    <title></title>
    <link>https://www.webmaster-forums.net/serverside-scripting/database#comment-1076184</link>
    <description> &lt;p&gt;I&#039;ll post it here then &lt;img src=&quot;https://www.webmaster-forums.net/misc/smileys/smile.png&quot; title=&quot;Smiling&quot; alt=&quot;Smiling&quot; class=&quot;smiley-content&quot; /&gt; It will be used for YaBB2, so you&#039;ll have to change a few things. Replace the Common::warning subs with your own warning sub or just die. And you should change the Common::lock and Common::unlock subs too. Good luck.&lt;/p&gt;
&lt;p&gt;use it like this:&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;use zBase;&lt;br /&gt;&lt;br /&gt;my $db = zBase-&amp;gt;new();&lt;br /&gt;my %record;&lt;br /&gt;&lt;br /&gt;$db-&amp;gt;connect(&amp;quot;some.db&amp;quot;);&lt;br /&gt;$db-&amp;gt;read();&lt;br /&gt;while(!$db-&amp;gt;{EODB}) {&lt;br /&gt;	%record = $db-&amp;gt;getnext();&lt;br /&gt;	print qq($record{&amp;#039;fieldname&amp;#039;});&lt;br /&gt;}&lt;br /&gt;$db-&amp;gt;disconnect();&lt;/code&gt;&lt;/div&gt;&#039;&lt;br /&gt;
Here the magic begins &lt;img src=&quot;https://www.webmaster-forums.net/misc/smileys/big.png&quot; title=&quot;Laughing out loud&quot; alt=&quot;Laughing out loud&quot; class=&quot;smiley-content&quot; /&gt; If you have questions, ask them.&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;package zBase;&lt;br /&gt;&lt;br /&gt;###############################################&lt;br /&gt;# YaBB2: Yet another Bulletin Board version 2 #&lt;br /&gt;###############################################&lt;br /&gt;# Open Source project, released under YPL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&lt;br /&gt;# Originally founded by:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&lt;br /&gt;# Zef Hemel(&lt;a href=&quot;mailto:zef@zefnet.com&quot;&gt;zef@zefnet.com&lt;/a&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&lt;br /&gt;# &amp;lt;a href=&amp;quot;http://www.yabb.org&amp;quot; class=&amp;quot;bb-url&amp;quot;&amp;gt;http://www.yabb.org&amp;lt;/a&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&lt;br /&gt;###############################################&lt;br /&gt;# This file is copyrighted, and written by:&amp;nbsp;&amp;nbsp; #&lt;br /&gt;# Zef Hemel (&lt;a href=&quot;mailto:zef@zefnet.com&quot;&gt;zef@zefnet.com&lt;/a&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&lt;br /&gt;###############################################&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;my $splitc = &amp;#039;\|&amp;#039;;&lt;br /&gt;my $joinc = &amp;#039;|&amp;#039;;&lt;br /&gt;my $replacecby = &amp;#039;&amp;amp;pipe;&amp;#039;;&lt;br /&gt;my $linefeedsplit = &amp;#039;\&amp;amp;lf;&amp;#039;;&lt;br /&gt;my $linefeedjoin = &amp;#039;&amp;amp;lf;&amp;#039;;&lt;br /&gt;&lt;br /&gt;# Syntax: $object = zBase-&amp;gt;new();&lt;br /&gt;# Creates a new zBase object&lt;br /&gt;&lt;br /&gt;sub new {&lt;br /&gt;	my $self = {};&lt;br /&gt;	$self-&amp;gt;{filename} = undef;&lt;br /&gt;	$self-&amp;gt;{nextrec} = 0;&lt;br /&gt;	$self-&amp;gt;{nextqueryrec} = 0;&lt;br /&gt;	$self-&amp;gt;{EODB} = 0;&lt;br /&gt;	$self-&amp;gt;{EOQR} = 0;&lt;br /&gt;	$self-&amp;gt;{db} = ();&lt;br /&gt;	$self-&amp;gt;{fieldnames} = {};&lt;br /&gt;	$self-&amp;gt;{queryresults} = ();&lt;br /&gt;	$self-&amp;gt;{totalrecs} = undef;&lt;br /&gt;	$self-&amp;gt;{totalqueryresults} = undef;&lt;br /&gt;	$self-&amp;gt;{modified} = 0;&lt;br /&gt;	$self-&amp;gt;{fullyread} = 0;&lt;br /&gt;#	$self-&amp;gt;{reversed} = 0;&lt;br /&gt;	$self-&amp;gt;{readfrom} = 0;&lt;br /&gt;	$self-&amp;gt;{recsstart} = 0;&lt;br /&gt;	$self-&amp;gt;{addrecs2end} = ();&lt;br /&gt;	bless $self;&lt;br /&gt;	return $self;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;connect(&amp;quot;filename&amp;quot;);&lt;br /&gt;# Connects to the given database&lt;br /&gt;&lt;br /&gt;sub connect {&lt;br /&gt;	my $self = shift;&lt;br /&gt;	my $filename = shift;&lt;br /&gt;	my $line;&lt;br /&gt;	my @farray;&lt;br /&gt;	my $i;&lt;br /&gt;	&lt;br /&gt;	$filename =~ s/ /_/go;&lt;br /&gt;	open(DB, &amp;quot;&amp;lt;$filename&amp;quot;) or Common::warning(&amp;quot;File $filename cannot be found: $!&amp;quot;);&lt;br /&gt;	Common::lock(*DB);&lt;br /&gt;	$line = &amp;lt;DB&amp;gt;;&lt;br /&gt;	$self-&amp;gt;{readfrom} = tell(DB);&lt;br /&gt;	$self-&amp;gt;{recsstart} = tell(DB);&lt;br /&gt;	Common::unlock(*DB);&lt;br /&gt;	close(DB);&lt;br /&gt;	chomp($line);&lt;br /&gt;	@farray = split(/$splitc/, $line);&lt;br /&gt;	for($i=0;$i&amp;lt;@farray;++$i) {&lt;br /&gt;		$self-&amp;gt;{fieldnames}{$farray[$i]} = $i;&lt;br /&gt;	}&lt;br /&gt;	$self-&amp;gt;{filename} = $filename;&lt;br /&gt;	$self-&amp;gt;{nextrec} = 0;&lt;br /&gt;	return 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;create(-filename=&amp;gt;&amp;quot;filename&amp;quot;,%fieldnames);&lt;br /&gt;# Creates a new database with the given fieldnames ($fieldnames{&amp;#039;id&amp;#039;}=0 etc.)&lt;br /&gt;&lt;br /&gt;sub create {&lt;br /&gt;	my ($self, %values) = @_;&lt;br /&gt;	my $filename = $values{&amp;#039;-filename&amp;#039;};&lt;br /&gt;	my @array;&lt;br /&gt;	my $line;&lt;br /&gt;	&lt;br /&gt;	$self-&amp;gt;{filename} = $filename;&lt;br /&gt;	&lt;br /&gt;	foreach (sort keys %values) {&lt;br /&gt;		$array[$values{$_}] = $_;&lt;br /&gt;	}&lt;br /&gt;	$line = join($joinc, @array);&lt;br /&gt;	open(DB, &amp;quot;&amp;gt;$filename&amp;quot;) or Common::warning(&amp;quot;Could not create $filename: $!&amp;quot;);&lt;br /&gt;	Common::lock(*DB);&lt;br /&gt;	print DB &amp;quot;$line\n&amp;quot;;&lt;br /&gt;	Common::unlock(*DB);&lt;br /&gt;	close(DB);&lt;br /&gt;	zBase::connect($self, $filename);&lt;br /&gt;	zBase::read($self,0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;read([numtoread]);&lt;br /&gt;# Reads either the whole or a part of the db into the memory&lt;br /&gt;&lt;br /&gt;sub read {&lt;br /&gt;	my $self = shift;&lt;br /&gt;	my $numtoread = shift;&lt;br /&gt;	my $i;&lt;br /&gt;	&lt;br /&gt;	if($self-&amp;gt;{fullyread}) { return 0; }&lt;br /&gt;	$self-&amp;gt;{db} = ();&lt;br /&gt;	open(DB, &amp;quot;&amp;lt;$self-&amp;gt;{filename}&amp;quot;) or Common::warning(&amp;quot;File $self-&amp;gt;{filename} cannot be found&amp;quot;);&lt;br /&gt;	Common::lock(*DB);&lt;br /&gt;	seek(DB, $self-&amp;gt;{readfrom}, 0);&lt;br /&gt;	if(!$numtoread) {&lt;br /&gt;		push(@{$self-&amp;gt;{db}}, &amp;lt;DB&amp;gt;);&lt;br /&gt;		$self-&amp;gt;{fullyread} = 1;&lt;br /&gt;	} else {&lt;br /&gt;		for($i=0;$i&amp;lt;$numtoread;++$i) {&lt;br /&gt;			if(!eof(DB)) { $self-&amp;gt;{db}[$i] = &amp;lt;DB&amp;gt;; }&lt;br /&gt;		}&lt;br /&gt;		$self-&amp;gt;{readfrom} = tell(DB);&lt;br /&gt;	}&lt;br /&gt;	Common::unlock(*DB);&lt;br /&gt;	close(DB);&lt;br /&gt;	chomp @{$self-&amp;gt;{db}};&lt;br /&gt;	$self-&amp;gt;{totalrecs} = @{$self-&amp;gt;{db}};&lt;br /&gt;	if($self-&amp;gt;{totalrecs} == 0) { $self-&amp;gt;{EODB} = 1; } else { $self-&amp;gt;{EODB} = 0; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;getnext([id]);&lt;br /&gt;# Returns the id-th record fields splitted. If no id specified it uses the next&lt;br /&gt;# Specifying id is depreciated&lt;br /&gt;&lt;br /&gt;sub getnext {&lt;br /&gt;	my $self = shift;&lt;br /&gt;	my $rec = $self-&amp;gt;{nextrec};&lt;br /&gt;	my @values = ();&lt;br /&gt;	my $i;&lt;br /&gt;	my %record;&lt;br /&gt;	&lt;br /&gt;	if(@_) { $rec = shift; }&lt;br /&gt;	if($rec==0) { $self-&amp;gt;{EODB}=0; }&lt;br /&gt;	@values = split(/$splitc/, ${$self-&amp;gt;{db}}[$rec]);&lt;br /&gt;	@values = deformatarray(@values);&lt;br /&gt;	foreach (sort keys %{$self-&amp;gt;{fieldnames}}) {&lt;br /&gt;		$record{$_} = $values[$self-&amp;gt;{fieldnames}{$_}];&lt;br /&gt;	}&lt;br /&gt;	if($self-&amp;gt;{nextrec} &amp;lt; $self-&amp;gt;{totalrecs}) {&lt;br /&gt;		$self-&amp;gt;{nextrec} = $rec+1;&lt;br /&gt;		if($self-&amp;gt;{nextrec} == $self-&amp;gt;{totalrecs}) { $self-&amp;gt;{EODB}=1; }&lt;br /&gt;		return %record;&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;add(-location=&amp;gt;&amp;#039;bottom&amp;#039;|&amp;#039;top&amp;#039;, %values);&lt;br /&gt;# Adds the specified record to the database&lt;br /&gt;&lt;br /&gt;sub add {&lt;br /&gt;	my ($self,%params) = @_;&lt;br /&gt;	my $location = $params{&amp;#039;-location&amp;#039;};&lt;br /&gt;	my @record = ();&lt;br /&gt;	#my @newdb = ();&lt;br /&gt;	my $recordline;&lt;br /&gt;	&lt;br /&gt;	zBase::read($self);&lt;br /&gt;	foreach (sort keys %params) {&lt;br /&gt;		$record[$self-&amp;gt;{fieldnames}{$_}] = $params{$_} if($_ ne &amp;#039;-location&amp;#039;);&lt;br /&gt;	}&lt;br /&gt;	@record = formatarray(@record);&lt;br /&gt;	$recordline = join($joinc, @record);&lt;br /&gt;	if($location eq &amp;quot;top&amp;quot;) {&lt;br /&gt;		unshift(@{$self-&amp;gt;{db}}, $recordline);&lt;br /&gt;	}&lt;br /&gt;	elsif($location eq &amp;quot;bottom&amp;quot;) {&lt;br /&gt;		push(@{$self-&amp;gt;{db}}, $recordline);&lt;br /&gt;	}&lt;br /&gt;	++$self-&amp;gt;{totalrecs};&lt;br /&gt;	if($self-&amp;gt;{totalrecs}&amp;gt;1) { $self-&amp;gt;{EODB} = 0; }&lt;br /&gt;	$self-&amp;gt;{modified} = 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;add(-where=&amp;gt;&amp;quot;somefield=value&amp;quot;, -location=&amp;gt;&amp;#039;bottom&amp;#039;|&amp;#039;top&amp;#039;, %values);&lt;br /&gt;# Modifies the records which match -where&lt;br /&gt;&lt;br /&gt;sub modify {&lt;br /&gt;	my ($self,%params) = @_;&lt;br /&gt;	my $location = $params{&amp;#039;-location&amp;#039;};&lt;br /&gt;	my $where = $params{&amp;#039;-where&amp;#039;};&lt;br /&gt;	my $i;&lt;br /&gt;	my $type;&lt;br /&gt;	my ($fieldname, $fieldid, $value);&lt;br /&gt;	my @record;&lt;br /&gt;	my $record2add = &amp;quot;&amp;quot;;&lt;br /&gt;	my @newdb;&lt;br /&gt;	&lt;br /&gt;	zBase::read($self);&lt;br /&gt;	$where =~ s/ = /=/g;&lt;br /&gt;	if($where =~ /=/) {&lt;br /&gt;		($fieldname, $value) = split(/=/, $where);&lt;br /&gt;		$type=&amp;quot;=&amp;quot;;&lt;br /&gt;		$fieldid = $self-&amp;gt;{fieldnames}{$fieldname};&lt;br /&gt;	}&lt;br /&gt;	for($i=0;$i&amp;lt;@{$self-&amp;gt;{db}};++$i) {&lt;br /&gt;		@record = split(/$splitc/, $self-&amp;gt;{db}[$i]);&lt;br /&gt;		if($type eq &amp;quot;=&amp;quot; &amp;amp;&amp;amp; $record[$fieldid] eq $value) {&lt;br /&gt;			foreach (sort keys %params) {&lt;br /&gt;				$record[$self-&amp;gt;{fieldnames}{$_}] = $params{$_} if($_ ne &amp;#039;-location&amp;#039; &amp;amp;&amp;amp; $_ ne &amp;#039;-where&amp;#039;);&lt;br /&gt;			}&lt;br /&gt;			@record = formatarray(@record);&lt;br /&gt;			if(!$location) { $self-&amp;gt;{db}[$i] = join($joinc, @record); }&lt;br /&gt;			else { $record2add = join($joinc, @record); }&lt;br /&gt;		} elsif($location) {&lt;br /&gt;			push(@newdb, $self-&amp;gt;{db}[$i]);&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;	if($location eq &amp;quot;top&amp;quot;) {&lt;br /&gt;		@{$self-&amp;gt;{db}} = ($record2add, @newdb);&lt;br /&gt;	} elsif($location eq &amp;quot;bottom&amp;quot;) {&lt;br /&gt;		@{$self-&amp;gt;{db}} = (@newdb, $record2add);&lt;br /&gt;	}&lt;br /&gt;	$self-&amp;gt;{modified} = 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;delete(-where=&amp;gt;&amp;quot;fieldname=value&amp;quot;);&lt;br /&gt;# Deletes the records which match -where&lt;br /&gt;&lt;br /&gt;sub delete {&lt;br /&gt;	my ($self,%params) = @_;&lt;br /&gt;	my $where = $params{&amp;#039;-where&amp;#039;};&lt;br /&gt;	my $i;&lt;br /&gt;	my $type;&lt;br /&gt;	my ($fieldname, $fieldid, $value);&lt;br /&gt;	my @record;&lt;br /&gt;	my @newdb = ();&lt;br /&gt;	my $numdeleted = 0;&lt;br /&gt;	&lt;br /&gt;	zBase::read($self);&lt;br /&gt;	$where =~ s/ = /=/g;&lt;br /&gt;	if($where =~ /=/) {&lt;br /&gt;		($fieldname, $value) = split(/=/, $where);&lt;br /&gt;		$type=&amp;quot;=&amp;quot;;&lt;br /&gt;		$fieldid = $self-&amp;gt;{fieldnames}{$fieldname};&lt;br /&gt;	}&lt;br /&gt;	for($i=0;$i&amp;lt;@{$self-&amp;gt;{db}};++$i) {&lt;br /&gt;		@record = split(/$splitc/, $self-&amp;gt;{db}[$i]);&lt;br /&gt;		if($type eq &amp;quot;=&amp;quot; &amp;amp;&amp;amp; $record[$fieldid] ne $value) {&lt;br /&gt;			push(@newdb, $self-&amp;gt;{db}[$i]);&lt;br /&gt;		} else { ++$numdeleted; }&lt;br /&gt;	}&lt;br /&gt;	@{$self-&amp;gt;{db}} = @newdb;&lt;br /&gt;	$self-&amp;gt;{totalrecs} = $self-&amp;gt;{totalrecs} - $numdeleted;&lt;br /&gt;	if($self-&amp;gt;{nextrec} &amp;gt;= $self-&amp;gt;{totalrecs}) { $self-&amp;gt;{EODB}=1; }&lt;br /&gt;	$self-&amp;gt;{modified} = 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;query(-where=&amp;gt;&amp;quot;fieldname=value&amp;quot;);&lt;br /&gt;# Puts all records which match -where in its memory to be retrieved by nextquery()&lt;br /&gt;&lt;br /&gt;sub query {&lt;br /&gt;	my ($self,%params) = @_;&lt;br /&gt;	my $where = $params{&amp;#039;-where&amp;#039;};&lt;br /&gt;	my $currec;&lt;br /&gt;	my @temprec;&lt;br /&gt;	my $type;&lt;br /&gt;	my ($fieldname, $value, $fieldid);&lt;br /&gt;	&lt;br /&gt;	@{$self-&amp;gt;{queryresults}} = ();&lt;br /&gt;	$self-&amp;gt;{totalqueryresults} = 0;&lt;br /&gt;	$self-&amp;gt;{EOQR} = 0;&lt;br /&gt;	&lt;br /&gt;	$where =~ s/ = /=/g;&lt;br /&gt;	if($where =~ /=/) {&lt;br /&gt;		($fieldname, $value) = split(/=/, $where);&lt;br /&gt;		$type=&amp;quot;=&amp;quot;;&lt;br /&gt;		$fieldid = $self-&amp;gt;{fieldnames}{$fieldname};&lt;br /&gt;	}&lt;br /&gt;	foreach $currec (@{$self-&amp;gt;{db}}) {&lt;br /&gt;		@temprec = split(/$splitc/, $currec);&lt;br /&gt;		if($type eq &amp;quot;=&amp;quot; &amp;amp;&amp;amp; $temprec[$fieldid] eq $value) {&lt;br /&gt;			push(@{$self-&amp;gt;{queryresults}}, $currec);&lt;br /&gt;			++$self-&amp;gt;{totalqueryresults};&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;	if($self-&amp;gt;{totalqueryresults} == 0) { $self-&amp;gt;{EOQR} = 1; }&lt;br /&gt;	$self-&amp;gt;{nextqueryrec} = 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;getnextquery([id]);&lt;br /&gt;# Retrieves the next (or id-th) record of the query results&lt;br /&gt;&lt;br /&gt;sub getnextquery {&lt;br /&gt;	my $self = shift;&lt;br /&gt;	my $rec = $self-&amp;gt;{nextqueryrec};&lt;br /&gt;	my @values = ();&lt;br /&gt;	my %record;&lt;br /&gt;	my $i;&lt;br /&gt;	&lt;br /&gt;	if(@_) { $rec = shift; }&lt;br /&gt;	if($rec==0) { $self-&amp;gt;{EOQR}=0; }&lt;br /&gt;	@values = split(/$splitc/, ${$self-&amp;gt;{queryresults}}[$rec]);&lt;br /&gt;	@values = deformatarray(@values);&lt;br /&gt;	foreach (sort keys %{$self-&amp;gt;{fieldnames}}) {&lt;br /&gt;		$record{$_} = $values[$self-&amp;gt;{fieldnames}{$_}];&lt;br /&gt;	}&lt;br /&gt;	if($self-&amp;gt;{nextqueryrec} &amp;lt; $self-&amp;gt;{totalqueryresults}) {&lt;br /&gt;		$self-&amp;gt;{nextqueryrec} = $rec+1;&lt;br /&gt;		if($self-&amp;gt;{nextqueryrec} == $self-&amp;gt;{totalqueryresults}) { $self-&amp;gt;{EOQR}=1; }&lt;br /&gt;		return %record;&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;query_first(-where=&amp;gt;&amp;quot;fieldname=value&amp;quot;);&lt;br /&gt;# Returns the first record matching -where&lt;br /&gt;&lt;br /&gt;sub query_first {&lt;br /&gt;	my ($self, %params) = @_;&lt;br /&gt;	my $where = $params{&amp;#039;-where&amp;#039;};&lt;br /&gt;	my %record;&lt;br /&gt;	my $currec;&lt;br /&gt;	my @temprec;&lt;br /&gt;	my @values;&lt;br /&gt;	my $type;&lt;br /&gt;	my $i;&lt;br /&gt;	my ($fieldname, $value, $fieldid);&lt;br /&gt;	&lt;br /&gt;	@{$self-&amp;gt;{queryresults}} = ();&lt;br /&gt;	$where =~ s/ = /=/g;&lt;br /&gt;	if($where =~ /=/) {&lt;br /&gt;		($fieldname, $value) = split(/=/, $where);&lt;br /&gt;		$type=&amp;quot;=&amp;quot;;&lt;br /&gt;		$fieldid = $self-&amp;gt;{fieldnames}{$fieldname};&lt;br /&gt;	}&lt;br /&gt;	foreach $currec (@{$self-&amp;gt;{db}}) {&lt;br /&gt;		@temprec = split(/$splitc/, $currec);&lt;br /&gt;		if($type eq &amp;quot;=&amp;quot; &amp;amp;&amp;amp; $temprec[$fieldid] eq $value) {&lt;br /&gt;			@values = split(/$splitc/, $currec);&lt;br /&gt;			last;&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;	deformatarray(@values);&lt;br /&gt;	foreach (sort keys %{$self-&amp;gt;{fieldnames}}) {&lt;br /&gt;		$record{$_} = $values[$self-&amp;gt;{fieldnames}{$_}];&lt;br /&gt;	}&lt;br /&gt;	return %record;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;write();&lt;br /&gt;# Writes all changes (if any) the database file&lt;br /&gt;&lt;br /&gt;sub write {&lt;br /&gt;	my $self = shift;&lt;br /&gt;	my $currec;&lt;br /&gt;	my @fieldnames;&lt;br /&gt;	&lt;br /&gt;	zBase::read($self);&lt;br /&gt;	if(!$self-&amp;gt;{modified}) { return 0; }&lt;br /&gt;	open(DB, &amp;quot;+&amp;lt;$self-&amp;gt;{filename}&amp;quot;) or Common::warning(&amp;quot;Could not open $self-&amp;gt;{filename} for writing&amp;quot;);&lt;br /&gt;	Common::lock(*DB);&lt;br /&gt;	seek(DB, $self-&amp;gt;{recsstart}, 0);&lt;br /&gt;	foreach $currec (@{$self-&amp;gt;{db}}) {&lt;br /&gt;		print DB &amp;quot;$currec\n&amp;quot;;&lt;br /&gt;	}&lt;br /&gt;	Common::unlock(*DB);&lt;br /&gt;	close(DB);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Syntax: $object-&amp;gt;disconnect();&lt;br /&gt;# Disconnects from the database and clears the biggest arrays&lt;br /&gt;&lt;br /&gt;sub disconnect {&lt;br /&gt;	my $self = shift;&lt;br /&gt;	&lt;br /&gt;	$self-&amp;gt;{db} = ();&lt;br /&gt;	$self-&amp;gt;{queryresults} = ();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub formatarray {&lt;br /&gt;	my @array = @_;&lt;br /&gt;	my $i;&lt;br /&gt;	&lt;br /&gt;	chomp(@array);&lt;br /&gt;	for($i=0;$i&amp;lt;@array;++$i) {&lt;br /&gt;		$array[$i] =~ s/\n/$linefeedjoin/g;&lt;br /&gt;		$array[$i] =~ s/\r//g;&lt;br /&gt;		$array[$i] =~ s/$splitc/$replacecby/g;&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	return @array;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub deformatarray {&lt;br /&gt;	my @array = @_;&lt;br /&gt;	my $i;&lt;br /&gt;	&lt;br /&gt;	chomp(@array);&lt;br /&gt;	for($i=0;$i&amp;lt;@array;++$i) {&lt;br /&gt;		$array[$i] =~ s/$linefeedsplit/\n/g;&lt;br /&gt;		$array[$i] =~ s/$replacecby/$joinc/g;&lt;br /&gt;	}&lt;br /&gt;	return @array;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;1;&lt;/code&gt;&lt;/div&gt;&#039;&lt;/p&gt;
 </description>
     <pubDate>Fri, 29 Dec 2000 09:19:10 +0000</pubDate>
 <dc:creator>zef</dc:creator>
 <guid isPermaLink="false">comment 1076184 at https://www.webmaster-forums.net</guid>
  </item>
  <item>
    <title></title>
    <link>https://www.webmaster-forums.net/serverside-scripting/database#comment-1076157</link>
    <description> &lt;p&gt;Great! Thanks zef! You can send it to &lt;a href=&quot;mailto:webmaster@developy.com&quot;&gt;webmaster@developy.com&lt;/a&gt; or just post it here.&lt;br /&gt;
Regards,&lt;/p&gt;
&lt;p&gt;Nico.-&lt;/p&gt;
 </description>
     <pubDate>Thu, 28 Dec 2000 18:30:31 +0000</pubDate>
 <dc:creator>Nico</dc:creator>
 <guid isPermaLink="false">comment 1076157 at https://www.webmaster-forums.net</guid>
  </item>
  <item>
    <title></title>
    <link>https://www.webmaster-forums.net/serverside-scripting/database#comment-1076156</link>
    <description> &lt;p&gt;I wrote a module for that, if you want it, I could send it to you. No support though I&#039;m too busy for that &lt;img src=&quot;https://www.webmaster-forums.net/misc/smileys/smile.png&quot; title=&quot;Smiling&quot; alt=&quot;Smiling&quot; class=&quot;smiley-content&quot; /&gt; And you should know how to use perl modules too.&lt;/p&gt;
 </description>
     <pubDate>Thu, 28 Dec 2000 18:14:30 +0000</pubDate>
 <dc:creator>zef</dc:creator>
 <guid isPermaLink="false">comment 1076156 at https://www.webmaster-forums.net</guid>
  </item>
  </channel>
</rss>
