Brauche mal gerade hilfe bei einem meiner Scripts

hallo

also ich habe folgenden script der eine email schreibt nach dem er ein datum aus der textdatei herrauszieht was in drei tagen ist:

email schreibe script:

[code]<?php

$line = fopen(“termine.txt”, “r”) or die(‘Konnte Termine nicht öffnen’);

$h=array();

$h2 = 0;

$u = 0;

$uhrzeit = array();

$ort = array();

$veranstaltung = array();

$bemerkung = array();

while (!feof($line))

{

$buffer = fgets ($line, 4096);

if ($h > 2)

{

    $termine_array[$h2] = explode(';', $buffer);

    $termine_array[$h2][0] = explode(':',$termine_array[$h2][0]);

    $h2++;

}

$h++;

}

fclose ($line);

$date = date(“y-m-d”, mktime(0, 0, 0, date(“m”), date(“d”)+3, date(“y”)));

for ($i = 0; $i < count($termine_array);$i++)

{

if ($date == $termine_array[$i][0][0]) {$h[$u]=$i;$u++;}

}

for ($i = 0;$i < count($h);$i++)

{

$termine_array[$h[$i]][0][0][2] = ‘.’;

$termine_array[$h[$i]][0][0][5] = ‘.’;

$h2 = $termine_array[$h[$i]][0][0][0];

$termine_array[$h[$i]][0][0][0] = $termine_array[$h[$i]][0][0][6];

$termine_array[$h[$i]][0][0][6] = $h2;

$h2 = $termine_array[$h[$i]][0][0][1];

$termine_array[$h[$i]][0][0][1] = $termine_array[$h[$i]][0][0][7];

$termine_array[$h[$i]][0][0][7] = $h2;

$termin = $termine_array[$h[$i]][0][1] . " den " . $termine_array[$h[$i]][0][0];

$uhrzeit[] = $termine_array[$h[$i]][1];

$ort[] = $termine_array[$h[$i]][2];

$veranstaltung[] = trim($termine_array[$h[$i]][3]);

$bemerkung[] = trim(str_replace("||","\n",$termine_array[$h[$i]][4]));

}

if ( !empty($veranstaltung[0]) ) // Wenn Veranstalung nicht leer ist

{

$betreff = 'TTC 1974 Udenhain Termininformation für: ' . $termin;

$from = 'From: <ttc1974@xetu.de>';

$message = "Folgendes erwartet euch in 3 Tagen: \n\n\n ";

for ($i = 0;$i < count($veranstaltung);$i++)

{

         $message = $message . $termin . " um " . $uhrzeit[$i] . " in " . $ort[$i] . ". \n\n Veranstaltung: " . $veranstaltung[$i];



     if ( !empty($bemerkung[$i]) )

     {

          $message = $message . ",\n\n Bemerkung: " . $bemerkung[$i];

     }

     $message = $message . "\n\n\n\n";

}

$message = $message . "\n\n\n Sollte es noch Änderungen geben wäre es nett jeden davon in Kenntnis zu setzen! \n\n\n Viel Spaß wünscht euch der TTC 1974 Udenhain e.V. bei eurer Veranstaltung! \n\n\n";



$link = mysql_connect('localhost','benutzername','passwort');

mysql_select_db('datenbank);

$result = mysql_query("SELECT usr_email from benutzer_users");

while ($addy = mysql_fetch_object($result))

{

   mail($addy->usr_email, $betreff, $message, $from);

}

mysql_close($link);

}

else

{

echo 'Keine Termine vorhanden';

}

?>[/code]

so und so sieht die termine.txt aus

Datum;Zeit;Ort;M;Veranstaltung;Bemerkung D;Z;T;T;T;t s;p;;s;p; 08-07-16:Mi;00:00;Ort;1/2;Geburtstag von Denny;

so nun kallapt aber meine email nicht mehr da ich das Feld M hinzugefügt habe weiß jemand was ich ändern muss damit er alles wieder korrekt sendet?
denn er nimmt jetzt immer in der email unter Veranstaltung: alles was unter M steht
und bei Bemerkung: alles was unter Veranstaltung steht

M sol aber einfach ignoriert werden und der rest soll wieder stimme

ich hoffe mir kann jemand helfen
mfg
paul

Hallo,

du musst folgende Zeilen anpassen, und auf den richtigen Array-Index zugreifen:

$uhrzeit[] = $termine_array[$h[$i]][1]; $ort[] = $termine_array[$h[$i]][2]; $veranstaltung[] = trim($termine_array[$h[$i]][3]); $bemerkung[] = trim(str_replace("||","\n",$termine_array[$h[$i]][4]));

Also müsste daraus folgendes werden:

$uhrzeit[] = $termine_array[$h[$i]][1]; $ort[] = $termine_array[$h[$i]][2]; $veranstaltung[] = trim($termine_array[$h[$i]][4]); $bemerkung[] = trim(str_replace("||","\n",$termine_array[$h[$i]][5]));

Danach sollte wieder alles funktionieren :wink:

hoi,

also das ganze klappt wieder,

ich habe aber noch eine weitere frage, das script liegt einfach in einem ordner und heißt meintewegen email.php immoment greift ein cronjob jeden morgen um 0:05 Uhr drauf zu schaut ob termine da sind oder nicht

wenn jetzt aber jemand den genauen pfad zu dem script kennt kann er ja theoretisch dauern das ding aufrufen und dann spamt er alle user von uns mit emails voll,

gibt es eine möglichkeit das man dies unterbinden kann?

wäre nett wenn mir jemand dazu was sagen kann

mfg
paul

Hallo,

ich weiß nicht genau, wie ein Cronjob das Skript aufruft, aber falls der das anders als ein Browser aufruft, könntest du das Verzeichnis mit htaccess schützen:

Datei “.htaccess” (in dem selben Verzeichnis, wie das zu schützende Dokument legen; den Dateinamen “datei.php” in der htaccess entsprechend anpassen):

<Files datei.php> order deny,allow deny from all </Files>

Ansonsten kannst du in deinem PHP-Skript auf den USER_AGENT prüfen, ob der leer ist.

Sonst könntest du ja den Cronjob auch mit GET-Parametern aufrufen (wenn Cronjobs wie mit einem Browser aufgerufen werden, geht es, wenn nicht, kannst du es ja per htaccess schützen und es stört den Cronjob nicht) und im PHP-Skript auf diese prüfen (dabei halt irgendein Passwort übergeben, welches eben überprüft wird).

Ansonsten wüsste ich nicht, wie du das prüfen solltest.

MfG
Fabsch

ich habe gerade mal nachgedacht

könnte man es nicht auch so machen das man pro aufruf an einem tag einen eintrag in eine mysql tabelle macht und wenn es schon einen eintrag gibt vom derzeitigen tag soll das script einfach abbrechen

würde sowas iwie gehen?

mfg
paul

ich nehme mal an der cronjob hat ne feste ip?
könnte man ja mal überprüfen, und wenn das tatsächlich der fall ist, macht man eine IP begrenzung auf das script.

Sicherer gehts denk ich kaum

Damit das Skript nur 1x am Tag ausgeführt werden kann, da gibt es bereits einen ähnlichen Trhead dazu: viewtopic.php?f=10&t=4395

also meinst du das was du dort gepostet hats?

<?php $handle=fopen('cron.job',(file_exists('cron.job')?'r+':'w+')); if(date('Y-m-d')!=file_get_contents('cron.job')) { include('oneperday.php'); fwrite($handle,date('Y-m-d')); } fclose($handle); ?>

muss ich dazu nur einen leere datei anlegen die cron.job heißt?
und statt oneperday.php meine datei rein hauen oda?
aber dann habe ich immer noch das problem das man die oneperday immer noch per ahnd aufrufen kann
oder nichtß

wie mache ich das mit der ip begrenzung?
ich kann den cronjob von meinem vserver aus aufrufen lassen dann sollte er eine feste ip adresse haben
was muss ich dafür in mein script schreiben? und vorallem as gut wäre wenn jemand das script aufruft der es nicht darf das eine error meldung kommt^^

mfg
paul

Die cron.job würde sich automatisch anlegen falls sie noch nicht vorhanden ist.

Die oneperday.php bzw. dein Skript könntest du dann per .htaccess schützen.

<Files oneperday.php> order deny,allow deny from all </Files>

Dein Cronjob müsste dann natürlich das obige Skript aufrufen.

IP-Sperre ist in dem Fall nicht wirklich nötig, da es im Prinzip egal ist wer deises Skript in der Zeit zwischen 00:00 und 00:05 aufruft. Wenns ein Mensch war, ist er eben dem Cronjob zuvorgekommen. Jeder weitere Aufruf wird durch Abgleich des Datums unterbunden.
Sollte man es trotzdem nochmal versenden müssen, so braucht man nur die cron.job zu löschen.