php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.08.2005, 14:09  
Benutzer
 
Registriert seit: 11.07.2004
Beiträge: 42
TimmaY
Standard register_globals, umsetzung, form, edit sql

Hallo zusammen, habe bisher immer mit register_globals auf "on" gearbeitet. Nun möcht ich das gern ändern. Da ich mich mit php ganz gut auskenne ist dies hier eher ne Frage nach der sinnvollsten Umsetzung und nicht nach Antworten auf grundlegende Anfänger Fragen. Ich möchte, per <form method=post>, Daten einer sqlDB ändern. Dabei muss zB das Feld Name immer ausgefüllt werden. Geschiet dies nicht wird das Formular wieder angezeigt und das Feld Name zB rot makiert. Bisher habe ich die Daten aus der db geladen und per
Code:
foreach(array_keys($row) as $key){
   $$key = $row[$key];
}
und per
Code:
<input type="text" name="name" class="field" value="$name">
in das Form geladen. So weit so gut ^^. Wird nun das Feld name nicht ausgefüllt und die seite neu geladen, sollen die daten die vorher eingegeben wurden wieder angezeigt werden. Daten werden also nicht aus der DB geladen. Das Problem dabei ist, das aus $name, nachdem man register_globals=off setzt, $_POST['name'] wird. Ist es dann nicht vllt sinvoll die daten von anfang an, wenn sie aus der DB geladen werden, direkt per

Code:
foreach(array_keys($row) as $key){
   $_POST[$key] = $row[$key];
}

und

<input type="text" name="name" class="field" value="$_POST['name']">
in $_POST zu packen? Oder sollte man einfach aus $_POST['name'] wieder $name machen lassen ? Doch besteht dann noch die Sicherheit das nix gemogelt werden kann? Wie ihr merkt bin ich mir in der Geschichte noch nicht ganz sicher. Vllt mach ich die Augen auch einfach nicht weit genug auf und überseh da irgendetwas ^^ naja. Erstma besten dank ..
TimmaY ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.08.2005, 20:17  
Erfahrener Benutzer
 
Registriert seit: 07.07.2005
Beiträge: 150
sysop
sysop eine Nachricht über ICQ schicken
Standard

bei register_global off verwende ich gerne folgenden code:

PHP-Code:
<?php
    $types_to_register 
= array('GET','COOKIE','POST','SERVER','FILES','ENV','SESSION','REQUEST');
    foreach (
$types_to_register as $global_type
    {
        
$arr = @${'HTTP_'.$global_type.'_VARS'};
        if (@
count($arr) > 0extract($arrEXTR_OVERWRITE);
        else 
        {
            
$arr = @${'_'.$global_type};
            if (@
count($arr) > 0extract($arrEXTR_OVERWRITE);
        }
    }
?>
da wird dann alles geparsed, was nicht niet und nagelfest ist.
zu deiner frage:
wenn du das so löst, würdest du alle eingaben aus dem formular nicht wieder anzeigen lassen, sondern mit den daten füllen, die du in deiner datenbank hast. veränderungen gingen verloren, da ja alle $_POST daten wieder aus der datenbank neu befüllt würden.
__________________
gruss sys
sysop ist offline  
Alt 08.08.2005, 20:52  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von sysop
bei register_global off verwende ich gerne folgenden code:
Dufte. Die Reihenfolge ist besonders erheiternd:
array('GET','COOKIE','POST','SERVER','FILES','ENV' ,'SESSION','REQUEST');

Zitat:
da wird dann alles geparsed, was nicht niet und nagelfest ist.
Meine Fresse! 'Back to the roots! We love PHP3!'
 
Alt 09.08.2005, 00:54  
Benutzer
 
Registriert seit: 11.07.2004
Beiträge: 42
TimmaY
Standard

hmm .. also zufrieden bin ich nun ja gerade nicht.

Zitat:
wenn du das so löst, würdest du alle eingaben aus dem formular nicht wieder anzeigen lassen, sondern mit den daten füllen, die du in deiner datenbank hast. veränderungen gingen verloren, da ja alle $_POST daten wieder aus der datenbank neu befüllt würden.
naja, ich währe schon so pfiffig dafür zu sorgen das $_POST nur mit daten aus der DB gefüllt wird wenn das formular zuvor nicht gesendet wurde. Also würden da keine sachen verloren gehen Also optimal finde ich deine lösung nicht. Trotzdem danke! Und @meikel: TOP kommentar ^^ Naja werd das schon irgendwie biegen
TimmaY ist offline  
Alt 09.08.2005, 09:52  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von TimmaY
hmm .. also zufrieden bin ich nun ja gerade nicht.
Mein Tip, was man tun kann, wenn register_globals = On ist und man dagegen was tun will.

mod_PHP:
1. testen, ob der FTP-Client Dotfiles anzeigt.
2a: Falls nein:
-> Provider in die Eier treten. Es ist bei vfsftpd und proftpd nämlich nur eine Frage der Konfiguration, ob Dotfiles (wie zB. .htaccess) im Client angezeigt werden.

Das Thema ist unter Linux kein Thema, aber es gibt genug Windows FTP-Clients, die dann Schwierigkeiten haben, ein nicht angezeigtes File zu löschen. Und löschen muß man das .htaccess können, wenn es zu einem Server Error 500 kommt. Sonst ist die Seite tot, töter am tötesten. <g>

2b. Falls ja:
.htaccess
Code:
php_flag register_globals Off
uploaden und mit einem phpinfo testen.
wenn "Server Error 500"
-> Provider in die Eier treten
wenn unter local register_globals = On:
-> Provider auch in die Eier treten
wenn kein Fehler und local register_globals = Off
-> aufatmen "Hat geklappt"

Zusatz: es ist für den Provider 10 sec. Arbeit, Deine virtualhosts auf register_globals = Off umzustellen.
In Deinem virtualhost ein
Code:
php_admin_flag register_globals Off
rein und den Apachen neu starten.

CGI PHP:
hier kann man mit einer lokalen php.ini arbeiten.
php.ini
Code:
register_globals = Off
Hier auch testen, ob im phpinfo unter local die Veränderung angezeigt wird.
 
Alt 09.08.2005, 18:45  
Erfahrener Benutzer
 
Registriert seit: 07.07.2005
Beiträge: 150
sysop
sysop eine Nachricht über ICQ schicken
Standard

super..

einem geistlosen kommentar folgt eine antwort auf eine frage, die niemand gestellt hat. das macht sinn.....

dass die variante oben nicht die modernste version ist weiss ich auch. auch ist klar, dass man sich die daten parsed, die man braucht.

wer nicht sein ganzes script umbauen will, um von register_global on auf off umzusteigen, kann mit den wenigen zeilen aber u.U. viel zeit und arbeit sparen. da der themenersteller von on auf off umsteigen will war das nur eine idee, mehr nicht. ach ja, sie funktioniert, das sollte auch mal gesagt werden.
wer ein neues script schreibt, arbeitet sowieso mit register_global off und muss den code von vorneherein dafür anpassen.

auch wage ich zu bezweifeln, dass ein tritt in die eier einen provider zu irgendwas anderem veranlasst als dir die brocken vor die füsse zu schmeissen.
__________________
gruss sys
sysop ist offline  
Alt 09.08.2005, 19:00  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von sysop
super..

einem geistlosen kommentar
Lern erst mal denken, Du DAU. Dann begreifst Du vielleicht, was für einen Unsinn Dein Script baut. Haste die Reihenfolge für extract() ausgewürfelt oder warste da vollkommen dicht? <ggg>
 
Alt 09.08.2005, 20:19  
Erfahrener Benutzer
 
Registriert seit: 07.07.2005
Beiträge: 150
sysop
sysop eine Nachricht über ICQ schicken
Standard

deine verbesserungsvorschläge zeugen von na egal.....:
es kommen jedenfalls keine. nicht ein beitrag von dir zum problem oder der frage geschweige denn eine eventuelle verbesserung oder hilfe (z.b. korrektur der reihenfolge).

nochmal, alles was da nicht rein soll, wird WEGGELASSEN !
wer lesen kann ist doch eindeutig im vorteil und dein ton ist zum kotzen.

edit:
weil ich das niveau nicht halten kann und mag habe ich den ton meines post´s verändert, sowas liegt mir nicht. eigentlich wollte ich weder streiten nocht klugscheissen, nur einen tip geben. seltsam, was aus sowas wird..........
__________________
gruss sys
sysop ist offline  
Alt 09.08.2005, 21:52  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von sysop
deine verbesserungsvorschläge zeugen von na egal.....:
Reden wir überhaupt über das selbe Thema? Ich schrieb dem OP, wie er trotz register_globals = On zu einem register_globals = Off kommen kann, was er eigentlich wollte.

"Hallo zusammen, habe bisher immer mit register_globals auf "on" gearbeitet. Nun möcht ich das gern ändern."

Das ist an sich kein Problem, weil man mit $_POST und $_GET sehr bequem hantieren kann. Und falls der Provider dieses Flag nicht ausgeschaltet, kann man es auf die beschriebene Art und Weise versuchen selbst auszuschalten.

Und dann kommst Du daher mit einem grottenschlechten Script, mit dem man bei register_globals = Off alle Superglobals in einer sinnfreien Reihenfolge in den globalen Namensraum kippen kann. Wozu soll das dann gut sein, wenn man die segensreiche Trennung von internen und externen Variablen wieder zunichte macht? Dann kann man den Schalter wieder anknipsen - dann müllt PHP alles zusammen. Allerdings in einer wenigstens etwas sinnvolleren Reihenfolge.
 
Alt 09.08.2005, 22:31  
Erfahrener Benutzer
 
Registriert seit: 07.07.2005
Beiträge: 150
sysop
sysop eine Nachricht über ICQ schicken
Standard

schön, wenn wir normal miteinander reden können.

ich habe das so verstanden, dass er seine scripte auf register_global=off umschreiben will. da sie aber nicht funktionieren, sucht er eine lösung.
ich habe alle möglichkeiten einfach in diesen schnipsel gaballert, weil ich ja nicht wissen kann, was er alles umkrempeln möchte.

um ehrlich zu sein, verstehe ich die aufregung aber nicht ganz. nun, das hier ist auch das anfänger forum und nicht der coder-gott teil

Zitat:
Zitat von TimmaY
Das Problem dabei ist, das aus $name, nachdem man register_globals=off setzt, $_POST['name'] wird.
setzt man in obiges array einfach $types_to_register = array('POST'); kann man sich die angesprochene problematik für sein script sparen und weiter mit $name arbeiten.

dass man nur POST einsetzen kann habe ich nicht mit gepostet (mea culpa), ich dachte es wird aus dem text ersichtklich, das mit den angaben alles geparsed wird, dass man sich seine zu parsenden daten raussuchen muss.

nun, da sich alles zu beruhigen scheint, könntest du eventuell bitte mal erläutern, was an der reihenfolge so katastrophal ist.

danke

ps.
dass die summe aller superglobs etwas fatal wäre, ist mir dabei allerdings klar.
__________________
gruss sys
sysop ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mail Form an verschiedene Empfänger donjoh PHP Tipps 2008 4 18.06.2008 15:38
Formuilar hilfe imported_chewy PHP Tipps 2006 25 15.05.2006 15:14
[Erledigt] variable ohne form mit submit übergeben PHP Tipps 2005-2 6 06.09.2005 20:34
ein form mit 2 versch. button - actions PHP Tipps 2005-2 3 27.08.2005 21:26
form action ??? PHP Tipps 2005 5 29.04.2005 10:21
Daten in HTML form aus einer Query anzeigen PHP Tipps 2005 1 15.02.2005 21:03
Problem mit Table & Form HTML, Usability und Barrierefreiheit 12 15.12.2004 16:28
[Erledigt] form mit enter abschicken HTML, Usability und Barrierefreiheit 10 30.10.2004 23:45
Funktion in php für eine variable Zahl von Form Inhalten? Paulo PHP Tipps 2004 14 27.09.2004 16:57
Greenhorn: Reload einer IMG-Datei nach SUBMIT einer Form PHP Tipps 2004 3 20.09.2004 21:19
Mail bei Form Abschicken. JEGO PHP Tipps 2004 9 10.06.2004 17:18

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
register_globals wie umschreiben, input wie name=\ formular \register_globals off\, register_globals=off php seiten umbauen, register_globals on script in off umschreiben, upload trotz register globals off, sql register_globals, register_globals reihenfolge, formular register_globals off, sql register_global, php register_globals values sql, was machen wenn provider register_globals nicht auf on setzt, register_globals off .htaccess dann normal weiter, php ftp upload \ohne form\, wo setzt man register_global

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.