PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP nimmt kein get an?


darph
2004-01-18, 15:02:05
folgendes kleines Script:


<?php

echo("eins zwei ".$a);

?>


Aufruf mit "test.php?a=drei". Ausgabe: "eins zwei".

PHP läuft, aber die übergebene Variable wird nicht erkannt.

phpdev 4.3.0 unter winxp


Ist das eine Einstellung der PHP.ini? Wo kann ich das fixen?

killermaster
2004-01-18, 15:51:21
<?php
$a = drei
echo($a);
?>

darph
2004-01-18, 15:58:49
Scherzkeks.



Es geht darum, daß ich variablen über die URL übergeben will.

killermaster
2004-01-18, 16:01:56
test.php?a=asdf

und es wird asdf angezeigt

wo is dein problem ?

Aqualon
2004-01-18, 16:04:45
Original geschrieben von darph
<?php

echo("eins zwei ".$a);

?>

So geht das nur, wenn register_globals = on gesetzt ist.

Bei register_globals = off geht die Ausgabe folgendermaßen:


echo("eins zwei ".$_GET['a']);


Mehr dazu unter http://de.php.net/de/register_globals

Aqua

Edit: on/off verwechselt...

Static
2004-01-18, 16:04:52
EDIT: gleichzeitig mit Aqualon

Mach's so:

-------------------------
<?php
$a1 = "$_GET[a]";
echo("eins zwei ".$a1);
?>
-------------------------

oder direkt:
-------------------------
<?php
echo("eins zwei ".$_GET[a]);
?>
-------------------------


Dein Code ging nur in den älteren PHP-Versionen.
Man kann's zwar auch in den neuen machen aber dafür müsste man ein potentielles Sicherheitsloch wieder öffnen.

darph
2004-01-18, 16:06:46
Mein Problem ist, daß es nicht angezeigt wird.

echo($a) gibts nichts zurück, weil es $a nicht gibt -> alles hinter dem ? wird ignoriert.

Auf meinem Webspace läuft es ja. Nur hier eben nicht.

anderes beispiel:



<?php
Header("Content-type: image/png");

if (!isset($t))
{ $t = "TALKING BUBBLES 1.1 by darph"; }


if ($t == "mymail")
{ $t = "lalalala"; }
else
{ $t = urldecode($t); }



$zeichen = strlen($t);
$linelength = ($zeichen * 5) + 2;
$height = 15;
$width = ($zeichen * 5) + 5;
$im = imagecreate($width,$height);
$pink = ImageColorAllocate($im,255,0,255);
$trans = imagecolortransparent($im,$pink);
$black = ImageColorAllocate($im,0,0,0);
$white = ImageColorAllocate($im,255,255,255);

ImageLine($im,2,0,$linelength,0,$black);
ImageLine($im,2,11,$linelength,11,$black);
ImageLine($im,0,2,0,9,$black);
ImageLine($im,($width - 1),2,($width - 1),9,$black);
imagesetpixel($im,1,1,$black);
imagesetpixel($im,1,10,$black);
imagesetpixel($im,($width - 2),1,$black);
imagesetpixel($im,($width - 2),10,$black);
imagefilltoborder ($im,3,3,$black,$white);
ImageLine($im,5,11,6,11,$white);
ImageLine($im,5,12,6,12,$white);
ImageLine($im,4,13,5,13,$white);
ImageLine($im,2,14,5,14,$black);
imagesetpixel($im,4,12,$black);
imagesetpixel($im,7,12,$black);
imagesetpixel($im,3,13,$black);
imagesetpixel($im,6,13,$black);

ImageString($im,1,3,2,$t,$black);

ImagePng($im);
ImageDestroy($im);
?>



egal was ich als .php?t=etcpp eingebe - es kommt immer "TALKING BUBBLES 1.1 by darph". Zumindest hier auf meinem Apache.

darph
2004-01-18, 16:07:52
Ah, okay. Danke. :)

killermaster
2004-01-18, 16:48:16
biste auch einer von den win apache user ?

darph
2004-01-18, 17:00:23
Ja. Ich schäm mich ja auch ganz doll.

Aber ich hab nicht den Nerv meinen HTPC, auf dem halt auch der webserver läuft, auf Linux umzustellen. Da müßt ich mich erst einlesen, und dann das ganz gefrickel - das mach ich mal wenn ich viel Zeit habe.

killermaster
2004-01-18, 17:22:40
brauchst dich nicht zu schämen.
win apache is 100000000 mal leichter zu installieren als lin..

mfg

darph
2004-01-18, 17:25:56
Ich glaub das ist auch weniger das Problem. Man ist ja lernfähig.

Aber das ganze Mediagedönz, TV-Karte und so... -> myHTPC ist da schön angenehm.

Der Apache läuft ja nur nebenher, um mal ein paar Scripte zu testen, bevor ich sie auf den Webspace lade.

killermaster
2004-01-18, 17:26:57
vergessen zu frage ,was is eigentlch htpc?

darph
2004-01-18, 17:28:06
my Home Theater PC

Sowas wie die XP MediaCenter Edition, nur besser.


www.myhtpc.net

darph
2004-01-21, 02:36:00
So, ich hab mich mal ein wenig mit php beschäftigt und bin auf folgendes Problem gestoßen:


Mein Webspace-provider hat register_globals = on.


Mein Script soweit:

mother.php
<?php
include("config.php");

function Make_Database_Connection($sql_server,$sql_dbname,$sql_user,$sql_passw)
{
if(!$db = @mysql_connect("$sql_server", "$sql_user", "$sql_passw"))
{
die('<b>An Error Occured</b><br>
The script was unable to connect to the database.<br>
Please check $sql_server, $sql_user, and $sql_passw in config.php.');
}

if(!@mysql_select_db($sql_dbname))
{
die("<b>An Error Occured<br>
The script was unable to find the database <b>$sql_dbname</b> on your MySQL server.
<br>Please make sure you have access to the correct database.");
}
}


function Check_Login($user_name,$user_passw)
{
$query = "SELECT USER_NAME,USER_PASSW FROM MOTHER_ADMIN";
$result = mysql_fetch_array(mysql_query($query)) or die("Anfrage fehlgeschlagen:<br> $query");

if ($result[USER_NAME] == $user_name & $result[USER_PASSW] == md5($user_passw))
{
return TRUE;
}
else
{
return FALSE;
}

}

Make_Database_Connection($sql_server,$sql_dbname,$sql_user,$sql_passw);
?>

index.php

<?php
include("../mother.php");

if($login_status != TRUE && !isset($action))
{
?>
<html>
<body>
<form name="Formular" action="index.php" method="POST">
Name: <input type="text" name="admin_name"><br>
Pass: <input type="password" name="admin_passw"><br>
<input type="hidden" name="action" value="login">
<INPUT type="submit" value="SUBMIT">
</form>
</body>
</html>
<?php
}

if($login_status != TRUE && $action == "login")
{
if (Check_Login($admin_name,$admin_passw) == TRUE)
{
$login_status = TRUE;
echo("good");
}
else
{
echo("error");
}
}

//echo('$login_status is: '.($login_status ? "true":"false"));

if($login_status == TRUE)
{
echo("<br><b>secret message</b>");
}
?>



Problem:
Man kann sich die "secret message" einfach aufrufen, indem man "blafasel/index.php?login_status=true" aufruft....

wie kann ich mein login sicher machen, trotz register_globals = on?

Matthias2x
2004-01-21, 21:30:16
versuchs doch mal so:

include("../mother.php");
if($action == "login")
{
if (Check_Login($admin_name,$admin_passw))
{
echo("<br><b>secret message</b>");
}
else
{
die("error");
}
}
if(!$action)
{
echo' <html>
<body>
<form name="Formular" action="index.php" method="POST">
Name: <input type="text" name="admin_name"><br>
Pass: <input type="password" name="admin_passw"><br>
<input type="hidden" name="action" value="login">
<INPUT type="submit" value="SUBMIT">
</form>
</body>
</html>';
}
?>


damit sollte sich der Passwortcheck nicht so leicht aushebeln lassen...