unbekannte Variable action?????!!!!!

Bash, Shell, PHP, Python, Perl, CGI
dognose
Posts: 36
Joined: 2003-10-29 18:00

unbekannte Variable action?????!!!!!

Post by dognose »

Sers Leutz, ich hab n kleines Problem.. auf der Arbeit hab ich ein gästebuch geschriebn und mir nach hause geschickt, aber zuhause funktioniert das scheiss ding nicht mehr.

an mehrerern stellen bekommne ich die Antwort: unbekannte variable.

aber was ist an diesen Stellen falsch:

.
blabla
.
if ($action == "insert") // hier erkennt er die Variable nicht... ?? ;-(
.
bllaba
.
<form action="./insert.php" enctype="multipart/form-data">
<input name="action" type="hidden" value="insert">
.
blabla
.
static
Posts: 437
Joined: 2002-10-27 19:56
Location: Schweiz

Re: unbekannte Variable action?????!!!!!

Post by static »

Hi,
vielleicht auf der Arbeit register_globals on und zu Hause off (-> so wie's sein sollte ! ). Wenn die Variable über ein Formular übergeben wird, dann versuch's mal hiermit:

Code: Select all

if ($_POST['action'] == "insert")
oder wenn die Variable über die URL übergeben wird hiermit:

Code: Select all

if ($_GET['action'] == "insert")
so long
static
stefanpropehan
Posts: 335
Joined: 2002-12-17 22:25
Location: Berlin

Re: unbekannte Variable action?????!!!!!

Post by stefanpropehan »

Probiere es mal mit ...

Code: Select all

if($_REQUEST['action] == "insert")
stichwort RegisterGlobals.... bzw register_argc_argv

upps zu langsam :(
dognose
Posts: 36
Joined: 2003-10-29 18:00

Re: unbekannte Variable action?????!!!!!

Post by dognose »

Erst mal danke für eure P0575! *g*

Leider hat mir keine der Antworten wirkl. weitergeholfen.

Code: Select all

if ($_POST['action'] == "insert")
Wenn ich den Nehme bekomm ich folgendes Resultat:

Notice: Undefined index: action in c:programmeeasyphp1-7wwwtestinsert.php on line 11

bei dem das gleiche

Code: Select all

if ($_GET['action'] == "insert")
und bei nummer 3 ebenfalls:

Code: Select all

if($_REQUEST['action'] == "insert")

Ich hab keinen schimmer was an dem von mir gewählten befehl nicht funktioniert.

Wie aktivier ich zu Hause die register_globals??
bzw.: Was ist das, wie ist es besser, an oder aus ?
und was ist :register_argc_argv
dognose
Posts: 36
Joined: 2003-10-29 18:00

Re: unbekannte Variable action?????!!!!!

Post by dognose »

Vielleicht hilft euch ja das hier, oder sagt euch was:

Wenn ich über PHPmyAdmin zu meiner SQL-Datenbank connecte, geht alles wunderbar, kann alles bearbeiten, aber ganz klein, und übersehbar steht das hier:

Code: Select all

Fehler
Die zusätzlichen Funktionen für verknüpfte Tabellen wurden automatisch deaktiviert. Klicken Sie hier um herauszufinden warum. 
klicke ich auf hier, bekomme ich diese Meldung

Code: Select all

PMA Database ... fehlerhaft[ Dokumentation ]
Allgemeine Verknüpfungsfunktionen Deaktiviert 
klicke ich hier wiederum auf Dokumentation, bekomme ich das hier auf den Screen:

Code: Select all

$cfg['Servers'][$i]['pmadb'] string 
Starting with version 2.3.0 phpMyAdmin offers a lot of features to work with master / foreign - tables. To use those as well as the bookmark feature you need special tables with a predefined structure, which we explain below. 

See the Quick Install section in this document for a quick way of creating those tables. Also, if you are using a Windows server, read FAQ 1.23. 

If you are the only user of this phpMyAdmin installation, you can use your current database to store those special tables; in this case, just put your current database name in $cfg['Servers'][$i]['pmadb']. 

If you are setting up a multi-user phpMyAdmin installation, you will need to create a new database and setup special privileges, so, as superuser: 


create a new database for phpMyAdmin:
  CREATE DATABASE phpmyadmin;
Note that "controluser" must have SELECT, INSERT, UPDATE and DELETE privileges on this database. Here is a query to set up those privileges (using "phpmyadmin" as the database name, and "pma" as the controluser):
  GRANT SELECT,INSERT,UPDATE,DELETE ON phpmyadmin.* to 'pma'@'localhost'; 
do not give any other user rights on this database. 
enter the database name in $cfg['Servers'][$i]['pmadb'] 



$cfg['Servers'][$i]['bookmarktable'] string 
Since release 2.2.0 phpMyAdmin allows to bookmark queries. This can be useful for queries you often run.

To allow the usage of this functionality you have to: 
set up "pmadb" as described above 
within this database create a table following this scheme: 
     CREATE TABLE `PMA_bookmark` (
       id int(11) DEFAULT '0' NOT NULL auto_increment,
       dbase varchar(255) NOT NULL,
       user varchar(255) NOT NULL,
       label varchar(255) NOT NULL,
       query text NOT NULL,
       PRIMARY KEY (id)
     ) TYPE=MyISAM COMMENT='Bookmarks';

enter the table name in $cfg['Servers'][$i]['bookmarktable'] 


cybersmog
Posts: 78
Joined: 2003-09-17 12:38
Location: Bayern

Re: unbekannte Variable action?????!!!!!

Post by cybersmog »

Das ist eine Zusatzfunktion von phpMyAdmin und dürfte mit deinem Problem nicht das geringste zu tun haben. Leider kann ich dir aber auch keinen anderen Lösungsvorschlag anbieten, sorry.
wgot
Posts: 1675
Joined: 2003-07-06 02:03

Re: unbekannte Variable action?????!!!!!

Post by wgot »

Hallo,

Datei form.htm:

Code: Select all

<form action="./insert.php" enctype="multipart/form-data"> 
<input name="action" type="hidden" value="insert"> 
<input type="submit" value="senden">
</form>
Datei insert.php:

Code: Select all

<?php
if ($_REQUEST['action'] == "insert")
{ echo "ok"; }
else
{ echo "not ok"; }
?>
funktioniert bei mir mit register_globals=off.

register_globals sollte aus Sicherheitsgründen (hauptsächlich Sicherheit gegen fehlerhafte oder unsaubere Scripts) unbedingt abgeschaltet bleiben.

register_argc_argv hat mit Deinem Problem nichts zu tun.

Gruß, Wolfgang
arty
Userprojekt
Userprojekt
Posts: 729
Joined: 2002-06-12 10:11

Re: unbekannte Variable action?????!!!!!

Post by arty »

Hi,

besser ist:

Code: Select all

<?php
if (isset($_REQUEST["action"]) && $_REQUEST["action"] == "insert")
{ echo "ok"; }
else
{ echo "not ok"; }
?> 
da sonst die superglobale Variable $action, falls sie nicht übertragen wird, nicht initialisiert ist und eine Warning bringt.

bye
arty
dognose
Posts: 36
Joined: 2003-10-29 18:00

Re: unbekannte Variable action?????!!!!!

Post by dognose »

Tut momentan ebenfalls auf der Arbeit, mal gespannt wie es zuhause ablaufen wird.... *g*

Hoffe, dass es da ebenfalls geht..

An was kann das liegen?

andere php version?
andere mysql version?
andere easyphp version?

Was spielt davon die wichtigste Rolle ?
adagio
Posts: 96
Joined: 2003-09-22 12:51

Re: unbekannte Variable action?????!!!!!

Post by adagio »

Wie ist die Fehlerausgabe in Deiner php.ini eingestellt? Sind das wirklich Fehler, oder nur Warnungen?

Warnungen sind zum Beispiel nicht so heikel und werden normalerweise auch nicht angezeigt. Ausser, es ist so in der php.ini eingestellt.

Wenn man z.B. eine Variable abfragt, die noch nicht existiert, bekommt man eine Warnung. So wie in Deinem Beispiel ;)
dognose
Posts: 36
Joined: 2003-10-29 18:00

Re: unbekannte Variable action?????!!!!!

Post by dognose »

Danke, das wars.....

Super echt fette Sache! *freu mit luftsprung mach*
Seit 5 Tagen zerbrech ich mir den Kopf...... Ahhhhhhh

Also, an alle die nicht Mitgekommen sind, wenn ihr Solche "Notices" (keine Errors) bekommt..

1. geht in die php.ini
und ändert :

Code: Select all

error_reporting  =  E_ALL
in:

Code: Select all

error_reporting = E_ALL & ~E_NOTICE
d.h. es werden alle errors angezeigt, bis auf "notices"

nochmal danke & so long dognose
dognose
Posts: 36
Joined: 2003-10-29 18:00

Re: unbekannte Variable action?????!!!!!

Post by dognose »

Ok, das war zu früh gefreut.... aber nun

ebenfalls in der php.ini war es noch nötig statt:

Code: Select all

register_globals = Off

Code: Select all

register_globals = On
zu setzen...

Sollte zwar ne sicherheitslücke oder so bilden, aber das dürfte für mein Angestrebtes "Lan-Gästebuch" kein Problem darstellen..


thx to all ! ! !
User avatar
Joe User
Project Manager
Project Manager
Posts: 11173
Joined: 2003-02-27 01:00
Location: Hamburg

Re: unbekannte Variable action?????!!!!!

Post by Joe User »

*autsch* Seit wann sind nicht abzuschätzende Sicherheitsrisiken kein Problem?
wgot
Posts: 1675
Joined: 2003-07-06 02:03

Re: unbekannte Variable action?????!!!!!

Post by wgot »

Hallo,

na ja, Du hast eine Lösung gefunden, die Fehlermeldungen zu beseitigen, sinnvoller ist es, die Fehler zu beseitigen.

Code: Select all

if (isset($_REQUEST['variable'])) { $variable=$_REQUEST['variable']; } else { $variable=''; }
für jede Variable, die an das Script übergeben werden kann.

Ist fehlerfrei, sicher und funktioniert mit jeder halbwegs aktuellen PHP-Version.

Gruß, Wolfgang
dognose
Posts: 36
Joined: 2003-10-29 18:00

Re: unbekannte Variable action?????!!!!!

Post by dognose »

Zu den Sicherheits Risiken:
Das ding wird nirgends Im Internet zu finden sein,
bloss für mein Bruder, der mit mir im Netzwerk hängt ein "away-
message-board".. Glaube kaum dass er sich die Mühe machen wird,
die Sicherheitslücken zu knacken, wenn er doch nur 20 M laufen
müsste, um zugriff auf meinen Rechner zu haben *g*...

Zu der korrekten Lösung
Bin bloss n Hobby-phpler, und das da versteh ich net... :lol:
Würde aber gerne, wenn mich jemand was zu meinem Script fragt
antworten können, und net irgendwie sagen müssen: "Das ist halt so"
darum behalt ich meine Lösung! :!:

so long, dognose..
und noch mal Danke für euer Bemühen :!:
wgot
Posts: 1675
Joined: 2003-07-06 02:03

Re: unbekannte Variable action?????!!!!!

Post by wgot »

Hallo,
dognose wrote: Das ding wird nirgends Im Internet zu finden sein,
darum behalt ich meine Lösung!
ok, in diesem Zusamenhang akzeptiert.

Trotzdem will ich's kurz :roll: erklären:

In alten PHP-Versionen (3 und die ersten 4er) wurden Formulardaten einfach dadurch übergeben, daß PHP zu jedem Formularwert automatisch eine Variable mit dem Formularwert erzeugt hat.
<input name='var' wert='zahl'>
ergab automatisch
$var=zahl;

Da jedes Input-Tag, ob vom Scriptprogrammierer vorgesehen oder nicht, eine Variable ergab, konnten Angreifer über zusätzliche Input-Tags beliebige Variablen im Script setzen und erzeugen, z.B.
<input name='zaehler' wert='144'>
setzte einfach $zaehler auf 144.

Wehe, der Programmierer hatte diesen Mißbrauch nicht einkaluliert.

Außerdem wurden nicht existente Variablen beim ersten Aufruf einfach auf Leerstring bzw Null gesetzt, man konnte also einfach vergessen, eine Variable zu setzen bevor man sie erstmals ausliest.

Beides wurde anfangs als tolles Feature von PHP angesehen, bis man merkte, daß es vor allem tolle Sicherheitslöcher sind.

Beides ist in aktuellen PHP-Versionen nicht mehr vorgesehen. Die Formularwerte müssen mit $_REQUEST['variable'] übernommen werden. Variablen, für die es keinen REQUEST gibt, lassen sich über das Formular nicht mehr setzen.

Und eine Variable muß einen Wert zugewiesen bekommen, bevor ihr Wert abgefragt werden kann.

Mit

Code: Select all

if (isset($_REQUEST['variable'])) { $variable=$_REQUEST['variable']; } else { $variable=''; }
für jede im Formular zulässige Variable kann man den Zustand alter PHP-Versionen wieder herstellen, ohne die Sicherheitslöcher zu haben.

Die Zeile funktioniert so:
Für den angegebenen Formularwert wird zunächst geprüft, ob er gesetzt ist. Wenn ja, wird eine Variable gleichen Namens erzeugt und der Wert zugewiesen. Wenn nein, wird ebenfalls eine Variable gleichen Namens erzeugt und sie bekommt den Wert Leerstring. Mit diesen Variablen kann das Script genau so arbeiten wie mit der alten unsicheren Lösung, bis auf die zusätzlichen Zeilen am Scriptanfang also keine Scriptänderung, trotzdem bleibt das Sicherheitsloch geschlossen.

Leider gibt es in den aktuellen PHP-Versionen die Möglichkeit, in der php.ini auf die alten unsicheren Regeln zurückzuschalten. Und leider gibt es etliche Webhoster, die das auf Kundenservern machen, um sich Reklamationen zu ersparen und den Support zu schonen.

Gruß, Wolfgang