You'll need to use a custom controller or a controller extension to do this, and then just use a simple flag to check these fields on save.
// In the controller
private Boolean CheckDone = false;
public PageReference DoSave()
{
Boolean AllGood = true;
if(!CheckDone)
{
// check the fields in question
if(SomeRecord.Field__c == '')
{
ApexPages.AddPageMessage(new ApexPages.PageMessage(ApexPages.Severity.Info, 'You haven't entered a value for the field Field__c.');
AllGood = false;
}
else if(SomeRecord.OtherField__c == '')
{
// etc.
}
}
if(CheckDone || AllGood)
{
// Save the record
upsert SomeRecord;
CheckDone = false;
return SomePageReferenceOrNull;
}
CheckDone = true;
return null;
}
In the page you just need to be sure to include a messages tag and to use your custom Save action for the button being used:
<apex:pageMessages/>
<apex:pageBlock>
<apex:pageBlockButtons>
<apex:commandButton action="{!DoSave}" value="Save"/>
Note I've written this code in-browser, so can't be sure that it'll compile as is, but I hope it demonstrates the technique effectively.