Perso Check Script erweitern?


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Shorty1968

Erfahrenes Mitglied
#61
*EDIT*
Erledigt habe es hin bekommen,vielen dank für eure Hilfe nun sollte alles Passen.

@basti1012
Schau bei mir noch mal bitte irgendwas stimmt wirder nicht,das Folgende und der Gruppen Wechsel wird nicht angezeigt.
Code:
if(isset($_SESSION['customer_id']) AND isset($_SESSION['customer_email_address'])){
echo "Du bist eingeloggt und kannst deine Personalien jetzt Personaliesieren";
}else{
die("Du  mußt eingelogt sein um die Personalausweis Daten anzugeben!!<br /><a href='login.php'>>>Zum Login<<</a>");
}
Startseite - Schnaepchenpiet
 
Zuletzt bearbeitet:

basti1012

Erfahrenes Mitglied
#62
du meinst das er jetzt sagt das du nicht eingeloggt bist ?

was steht den da wenn du das ausgeben tust
Code:
echo '<pre>';
print_r($_SESSION);
echo '</pre>';
Aber schick mir mal die datein ich baue das mal in shop ein dann kann man das besser sehen was da los ist .
 

basti1012

Erfahrenes Mitglied
#64
Das es nicht funktioniert liegt an den ganzen Datenbank kram. In den Script von mir bauen wir die verbindung ja in den Script mit auf. Bei deinen Template Script fällt das ja alles weg weil du ja die Datenbank verbindung von Shop nutzen willst. Ich weiß nicht wie man das jetzt nennt , aber im Shop sieht das alles ungefähr so aus
Code:
$idin=xtc_db_input($id_der_eingelogt_ist);
$mailin=xtc_db_input($email_der_eingelogt_ist);
$check_perso = xtc_db_query("UPDATE customers SET customers_status='5' WHERE customers_id='$idin'  AND customers_email_address='$mailin'");
 // var_dump($check_perso);
       echo '<pre>';
print_r($check_perso);
echo '</pre>';
    $check_PERSONAL = xtc_db_fetch_array($check_perso);
NUR ALS BEISPIEL.
Will damit sagen das es so wie es jetzt bei dir ist nicht gehen kann. Wenn dann den ganzen Datenbank kram von mein Script nehmen, oder etwas warten bis ich da durchgeblickt habe.
Vieleicht ist ein anderer in der Zeit schneller der da durchblickt ,wäre auch sehr gut.

Aufjedenfall weiß ich wo es dran liegt und wo ich jetzt suchen muss um das zu beheben
 

basti1012

Erfahrenes Mitglied
#65
Ging doch etwas einfacher als erwartet.
Erstmal ein Hinweiß. Du rufst das Perso Script einmal im gleichen Fenster auf und einmal im Popup.
Wenn du im Popup machst ist alles ok. Im gleichen Fentster bekommst du ein Fehler von Javascript ( Zeile 214 ) weil es das Parent dann ja nicht mehr gibt. Da solltest du vieleicht eine if abfrage rein bauen oder so ob du im Popup bist oder oder im gleichen Fenster damit der Fehler nicht mehr kommt.

Jetzt Zum Script
2 Zeile gibst du den erwünschten neuen Status ein


PHP:
<?php
$status_vergabe=5;//hier den neuen Status eingeben der vergeben werden soll
include ('includes/application_top.php');

$smarty = new Smarty;

if (!isset($_SESSION['customer_id'])) {
  xtc_redirect(xtc_href_link(FILENAME_LOGIN, '', 'SSL'));
}

require (DIR_WS_INCLUDES.'header.php');
require (DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/source/boxes.php');

$breadcrumb->add('Personalausweis Check', xtc_href_link('perso_check.php', '', 'SSL'));
//echo '<pre>';
//print_r($_SESSION);
//echo '</pre>';

if(isset($_SESSION['customer_id']) AND isset($_SESSION['customer_email_address'])){
    echo "Du bist eingeloggt und kannst deine Personalien jetzt Personaliesieren";
?>
<?php
}else{
    die("Du  mußt eingelogt sein um die Personalausweis Daten anzugeben!!<br /><a href='#'>Login Url hier rein</a>");
}

function check_number($id, $checknumber) {
$p = 7;
$sum = 0;
for($i=0; $i < strlen($id); $i++) {
$char = $id{$i};

if($char >= '0' && $char <= '9')
$int = intval($char);
else
$int = ord($char)-55;
$sum += $int*$p;

if($p==1)
$p=7;
else if($p==3)
$p=1;
else if($p==7)
$p=3;
}

$last_number = substr(strval($sum), -1);
return $last_number == $checknumber;
}

//Gibt die Art (neu vs. alt) des Personalausweis zurück
function perso_type($id) {
$splits = explode(" ", strtoupper($id));
if(strlen($splits[0]) == 11 && strlen($splits[1]) == 7 && strlen($splits[2]) == 7 && strlen($splits[3]) == 1) {
return 'old';
} else if(strlen($splits[0]) == 10 && strlen($splits[1]) == 7 && strlen($splits[2]) == 8 && strlen($splits[3]) == 1) {
return 'new';
} else {
return 'unknown';
}
}

//Sind die Prüfziffern gültig
function perso_checksum($id) {
$splits = explode(" ", strtoupper($id));

$checksums = array();
$perso_type = perso_type($id);

if($perso_type == 'unknown') {
return false;
}

$checksums[] = array(substr($splits[0],0,9), substr($splits[0],9,1));
$checksums[] = array(substr($splits[1],0,6), substr($splits[1],6,1));
$checksums[] = array(substr($splits[2],0,6), substr($splits[2],6,1));
$checksums[] = array(substr($splits[0],0,10).substr($splits[1],0,7).substr($splits[2],0,7), $splits[3]);

//Überprüfung der Checksummen
foreach($checksums as $checksum) {
if(!check_number($checksum[0], $checksum[1])) {
return false;
}
}

   return true;
}

//Ist der Perso noch gültig?
function perso_gueltig($id) {
   $splits = explode(" ", $id);

   $valid_until = mktime(0,0,0, substr($splits[2], 2, 2) , substr($splits[2], 4, 2) , "20".substr($splits[2], 0, 2));

   //Ist der Perso noch gültig
   if(time() > $valid_until)
      return false;
   return true;
}

//Informationen aus dem Perso beziehen
function perso_info($id) {
   $splits = explode(" ", $id);

   //$return: Ein Objekt mit den Daten aus der Ausweisnummer
   $return = new stdClass();
   $return->perso_type = perso_type($id);
   $return->geb = new stdClass();
   $return->geb->tag= $splits[1]{4} . $splits[1]{5}; //Geburtstag
   $return->geb->monat = $splits[1]{2} . $splits[1]{3}; //Geburtsmonat
   $return->geb->jahr = $splits[1]{0} . $splits[1]{1}; //Geburtsjahr
   if($return->geb->jahr > intval(date("y"))) {
$return->geb->jahr = "19".$return->geb->jahr;
   } else {
$return->geb->jahr = "20".$return->geb->jahr;
   }


   $alter = date("Y") - $return->geb->jahr;

   //Hatte er schon Geburtstag?
if( (date("n") < $return->geb->monat) OR (date("n") == $return->geb->monat AND date("j") < $return->geb->tag) ) {
$alter--;
}

   $return->alter = $alter;

   if($alter >= 18) {
      $return->volljaehrig = true;
   } else {
      $return->volljaehrig = false;
   }

   $return->ablauf = new stdClass();
   $return->ablauf->tag = $splits[2]{4} . $splits[2]{5}; //Ausweis Ablauf Tag
   $return->ablauf->monat = $splits[2]{2} . $splits[2]{3}; //Ausweis Ablauf Monat
   $return->ablauf->jahr = "20".$splits[2]{0} . $splits[2]{1}; //Ausweis Ablauf Jahr

   if($return->perso_type == 'old') {
$return->herkunft = $splits[0]{10};
   } else {
        $return->herkunft = $splits[2]{7};
   }
   //Ein Deutscher?
   if(strtolower($return->herkunft) == "d") {
      $return->deutscher = true;
   } else {
      $return->deutscher = false;
   }
   //Behördenkennzahl als Nummer
   $return->behoerdenkennzahl = substr($splits[0], 0, 4);
   return $return;
}

if(isset($_GET['check'])) {
   $perso_id = $_POST['ida']." ".$_POST['idb']." ".$_POST['idc']." ".$_POST['idd'];
   if(perso_checksum($perso_id)) {
      echo "Personalausweisnummer korrekt!<br>";

$idin=xtc_db_input($_SESSION['customer_id']);
$mailin=xtc_db_input($_SESSION['customer_email_address']);
$check_perso = xtc_db_query("UPDATE customers SET customers_status='$status_vergabe' WHERE customers_id='$idin'  AND customers_email_address='$mailin'");

//-----------Von hier

$check_customer_query = xtc_db_query("SELECT * FROM `customers` WHERE `customers_id`='$idin'");

//var_dump($check_customer_query);

if (xtc_db_num_rows($check_customer_query) >0) {

   $check_personalstatus = xtc_db_fetch_array($check_customer_query);
   $neuer_status=htmlspecialchars($check_personalstatus['customers_status']);
   if($neuer_status==$status_vergabe){
     $id_gegencheck=htmlspecialchars($check_personalstatus['customers_id']);
     $email_gegencheck=htmlspecialchars($check_personalstatus['customers_email_address']);
     
       echo "<br>Der User mit der Id= '.$id_gegencheck.'<br>
             und der Email = '.$email_gegencheck.'<br>
             hatjetztden Status '.$neuer_status.'";
     }else{
        echo "Der status  wurde nicht aktualiesiert";
     }
  } else {
       die("Error");// . mysqli_error();
  }


//-------  Bis hier ist nicht nötig wenn man auf den Gegencheck verzichten kann

  if(!perso_gueltig($perso_id)) {
      echo "<br /> <b>Perso ist abgelaufen!</b>";
   }
      echo "<br /><br /> Daten der Ausweisnummer: <pre>";
      $data = perso_info($perso_id);
      print_r($data);
      echo "</pre>";
   } else {
      echo "Personalausweisnummer falsch!<br /><br />";
   }
}else{

$smarty->assign('language', $_SESSION['language']);
$smarty->caching = 0;
$main_content = $smarty->fetch(CURRENT_TEMPLATE.'/module/perso_check.html');


$smarty->assign('main_content', $main_content);

$smarty->caching = 0;
if(!defined(RM)) $smarty->load_filter('output', 'note');
$smarty->display(CURRENT_TEMPLATE.'/index.html');

echo '<script>window.onunload = refreshParent; function refreshParent() { window.opener.location.reload(); }</script>';

include ('includes/application_bottom.php');
}
?>
Da durch das es jetzt mit über den Shop läuft ,fallen die Hinweiße aus post #57 fast alle weg.

Wäre aber nett wenn @ComFreek da auch nochmal drüber kucken kann.
Wie macht man eigentlich ein UPDATE query gegencheck ob der UPDATE funktioniert hat ?
Weil ich mache das mit einer zusätzlichen SELECT abfrage , aber das geht doch in einer abfrage oder nicht ?

@Shorty1968 ich habe im Shop dir den Admin Status zurück gegeben damit du das Script vorher testen kannst wenn du willst .
 
Zuletzt bearbeitet:

Shorty1968

Erfahrenes Mitglied
#66
Vielen dank nun scheint es zu gehen nur die Anzeigen sind erst nach dem Ausführen zu sehen wie das du bist eingeloggt.

Genau meine ich das dieser Teil,erst nach der Überprüfung des Perso erscheint und nicht wie er soll vorher.
Code:
if(isset($_SESSION['customer_id']) AND isset($_SESSION['customer_email_address'])){
    echo "Du bist eingeloggt und die Überprüfung war erfolgreich&nbsp;&nbsp;";
}else{
    die("Du  mußt eingelogt sein um die Personalausweis Daten anzugeben!!<br /><a href='#'>Login Url hier rein</a>");
}
Ich habe den text verändert.
 
Zuletzt bearbeitet:

basti1012

Erfahrenes Mitglied
#67
Stimmt ,hatte ich gar nicht mehr dran gedacht. Kucke nachher nochmal danach fals du bis dahin noch nicht hinbekommen hast . Welche echos willst du den überhaupt anzeigen lassen? Weil einige echos die ich zur überprüfung da rein gemacht habe will ja keiner sehen .
Die die() ausgabe mit den eingeloggt sein kann eigentlich auch weg weil wenn man nicht angemeldet ist greift das andere Script aus Zeile 8. Also so weit sollte der Code eigentlich gar nicht kommen das da steht "
Du mußt eingelogt sein um die Personalausweis Daten anzugeben!!"
Also bleibt ja eigentich nur noch der eine Text übrig das die überprüfung erfolgreich wahr und die dürfte ja nur nach der überprüfung kommen .

Aber ich kucke nachher nochmal da rein.

Ich habe das bei mir nochmal etwas geändert, so das auch nur die echos kommen die kommen sollen. Auserdem habe ich ein Link eingebaut der zum Artikel zurück springt.( Wenn im gleichen Fenster geladen ).
Aber vieleicht hast du das ja auch schon eingebaut ,
ich weiß ja nicht wie das bei dir jetzt aussieht und wie du dir das gedacht hast .Dein Letzter Link zum Shop geht irgendwie nicht mehr der noch in mein Browser gespeichert wahr.
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
#69
$idin=xtc_db_input($_SESSION['customer_id']); $mailin=xtc_db_input($_SESSION['customer_email_address']);
$check_perso = xtc_db_query("UPDATE customers SET customers_status='$status_vergabe' WHERE customers_id='$idin' AND customers_email_address='$mailin'");
Das sind leider keine Prepared Statements, aber vielleicht unterstützt das Framework von @Shorty1968 die auch gar nicht? (Falls dem so ist, so kann es wohl nur >= 1 Jahrzehnt alt sein und ich am besten ein anderes nehmen ;))

Ansonsten würde ich xtc_db_input noch auf $status_vergabe draufwerfen - nur zur Sicherheit, falls jemand diesen Wert auf einen nichtnumerischen irgendwann mal abändert.

Weil ich mache das mit einer zusätzlichen SELECT abfrage , aber das geht doch in einer abfrage oder nicht ?
Mit einem zusätzlichen SELECT außerhalb einer Transaktion ist das auch falsch -> Nebenläufigkeitsprobleme!

Wie macht man eigentlich ein UPDATE query gegencheck ob der UPDATE funktioniert hat ?
Dazu müsste man wissen, was xtc_db_query zurückliefert. Normalerweise gibt es so etwas wie num_affected_rows beim MySQLi-Interface.
 

basti1012

Erfahrenes Mitglied
#73
der rote Kasten umkreist die ausgabe von print()
Wenn du die Daten aber angezeigt haben willst würde ich das vieleicht soanzeiegn.
Geburstag = 10.12.1980
Perso Gültig bis = 22.08.2024
Perso Nummer = 801210 42020822 llahzdbjbg26 8

So könnte man die Daten zusammen bauen weil dann sieht es ja besser aus.
Da du die Daten aus Perso gar nicht speicherst brauch man da ja nur die Ausgabe , oderläßt man ganz weg weil die ja sowieso nicht mehr gebraucht werden.

Aber das musst du wissen was du gerne haben willst
 

basti1012

Erfahrenes Mitglied
#74
Dazu müsste man wissen, was xtc_db_query zurückliefert. Normalerweise gibt es so etwas wie num_affected_rows beim MySQLi-Interface.
Da ist mein kleines Problem. Bei einer Select Abfrage kriegt man halt die Daten zurück die man im Query angibt. OK
Nur Update ist mein problem. In diesen Fall frage ich die Email und Id des Users ab .Stimmt die bekommt er den Status 5 , der vorher 1,2,3, oder 4 sein konnte.

Nur man kommt da doch nix brauch bares zurück ? Zumindes hat mit var-dump() immer NULL,, Bool oder nee 1 wahr da glaube ich auch mal angezeigt.
Bei der 1 bin ich mir jetzt nicht sicher da muss ich nochmal kucken. Aber wenn 1 für erfolgreich stehen würde wäre das ja kein problem.
Denke aber das ich das schon entdekt hätte und die Frage dann gar nicht gestellt hätte :)
 

Shorty1968

Erfahrenes Mitglied
#75
der rote Kasten umkreist die ausgabe von print()
Wenn du die Daten aber angezeigt haben willst würde ich das vieleicht soanzeiegn.
Geburstag = 10.12.1980
Perso Gültig bis = 22.08.2024
Perso Nummer = 801210 42020822 llahzdbjbg26 8

So könnte man die Daten zusammen bauen weil dann sieht es ja besser aus.
Da du die Daten aus Perso gar nicht speicherst brauch man da ja nur die Ausgabe , oderläßt man ganz weg weil die ja sowieso nicht mehr gebraucht werden.

Aber das musst du wissen was du gerne haben willst
Mein Problem ist das ich die stelle an der ich das ändern kann nicht finde?

Ich habe die Datei nach print abgesucht und da nur das print_r($data); aber da ist nichts mehr mit Daten.
 

basti1012

Erfahrenes Mitglied
#76
Ich bekomme gerade auch die Kriese.Habe schon 1000 mal Arrays ausgelesen, aber mit diesen komischen Objekt bekomme ich es gerade auch nicht hin. Was soll den das schon wieder :mad:
 

basti1012

Erfahrenes Mitglied
#77
Ich habe es jetzt so gemacht.
echo "<pre>";
print-r($data);
echo "</pre>";
mit Das ausgetauscht
PHP:
   $persoablauf=$data->ablauf->tag.'.'.$data->ablauf->monat.'.'.$data->ablauf->jahr;
   $geb=$data->geb->tag.'.'.$data->geb->monat.'.'.$data->geb->jahr.' ('.$data->alter.')';
   $alter=$data->volljaehrig;
   if($alter==true){
    $voll='Du bist Volljähig';
   }else if($alter==false){
    $voll= 'Nicht Volljährig';
   }
 
echo "<span>Ausweißnummer : $perso_id</span><br>
           <span>Gültig bis:     $persoablauf </span><br>
           <span>Geburstag :     $geb</span><br>
           <span>Volljährig  :  $voll </span><br>";
Nur da habe ich mal nee Frage an die PHP Jungs.
Ich wollte die Variabeln noch in htmlspecialchats() packen weil ich denke as es da hingehöhrt. Aber bei mir wird der Text htmlspecialchars() ausgeschrieben und nicht als Code verwendet. Die Variabeln da drinne werden angezeigt . Finde ich gerade komisch. Oder brauch man das in diesen Fall nicht ?
Aber kann ich mir eigentlich nicht vorstellen sind ja keine statements
 

Shorty1968

Erfahrenes Mitglied
#78
*EDIT*
Ich danke euch viel mals für die das ihr mir das Modul fertig gemacht habt,ich habe nun meine änderungen auch fertig und habe es nun so wie ich es haben wollte.

Nur eins fehlt mir noch das der Kunde nach erfolgreicher Perso Prüfung Automatisch zum Shop zurück geleitet wird,was muss ich dafür in die .php machen?
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
#79
Ich wollte die Variabeln noch in htmlspecialchats() packen weil ich denke as es da hingehöhrt. Aber bei mir wird der Text htmlspecialchars() ausgeschrieben und nicht als Code verwendet.
Woher soll PHP wissen, ob du htmlspecialchars() als Text oder als Funktionsaufruf haben möchtest? Variablen erkennt PHP am Dollarzeichen am Anfang. Du müsstest es wie folgt tun:
PHP:
... " Ausweisnummer: " + htmlspecialchars($perso_id, ENT_HTML5, 'utf-8') + "..."
(Beachte übrigens, dass allgemein für Maskierungen der Kontext [hier HTML5 von mir gewählt] als auch die Zeichenkodierung [hier UTF-8 von mir gewählt] entscheidend für die Sicherheit sind! Wenn eins davon nicht mit dem eigentlichen Kontext zu tun hat, etwa weil die Ausgabe eigentlich in einer anderen Zeichenkodierung ist, kann es zu Sicherheitslücken kommen.)
 

basti1012

Erfahrenes Mitglied
#80
Danke dir @ComFreek für die aufklärung

Nur eins fehlt mir noch das der Kunde nach erfolgreicher Perso Prüfung Automatisch zum Shop zurück geleitet wird,was muss ich dafür in die .php machen?
Ohne popup habe ich das ,mit history.go(-2); gemacht. Im Popup geht das nicht weil beim Aufruf des Popups ja noch keine History da ist .Ich würde es vieleicht damit versuchen das du beim Klick auf persp Checken die aktuelle url mit an der url hängst und somit später wieder aufrufbar ist.
Oder Seite in localstorage oder Cookie speichern. Das wäre meine Ideen . Vieleicht hat einer noch bessere Ideen ?
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…