dax4fun
Goto Top

Hihi :) mit php eine txt und sql abfrage basteln

Hi Folks,

ich will mir die Arbeit ein wenig erleichtern (versuche es zumindest) face-smile

soo die Frage :

nehmen wir an es gibt 10 Mitarbeiter die verschieden schnell sind beim Akten abarbeiten m1 m2 m3 ... m10 und die geben jeden Tag an wieviele Akten sie abgearbeitet haben.

das schaut dann in der mysqldb so aus für m1

mitarbeiter,datum,spalte3, spalte4 
1,2014-10-01,123,456
1,2014-10-02,224,557
1,2014-10-03,333,357

monat für monat face-sad

doch zur Zeit der Grippewelle gehen manche in den Krankenstand face-sad und lassen die Akten im Luftfall zurück

dann schaut das so aus bei Bsp. m1 alias 1
table: mitarbeiter
1,2014-10-01,123,456
1,2014-10-02,224,557
1,2014-10-04,123,456
1,2014-10-05,224,557
1,2014-10-06,333,357
wo ist der Eintrag für 2014-10-03???

ich habe jetzt eine m.txt Datei wo drinen (untereinander) m1 m2 m3 (also die aktiven Mitarbeiter ) stehen und selecte in mitarbeiter wo m1 und datum 2014-10-01, 2014-10-02 03 04 05 06 usw.
will diese Arbeit per php abhacken welches mir die Datumslücken anzeigt
also suche in m.txt m1 raus dann schau in mysql ob m1 von datum 1 bis 31 jeden Tag aktiv ist und dann weiter zu m2, also alle die in der txt vorhanden sind

ich hoffe ich habe es ein bischen spannender gemacht da das auch verständlicher ist

Danke euch

Grüße dax

Content-Key: 250835

Url: https://administrator.de/contentid/250835

Printed on: April 19, 2024 at 11:04 o'clock

Member: Arano
Arano Oct 03, 2014 at 15:12:20 (UTC)
Goto Top
hallo dax
habe die re hand gerade in einer gipsschiene, was das tippen nicht einfacher macht face-wink

ja, ich würde es genau so machen !
das war doch die frage oder ? denn eine andere konnte ich nicht herauslesen.


~arano
Member: dax4fun
dax4fun Oct 04, 2014 updated at 12:54:10 (UTC)
Goto Top
hi, @Arano

was ist denn passiert ???

eigendlich was ich brauche/suche ist ein in php :
suche in m.txt m1 (erster eintrag) raus dann schau in mysql ob m1 von datum 1 bis 31 vorhanden wenn nicht anzeigen und dann weiter zu m2, also alle die in der txt vorhanden sind.

ich hab es für für einen Tag geschaft/gebastelt aber kann es nicht für mehrene Tage anwenden
was ich jetzt habe ist dieses:
$gestern=date("Y-m-d", time()-86400);   
$aktive_mitarbeiter = array();
mysql_connect($_db_host, $_db_username, $_db_passwort);
mysql_select_db($_db_datenbank);

 $sql = "SELECT mitarbeiter FROM mitarbeiter_tbl WHERE mitarbeiter like '$mtxt%' and DATUM LIKE '$gestern%' ORDER BY mitarbeiter";  

$result = mysql_query($sql) or die(mysql_error());;

$file = fopen("m.txt", "r");  
while(!feof($file)){
    $mtxt = fgets($file);
	$aktive_mitarbeiter = trim($shoptxt);
}

while($row = mysql_fetch_array($result)) {

if (in_array($row, $aktive_mitarbeiter)) {
	//echo "Eintrag Vorhanden " . $row . "<br />"; 
} else {
	echo "Eintrag nicht Vorhanden " . $row . "<br />";  
}

}


fclose($file);

?>

Das Funkt aber halt nur für gestern wie kann ich es auf einen Monat ausdehnen ???
Member: Arano
Arano Oct 06, 2014 at 10:50:01 (UTC)
Goto Top
Moin moin!

Tja,,, ich habe mir im lager die rechte hand gequetscht.
auch wenn die filmreihe etwas anderes darstellt - den kampf: mensch gegen maschine, verliert der mensch.
stahl ist einfach härter als knochen.
wird aber wieder !


So.
um den ganzen monat zu erhalten brauchst du bloß das datum auf den monat reduzieren.
aus '2014-10-06'
wird '2014-10' und
dann warst du mit deinem query schon auf dem richtigen weg. also das SELECT ... LIKE '2014-10%'.
darüber bekämst du dann alle einträge deren datum mit '2014-10' beginnt und das wären alle des passenden monats.
lediglich das datum musst du auch auslesen, sonst kannst du hinterher nicht mehr erkennen welche tage dabei waren und welche nicht.

natürlich wäre daduch die auswertung aufwendiger geworden. denn nun muss nicht nur geprüft werden ob der mitarbeiter dabei war, sondern auch ob alle tage dabei sind.
die tage die dann fehlen schieben wir samt namen in ein array und "spucken" es am ende einfach auf das display.

du hast schon ein wenig glück das ich die kaputte hand habe, denn ich kann kaum etwas anderes mache so das ich mir die zeit irgendwie vertreiben muss ...laaangweilig... und dabei kommt dann sowas herraus.
allerdings habe ich das nur getippt, mit einer hand und mit links !


~Arano


<?php


$strDateYM = date("Y-m"); //   =   '2014-10'  


/* DATEN ERMITTELN */
/* mysql */

$strQuerySelectAllThisMonth = "SELECT `mitarbeitername`,`datumdeseintrags`  
                                 FROM `mitarbeiter_tbl`
                                WHERE `datumdeseintrags` LIKE '".$strDateYM."%'  
                             ORDER BY `mitarbeitername` ASC,
                                      `datumdeseintrags` ASC";  
$myretAllThisMonth = mysql_query( $strQuerySelectAllThisMonth );
// ...vernünftige fehlerbehandlung...


/* file / mitarbeiterliste */

$arrMAs = file('m.txt'); //   =  array('ma1','ma2','ma3', ...)  
// ...vernünftige fehlerbehandlung...




/* DATEN AUFBEREITEN */

// data array initzialisieren
$arrData = array();
foreach( $arrMAs as $strMa )
    $arrData[$strMa] = array();
    // z.B $arrData = array(
    //                       'ma1' => array(), 
    //                       'ma2' => array() 
    //                      );

// db daten in data array
while( $arrDbData=mysql_fetch_assoc($myretAllThisMonth) )
    $arrData[$arrDbData['mitarbeitername']] = $arrDbData['datumdeseintrags'];  
    // z.B $arrData = array(
    //                       'ma1' => array(0=>'2014-10-01',1=>'2014-10-02',2=>'2014-10-03',3=>'2014-10-05', 4=>... ),   // beachte das der 04. fehlt ! 
    //                       'ma2' => array(0=>'2014-10-01',1=>'2014-10-02',2=>'2014-10-03',3=>'2014-10-04', 4=>... )    // hier ist alles okay 
    //                      );

// leeres fehlen array
$arrNotExist = array(); // leeres array bedeutet das keine "fehler" gefundwen wurden bzw. die db ist vollständig. 




/* DATEN AUSWERTEN */

// prüfe für jeden MA...
foreach( $arrMAs as $strMa )
{
    // ...jedes datum   ACHTUNG ACHTUNG: wochenende, urlaub, krank, feiertage, sozialtage, "andereaufgaben", monatsende30/31, februar/28, schaltjahre, ...... 
    // ...jedes datum   ACHTUNG ACHTUNG: wochenende, urlaub, krank, feiertage, sozialtage, "andereaufgaben", monatsende30/31, februar/28, schaltjahre, ...... 
    for( $intDay=1; $intDay<=31; $intDay++ )
    {
        // einstellig zu zweistellig (1=>01  /  int zu str)
        $strDay = $intDay<10 ? '0'.$intDay : $intDay;  
        if( !in_array($strDateYM.'-'.$strDay,$arrData[$strMa]) )  
        {
            // dieses datum fehlt in der liste des mitarbeiters
            $arrNotExist = $strMa.' - '.$strDateYM.'-'.$strDay;  
        }
    }
}




/* DATEN AUSGEBEN */

if( !empty($arrNotExist) )
{
    echo 'F&uuml; die folgenden Einträge wurden keine Daten in der Datenbank gefunden !';  
    foreach( $arrNotExist as $strMaAm )
        echo $strMaAm.'<br>';   //   =   "name - datum<br>"  
}
else
{
    echo 'Alles ist sauber.';  
}


?>
Member: dax4fun
dax4fun Oct 11, 2014 updated at 13:54:44 (UTC)
Goto Top
hi , @Arano

Danke für deine Super Arbeit und deine echt ordentlich vorbildliche Art face-smile

sag erst mal wie gehts deiner Hand??? Den Terminator Satz fand ich Super face-smile

zu dem php irgendwo schleicht sich ein Leerzeichen rein beim Array ausgabe mit var dump
 "556009 " [1]=> string(7) "556011 " [2]=> string(7) "556014 " [3]=>  

ist das Leerzeichen der Grund ? oder kann es sein, weil die Mitarbeiter eigentlich '555123','555456','555146' heißen und nicht ma1 ma2 st??

wie ich das php von mir gebastelt hab funktionierte die Auswertung erst nach dem einbauen
$aktive_mitarbeiter = trim($shoptxt);

Mit freundlichen Grüßen
dax
ps: hatte einen Fehlalarm, meine Frau hat in 2 Tagen Geburtstermin, mit Schlafen ist da nichts face-smile
Member: Arano
Solution Arano Oct 11, 2014 updated at 15:08:46 (UTC)
Goto Top
Hallo,

Danke! Danke! face-smile
Joar, ansich geht es meiner Hand ganz gut, die Ärztin ist mit dem Heilungsprozess mehr als zufrieden. Wie du siehst kann ich auch schon wieder Tippen bzw. ich bin die Gipsschine für die ganze Hand los. Habe jetzt nur noch eine am Finger Wiki-Stacksche-Schine (allerdings nicht wegen der Sehne sondern wegen der Nagelkranzfrakturen (und was anderem))
Den Terminator Satz fand ich Super face-smile
"I'll be BACK !" wird dann mein erster Satz wenn ich wieder auf der Arbeit bin *gg*

Ich fang mal "hinten" an.
Das die Mitarbeiter unterm Strich "nur anders heißen" sollte keine Rolle spielen.
Ich nehme mal an das du mit var_dump() die Variabel $arrMAs ausgegeben hast !?
Nein, das Leerzeichen hat keine Funktion bzw. es sollte gar nicht da sein !

Ich weiss aber auch schon wo es her kommt !
Wenn die MA-Datei mit der Funktion file() eingelesen wird, landet auch der Zeilenumbruch in dem Array-Element (\n | \r\n | \r Linux | Windows | Mac).
Aber das können wir mit dem entsprechendem Flag unterbinden.
$arrMAs = file( 'm.txt',  FILE_IGNORE_NEW_LINES  ); //   =  array('ma1','ma2','ma3', ...)   
Das entspricht dann quasi dem trim() das du verwendet hattest.


Hey, dann wird das bei euch in den nächsten Tagen ja richtig schön, freue mich für Euch ! face-smile


Wünsche euch ein schönes Wochenende
~Arano
Member: dax4fun
dax4fun Oct 11, 2014 at 15:16:06 (UTC)
Goto Top
jep und jep und jep face-smile

es war das Leerzeichen

Danke *juhuuu* und eine gute Genesung
Member: Arano
Arano Oct 11, 2014 at 15:23:19 (UTC)
Goto Top
face-smile
Das freut mich puhh... keine weiteren versteckten Fehler

Danke!
Möge euer "Wurm" gesund und munter sein, alles Gute !


~Arano