PHP-Class

Hallo,

Ich werde es probieren, wenns nicht klappt, werde ich mich nochmals melden.
Viele Grüsse aus Frankreich
Airis
 
Hallo Mik3e,

ich muss mich nochmals melden.
Momentan habe ich folgenden Stand zum Testen:
PHP:
 <?php
error_reporting(E_ALL);
require_once("vatchecker_class.php");
$vat = new VATChecker("data_vat.xml", "error_vat.xml", "en");
//$ALTFIELD3 = "FR88 331 121 327";
if (!empty($ALTFIELD3))
if ($vat->check($ALTFIELD3))
echo "numéro valide (".ucfirst($vat->getPays($ALTFIELD3)).")";
// echo "VAT is ok";
else
echo $vat->getLastError();
?> 
<form action='<?php echo $_SERVER["PHP_SELF"]; ?>' method='post' name='Form1'>
<input type="text" name="ALTFIELD3" maxlength="50" size="40">
<td>
<input type="button" value="Weiter">
<input type="reset" value="Zuruecksetzen">
</td>
</form>

Ich komme allerdings nicht so recht weiter, die Überprüfung funktioniert nicht.
Hast Du eine Idee für mich?

Viele Grüsse aus Frankreich
Airis
 
Sorry, ohne genaue Fehlerbeschreibung kann ich Dir nicht helfen...
Und die VAT Klasse kenn ich auch nicht...
 
Hallo Mik3e,

eine Fehlerbeschreibung ist nicht möglich, es passiert nichts, wenn ich eine VAT-Nr. zum Prüfen eingebe und absende.

Die VAT Klasse sieht nun folgendermaßen aus:
vatchecker_class.php
PHP:
<?php
class VATChecker{
 
private $langue;
private $data;
private $errors;
private $last_error;
 
/* Constructor
* $xml_fic : path to data_vat.xml
* $xml_error : path to error_vat.xml
* $langue : language to use
*/
public function __construct($xml_fic, $xml_error, $langue = "en"){
$this->langue = $langue;
 
$xml = simplexml_load_file($xml_fic);
if($xml){
foreach($xml as $pays){
	$code = (string)$pays->code;
	foreach ($pays->nom as $value)
	 if($value['langue'] == $langue)
	 $this->data[$code]['nom'] = (string)$value;
	foreach($pays->masques as $masque){
	 $this->data[$code]['masques'][] = "^".(string)$masque->masque."$";
	}
} 
}
 
$xml = simplexml_load_file($xml_error);
if($xml){
foreach($xml as $error){
	$code = (string)$error->code;
	foreach($error->text as $value)
	 if($value['langue'] == $langue)
	 $this->errors[$code] = (string)$value; 
} 
}
}
 
public function getData(){
return $this->data; 
}
 
public function getErrors(){
return $this->errors; 
}
 
private function setLastError($num){
if(array_key_exists($num, $this->getErrors()))
$this->last_error = $num;
else 
$this->last_error = 999;
 
return false;
}
 
public function getLastError(){
return $this->errors[$this->last_error]; 
}
 
/* Returns country name 
* $ALTFIELD3 : VAT number
*
*/
public function getPays($ALTFIELD3){
$code = substr(str_replace(" ", "", strtoupper($ALTFIELD3)), 0, 2);
$data = $this->getData();
if(array_key_exists($code, $data))
return $data[$code]['nom']; 
return false;
}
 
/* Checks if vat number is well constructed
* $ALTFIELD3 : VAT number
*
*/
private function checkStructure($ALTFIELD3){
if(ereg("^([A-Z]{2})", $ALTFIELD3, $regs) && array_key_exists($regs[1], $this->getData())){
$ALTFIELD3 = substr($ALTFIELD3, 2);
foreach($this->data[$regs[1]]['masques'] as $masque){
	if(ereg($masque, $ALTFIELD3))
	 return true;
} 
}
return false;
}
 
/* Checks if vat number exists
* $ALTFIELD3 : VAT number
*/
public function check($ALTFIELD3){
$ALTFIELD3 = str_replace(" ", "", strtoupper($ALTFIELD3));
if($this->checkStructure($ALTFIELD3)){
return $this->checkMSVAT($ALTFIELD3);
}
return $this->setLastError(1);
}
 
 
/* Send request to VIES site and retrieve results
* $url : Vies' site
*/
private function loadData($url){
$url = parse_url($url);
 
if(!in_array($url['scheme'],array('','http')))
return;
 
$fp = fsockopen ($url['host'], ($url['port'] > 0 ? $url['port'] : 80), $errno, $errstr, 2);
if (!$fp){
return False;
}
else{
fputs ($fp, "GET ".$url['path']. (isSet($url['query']) ? '?'.$url['query'] : '')." HTTP/1.0\r\n");
fputs ($fp, "Host: ".$url['host']."\r\n");
fputs($fp, "Connection: close\r\n\r\n");	 
 
$data = "";
stream_set_blocking($fp,false);
stream_set_timeout($fp, 4); 
$status = socket_get_status($fp);
while(!feof($fp) && !$status['timed_out']) {
	 $data .= fgets($fp, 1000);
	 $status = socket_get_status($fp);		 
}
 
if ( $status['timed_out'] ) 
	return false;
	 fclose ($fp);
	 return $data;
}
}
 
/* Send & request to VIES site and interprets results
* $ALTFIELD3 : VAT number
*/
function checkMSVAT($ALTFIELD3){
$ViesMS = strtoupper(substr($ALTFIELD3, 0, 2));
$ALTFIELD3 = substr($ALTFIELD3, 2);	
$urlVies = "http://www.europa.eu.int:80/comm/taxation_customs/vies/cgi-bin/viesquer/?VAT=$ALTFIELD3&MS=$ViesMS&Lang=EN";
$DataHTML = $this->loadData($urlVies);
 
$ViesOk = 'YES, VALID VAT NUMBER';
$ViesEr = 'NO, INVALID VAT NUMBER';
 
if (!$DataHTML)
return $this->setLastError(2);
else{
$DataHTML = '#' . strToUpper($DataHTML);
return ((strPos($DataHTML,'REQUEST TIME-OUT') > 0) OR (strPos($DataHTML,$ViesOk) > 0)) ? true : $this->setLastError(3);
} 
}
}
?>

Die Original-"vat_test.php" funktioniert ja soweit. Ich weis eben nicht wie ich alles in mein Formular eingebunden bekomme.
Ich hoffe, Du kannst mir hierzu etwas helfen, stehe voll daneben.

Viele Grüsse aus Frankreich
Airis
 
Möglicherweise funktionieren die XML Parser Funktionen nicht...(simplexml_load_file)
Setz mal einige Breakpoints und teste durch, was PHP noch ausführt und was nicht...
 
Zurück