CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
17.08.2006, 22:07:12
|
Anfänger
|
|
Registriert seit: Jan 2006
Beiträge: 124
|
|
Weiß nicht weiter
Hallo liebe PHPler und die, die es noch werden wollen.
Folgende Bedingungen soll PHP übeprüfen.
Zuerst soll das Script prüfen ob, die Anfrage von url_anfrage.php kommt
machen wir über
PHP-Code:
($_SERVER['HTTP_REFERER'] == 'url_anfrage.php' )
Wenn der Scriptaufruf nicht von url_anfrage.php kommt, wird auf diese Seite weitergeleitet
PHP-Code:
header ( "Location: url_unbekannt.php" );
exit;
Wenn der Scriptaufruf von url_anfrage kam soll das geprüft werden,
ob die Variable $einverstanden leer ist, wenn sie das ist, wird auf url_leer.php weitergeleitet
PHP-Code:
$einverstanden = $_POST['einverstanden'];
if ( empty($einverstanden) {
header ( "Location: url_leer.php" );
exit;
}
Wenn Die Variable $einverstanden existiert dann wird auf url_good.php weitergeleitet
PHP-Code:
( "Location: url_good.php" );
exit;
Wie programmiere ich das, krieg ich nicht hin, ist wahrscheinlich schwerer als nur mit if, else ?
Geändert von einsteigi (17.08.2006 um 22:08:55 Uhr)
|
18.08.2006, 02:27:09
|
|
Member
|
|
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
|
|
AW: Weiß nicht weiter
Ähm, doch, es reicht if und else... Genaugenommen würd sogar if reichen...
Aber ein paar Hinweise: Erst mal ist es keine gute Idee, den Referer zu überprüfen. Man kann nämlich abstellen, dass der übertragen wird. Wer das tut, ist damit automatisch ausgesperrt.
Prüfe stattdessen lieber mit isset, ob $_POST['einverstanden'] existiert. Übrigens musst du zum Testen auf empty nicht extra noch eine neue Variable erzeugen, du kannst auch direkt $_POST['einverstanden'] prüfen.
Jetzt solltest du dir nur noch die Frage stellen, was dieses Problem unter "PHP für Fortgeschrittene und Experten" macht...
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')
Für 100% sauberen Code.
|
18.08.2006, 11:10:59
|
Anfänger
|
|
Registriert seit: Jan 2006
Beiträge: 124
|
|
AW: Weiß nicht weiter
@ serp,
wie verschiebe ich den Thread dann zu den Grundlagen?
DAnn muss die URLüberprüfung auf dem Server erfolgen über SSI, das kann keiner in seinerm Browser deaktivieren, stimmts?
Ich programmiere $einverstanden = $_POST['einverstanden'];,
weil es mir übersichtlicher erscheint, in vielen Büchern wird das auch so gemacht,
erst Varible erzeugt und dann auf diese zugegriffen.
Nur wenn ich viele Variablen erzeugen müsste wie bei Formularen dann nehme ich
empty($_POST['einverstanden'];.
Denke das der Server nicht viel mehr ausgelastet ist, wenn ich erst eine Variable erzeuge.
Wie kann man den Referer abstellen?
Würde das dann so machen, jetzt ist es ja einfacher.
Wenn Anfrage von url_anfrage.php dann über SSI zu prüfen.php
prüfen.php:
PHP-Code:
$einverstanden = $_POST['einverstanden'];
if (isset( $einverstanden )) {
( "Location: url_good.php" );
exit;
} else { header ( "Location: url_leer.php" );
exit;
}
__________________
Es grüßt euch
Einsteigi
Geändert von einsteigi (18.08.2006 um 11:13:11 Uhr)
|
18.08.2006, 14:18:07
|
|
Member
|
|
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
|
|
AW: Weiß nicht weiter
SSI? Server Sideded Includes? *kopfkratz*
Bei deinem Beispiel, das isset bringt dir in dem Fall nichts mehr. Denn isset() wird immer true zurückliefern, da die Variable $einverstanden erzeugt worden ist. Nur falls $_POST['einverstanden'] nicht existiert, ist sie leer (und du kriegst unter vernünftigem error_reporting ne Warnung).
Entsprechend würd ich if(isset($_POST['einverstanden']) && !empty($_POST['einverstanden'])) prüfen.
Zitat:
Denke das der Server nicht viel mehr ausgelastet ist, wenn ich erst eine Variable erzeuge.
|
Hast du prinzipiell Recht, vor allem, wenn vorher noch n Optimierer drüberläuft, der feststellt, dass die Variable unnötig ist. Ohne den hast du zumindest nen geringfügig höheren Speicherverbrauch.
Über die Übersicht kann man sich streiten, ich persönlich finds praktischer, wenn ich auf den ersten Blick sehen kann, ob eine Variable aus dem Formular kommt (-> ich hab aufs POST-Array zugegriffen) oder irgendwas lokales ist, das ich erzeugt hab.
Zitat:
Wie kann man den Referer abstellen?
|
Je nach Browser findet sich in den Einstellungen die Möglichkeite, diesen nicht mit zu übertragen.
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')
Für 100% sauberen Code.
|
18.08.2006, 15:55:24
|
Anfänger
|
|
Registriert seit: Jan 2006
Beiträge: 124
|
|
AW: Weiß nicht weiter
Also vergessen wir SSI.
Wichtig ist jetzt das <input name="einverstanden">
nur einmal vorkommt auf dem ganzen Server.
Habe ich so geändert, sprich in den anderen Dateien gibt es kein <input name="einverstanden"> mehr.
Nun kann die Überprüfung mittels Referer entfallen.
Habe Script so geändert:
PHP-Code:
// $einverstanden ist nicht leer
if ( isset($_POST['einverstanden']) && !empty($_POST['einverstanden']) ) {
header ( 'Location: url_good.php' );
exit;
} else //AGBs sind leer ->f_registrieren_1_agbs
{ header ( 'Location: url_bad.php' );
exit;
}
Nur wenn ich es teste wird immer die url_leer.php aufgerufen.
Wo ist der Wurm drin?
Hier der HTML code:
Code:
<form action="prüfen.php" method="post" name="agbs" onSubmit="return check_radio(this)">
<input type="radio" name="einverstanden"
value="einverstanden">
Bestätige die AGB's
<input type="submit" name="senden" value=" Weiter ">
</form>
Wie mache ich das hier.
Ich habe eine Seite nennen wir sie mal zuerst.php und dann eine dann.php
Auf dann.php soll man nur zugreifen dürfen wenn die Anfrage von zuerst.php kam. Da Referer abstellbar ist, muss es anders gehen. Nuir WIE?
__________________
Es grüßt euch
Einsteigi
Geändert von einsteigi (18.08.2006 um 17:44:59 Uhr)
|
18.08.2006, 22:22:19
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Weiß nicht weiter
Zitat:
Zitat von einsteigi[U
Wie mache ich das hier.
Ich habe eine Seite nennen wir sie mal zuerst.php und dann eine dann.php
Auf dann.php soll man nur zugreifen dürfen wenn die Anfrage von zuerst.php kam. Da Referer abstellbar ist, muss es anders gehen. Nuir WIE?[/U]
|
Auf der Seite zuerst.php speicherst du einen bestimmten Wert in einer Session. Auf dann.php musst du dann prüfen, ob dieser Wert in der Session gesetzt ist.
Informationen zum Sessionmechanismus von PHP findest du unter:
- http://www.php.net/manual/en/features.sessions.php
- http://tut.php-q.net/sessions.html
|
21.08.2006, 00:52:57
|
Anfänger
|
|
Registriert seit: Jan 2006
Beiträge: 124
|
|
AW: Weiß nicht weiter
Super Idee mit den Session, so kann man sicher sein, das erstens die Anfrage, daher kommt wo Sie herkommen soll und nicht von einer Hackerseiter oder was anderem.
Was ist hier der Unterschied?
PHP-Code:
if ( isset($_POST['einverstanden']) && !empty($_POST['einverstanden']) )
und
if ( isset($_POST['einverstanden']) )
Laut meinen PHP-Bücher.
empty: Prüft ob Var leer, nicht definiert ist oder den Wert 0 hat, liefert dann True
denk nach ... !empty Prüft ob Var nicht leer ist, definiert ist und nicht den Wert 0 hat, dann True
isset: überprüft ob Var existiert.
Reicht es deshalb nicht aus
if ( isset($_POST['einverstanden']) ) zu verwenden, anstatt zusätzlich !empty ??
Ist es überhaupt notwendig Var mit unset zu löschen, nehmen wir an wir haben sämtliche Globale Var bekommen, diese ausgewertet und in DB eingetragen. Sollte man nun die Vars mit unset löschen, oder ist das überflüssig?
__________________
Es grüßt euch
Einsteigi
|
21.08.2006, 16:42:07
|
|
Member
|
|
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
|
|
AW: Weiß nicht weiter
Was ist das denn für ein PHP-Buch? empty überprüft, ob eine Variable einen Wert enthält, der als "leer" interpretiert wird. Welche genau das sind, kann auf php.net nachgelesen werden. Bei nicht definierten Variablen wirst du aber eine Warnmeldung kriegen (die der Verfasser des Buches nicht sieht, wenn er die entsprechende Fehlerausgabe nicht aktiviert hat). Natürlich liefert die Methode dann auch true, aber schöner Stil ist das keiner.
isset prüft nur, ob eine Variable existiert oder nicht. Entsprechend sollte den emptys auf jeden Fall mal ein isset vorangehen.
Ob du nach dem isset noch ein empty brauchst musst du an Hand deines Scripts entscheiden. Wenn es nur darum geht, ob die Variable gesetzt ist, reicht isset. Wenn zusätzlich noch ein Wert drinstehen soll (es also beispielsweise ausgeschlossen werden soll, dass jemand eine leere Zeichenkette übergibt), ist zusätzlich noch empty interessant. Falls auch Zeichenketten, die nur aus Whitespaces bestehen, ausgefiltert werden sollen, wäre auch empty(trim($var)) nicht verkehrt... ;) Ob du das also brauchst oder nicht musst du selbst wissen, das können wir dir nicht beantworten.
Was unset angeht: Was genau willst du damit erreichen? Wenn du ein sehr großes und speicherhungriges Script hast, bringt es unter Umständen schon etwas, mit unset wieder für mehr freien Speicher zu sorgen. Ansonsten sollte der Speicher mit Beendigung des Scripts eh wieder freigegeben werden, von daher...
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')
Für 100% sauberen Code.
|
21.08.2006, 17:58:25
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Weiß nicht weiter
Zitat:
Zitat von Serp
empty überprüft, ob eine Variable einen Wert enthält, der als "leer" interpretiert wird. Welche genau das sind, kann auf php.net nachgelesen werden. Bei nicht definierten Variablen wirst du aber eine Warnmeldung kriegen (die der Verfasser des Buches nicht sieht, wenn er die entsprechende Fehlerausgabe nicht aktiviert hat).
|
empty() liefert keine Warnung, wenn die Variable nicht existiert:
Zitat:
empty() is the opposite of (boolean) var, except that no warning is generated when the variable is not set.
|
Quelle: http://de.php.net/manual/en/function.empty.php
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 15:38:26 Uhr.
|