SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 17.08.2006, 22:07:12
einsteigi einsteigi ist offline
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)
Mit Zitat antworten
  #2  
Alt 18.08.2006, 02:27:09
Benutzerbild von Serp
Serp Serp ist offline
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.
Mit Zitat antworten
  #3  
Alt 18.08.2006, 11:10:59
einsteigi einsteigi ist offline
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)
Mit Zitat antworten
  #4  
Alt 18.08.2006, 14:18:07
Benutzerbild von Serp
Serp Serp ist offline
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.
Mit Zitat antworten
  #5  
Alt 18.08.2006, 15:55:24
einsteigi einsteigi ist offline
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
&nbsp;&nbsp;&nbsp;
<input type="submit" name="senden" value="&nbsp;&nbsp;Weiter&nbsp;&nbsp;">
</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)
Mit Zitat antworten
  #6  
Alt 18.08.2006, 22:22:19
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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
Mit Zitat antworten
  #7  
Alt 21.08.2006, 00:52:57
einsteigi einsteigi ist offline
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
Mit Zitat antworten
  #8  
Alt 21.08.2006, 16:42:07
Benutzerbild von Serp
Serp Serp ist offline
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.
Mit Zitat antworten
  #9  
Alt 21.08.2006, 17:58:25
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:29:11 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt