script register_globals off tauglich machen?

maxcom

Mitglied
Hallo an alle,
ich bin am verzweifeln! Habe ein Script geschrieben, das nur bei register_globals on
funktioniert. Habe gestern rund 4 stunden versucht das ganze umzuschreiben. Ohne
erfolg! Ich werd gleich wahnsinnig!
Hoffe ihr könnt mir helfen.
Hier mein upload script:

PHP:
<?php 
     
     
              if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { 
  $insertSQL = sprintf("INSERT INTO fotos (id, text) VALUES (%s, %s)", 
                       GetSQLValueString($_POST['id'], "int"), 
                       GetSQLValueString($_POST['text'], "text")); 
                         
                        
 $extlimit = "yes"; //dateierwweiterungs sperre YES / NO$extlimit = "yes"; //dateierwweiterungs sperre YES / NO 
$limitedext = array(".gif",".jpg",".JPG",".jpeg",".JPEG"); //dateierwweiterung 
$sizelimit = "yes"; //dateigroesse limitieren YES / NO 
$sizebytes = "950000"; //groesse in bytes 
                      
$Fehlen = ""; 
if (empty($pfad)) { 
$Fehlen = $Fehlen."<LI>Kein Bild kein Upload!"; 
} 
if($pfad!= "") { 
if (($sizelimit == "yes") && ($_FILES['pfad']['size'] > $sizebytes)) { 
$Fehlen = $Fehlen."<LI>Das Bild ist zu gro&szlig;! max 90 kb"; 
} 
$ext = strrchr($pfad_name,'.'); 
if (($extlimit == "yes") && (!in_array($ext,$limitedext))) { 
$Fehlen = $Fehlen."<LI>Es sind nur jpg oder gif bilder erlaubt"; 
}} 
if (!empty($Fehlen)) { 
echo "Sorry Ihr Bild konnte nicht hochgeladen werden. <br /> 
&Uuml;berpr&uuml;fe folgende Fehler:<br><br>"; 
echo "$Fehlen<br><br>"; 
echo "Bitte beheben Sie diese Fehler."; 
}else{ 

         
   mysql_select_db($database_database, $database); 
  $Result1 = mysql_query($insertSQL, $database) ; 
  echo "vielen dank f&uuml;r ihren Upload<br>"; 


$id=mysql_insert_id(); 


            if($_FILES['pfad']['name']) { 
            $zieldatei=$id."_".$_FILES['pfad']['name']; 
                if (move_uploaded_file($_FILES['pfad']['tmp_name'], "../pics/upload/$zieldatei")) { 
                mysql_query("update fotos set pfad='$zieldatei' where id=$id"); 
                }  
            } 
            } 
            } 
            ?> 
          <br /> 
          <form action="<?php echo $editFormAction; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
            <table align="center"> 
              <tr valign="baseline"> 
                <td nowrap="nowrap" align="right">Bildsuche:</td> 
                <td><label> 
                  <input name="pfad" type="file" id="pfad" /> 
                </label></td> 
              </tr> 
              <tr valign="baseline"> 
                <td nowrap="nowrap" align="right" valign="top">Text:</td> 
                <td><textarea name="text" cols="50" rows="5"></textarea> 
                </td> 
              </tr> 
              <tr valign="baseline"> 
                <td nowrap="nowrap" align="right">&nbsp;</td> 
                <td><input name="submit" type="submit" value="Senden" /></td> 
              </tr> 
            </table> 
             <input type="hidden" name="MM_insert" value="form1" /> 
    </form>

Als Fehlermeldung kommt:
Notice: Undefined index: id in /home/wusr20597/www/admin/foto_upload.php on line 92

Ich weiß, dass dies bedeutet, dass id anscheined nicht definiert wurde. Aber mache ich
das nicht mit $_POST['id']?

Zudem sagt er mir ständig: Kein Bild kein upload, was natürlich meine Fehlermeldung ist
aber ich lade ja etwas hoch...

Bei register_globals on klappt alles wunderbar!
Bin mit meinem kleinen Latein am Ende!

Vielen Dank im voraus
 
PHP:
//Umgehung von register_globals
extract($_SERVER);
extract($_ENV);
extract($_GET);
extract($_POST);
extract($_REQUEST);
extract($_FILES);

...bin mir zwar nicht sicher, ob dies eine wirklich gute Lösung ist, doch ich hab auch mal was für register_globals ON gemacht, das ich dann später auf einen Server lud, der register_globals OFF hatte. So hats funktioniert
 
Also Zend meint zu deinem Code folgendes:

  • Globale Variable $pfad wird vor ihrer Deklaration benutzt (Zeile 16)
  • Globale Variable $pfad wird vor ihrer Deklaration benutzt (Zeile 19)
  • Globale Variable $pfad_name wird vor ihrer Deklaration benutzt (Zeile 23)
  • Globale Variable $database_database wird vor ihrer Deklaration benutzt (Zeile 35)
  • Globale Variable $database wird vor ihrer Deklaration benutzt (Zeile 35)
  • Globale Variable $database wird vor ihrer Deklaration benutzt (Zeile 36)
  • Globale Variable $editFormAction wird vor ihrer Deklaration benutzt (Zeile 53)

Das sind die stellen an denen ich zuerst nachsehen würde. Das mit der $_POST['id'], naja ich seh kein feld das den name id hat.


@uafsc: Dann kann man Globals ja gleich einschalten.
 
Und aus der Meldung heraus aus den Zeilen kommt man auf das hier:

PHP:
if (empty($pfad)) { 
$Fehlen = $Fehlen."<LI>Kein Bild kein Upload!"; 
} 
if($pfad!= "") { 
if (($sizelimit == "yes") && ($_FILES['pfad']['size'] > $sizebytes)) { 
$Fehlen = $Fehlen."<LI>Das Bild ist zu gro&szlig;! max 90 kb"; 
}

genau da ist das register Globals Problem. $pfad ist nicht gesetzt, es müsste wieder $_FILES['pfad'] sein o.ä.

Die anderen Variablen solltest du eben auch mal auf den Zeilen überprüfen.
 
Vielen Dank ihr PHP Götter :)

Jetzt klappt der upload wieder, es war die undefinierte Pfad variable...
Nur das mit der id konnte ich noch nicht lösen. Egal ich lass das
error_reporting(E_ALL);
ini_set("display_errors", true);
einfach weg, ganz nach dem Motto: Aus dem Auge aus dem Sinn ;)

Vielen Dank nochmal
 
Naja, das ist eigentlich der komplett falsche Weg.
Diese Meldungen haben einen Sinn, und zwar den Dich auf Programmierfehler hinzuweisen.

Wenn ein uebergebener Wert nicht immer uebergeben wird so solltest Du mit isset() arbeiten und pruefen ob er uebergeben wurde bevor Du ihn dann weiter verarbeitest. So sparst Du Dir dann Meldungen wie "unknown index".
 
Zurück