Script-solution.de » Community » Support-Board » Foren » Allgemeines » Allgemeines Board » Frage zu "Undefined index" und fkt.
  • Willkommen, Gast!
  • Donnerstag, 29. Juli 2010, 16:32:20
 
Thema: "Frage zu "Undefined index" und fkt." [ Seite 1 ]

Kein neuer Beitrag Mars , 01.03.2010, 07:57
Beitrag #1   

IP: n/a
Rang: * * * * * * O
Registrierung: 04.09.2007, 15:49
Homepage: http://www.htwdd.org
Wohnort: Gera/Dresden
 

Forum-Beherrscher mit 764 Punkte, 510 Beiträge
Guten Morgen,

ich wollte mal fragen, ob es nicht noch eine andere Möglichkeit gibt, Variablen, die mittels Post
übergeben wurden, außer mit isset() oder empty() zu überprüfen.
Ich möchte die Warnung weghaben (Notice: Undefined index: ... in xyz), error_reporting() aber nicht
auf 0 setzten.
Klar mittels der Funktionen (s.o.) könnte ich es prüfen, kann den Wert dann aber ja nciht mehr für
andere Dinge verwenden.
Ich hoffe ich konnte mein Problem erläutern.

mfg Marcel

lokale Webseite hier

 
Kein neuer Beitrag Nils , 01.03.2010, 11:13
Beitrag #2   

IP: n/a
Rang: * * * * * * *
Registrierung: 01.07.2003, 18:55
Homepage: http://www.script-solution.de
Wohnort: Marburg
 

Forum-Gott mit 7301 Punkte, 7077 Beiträge
Hallo,

nein. Das hat auch nichts mit POST, GET usw. zu tun. Wenn du nicht sicher bist ob der Wert
existiert (was du dir bei Werten von "Außen" nie sein kannst), musst du mittels isset() und Co.
überprüfen ob er da ist. Aber natürlich kannst du das ganze in eine Funktion auslagern, die z.B.
eine Exception wirft, wenn der Wert nicht da ist (oder nicht dem erwarteten Typ/Wert entspricht,
...) und ansonsten den Wert zurückgibt. Sofern das für deine Zwecke passt, dürfte das etwas Code
sparen.

mfg Nils

 
Kein neuer Beitrag Mars , 02.03.2010, 12:49
Beitrag #3   

IP: n/a
Rang: * * * * * * O
Registrierung: 04.09.2007, 15:49
Homepage: http://www.htwdd.org
Wohnort: Gera/Dresden
 

Forum-Beherrscher mit 764 Punkte, 510 Beiträge
Gut, dies werde ich mir mal merken. dann noch eine, ich habe mir eine Funktion gebastelt die etwas
aus der Datenbank lesen soll, leider erfolgt keine Ausgabe, auch keine Fehlerausgabe.
die Funktion:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function select($sql){
        if(strstr($sql'SELECT') === false){
                echo "Error in select()-function";
        }
        connect();
        $result = mysql_query($sql);
        if($result == false){
                echo "<b>"mysql_errno() ."</b> "mysql_error();
        }else{
                $output = array();
                while($row = mysql_fetch_assoc($result)){
                        $output[] = $row;
                }
                if(count($output) > 1){
                        return $output;
                }else{
                        return false;
                }
        }
}
die Anwendung:
PHP:
1
2
3
        $select = array();
        $select[]= select("SELECT * FROM `user` WHERE `name`='".$fname."'");
        echo $select["pass"];
Wie schon beschrieben, erfolgt keine Ausgabe. :-(

mfg Marcel

lokale Webseite hier

 
Kein neuer Beitrag Nils , 02.03.2010, 13:50
Beitrag #4   

IP: n/a
Rang: * * * * * * *
Registrierung: 01.07.2003, 18:55
Homepage: http://www.script-solution.de
Wohnort: Marburg
 

Forum-Gott mit 7301 Punkte, 7077 Beiträge
Bis auf eine Sache, die wohl nicht gewollt ist, sieht die Funktion richtig aus. Obwohl sie aus
softwaretechnischer Sicht nicht gerade gut ist ;)
Hier:
PHP:
1
if(count($output) > 1){

meintest du sicher:
PHP:
1
if(count($output) > 0){

oder? ;)

Die Anwendung macht aber keinen Sinn. Du erstellst doch ein numerisches Array, in dem numerische
Arrays sind, in den wiederum assoziative Arrays sind :). D.h. folgendes wäre richtig bzw. sinnvoller:
PHP:
1
2
        $select = select("SELECT * FROM `user` WHERE `name`='".$fname."'");
        echo $select[0]["pass"];

(Natürlich muss man vorher noch prüfen ob $select[0]["pass"] überhaupt da ist...)

mfg Nils

 
Kein neuer Beitrag Mars , 02.03.2010, 13:55
Beitrag #5   

IP: n/a
Rang: * * * * * * O
Registrierung: 04.09.2007, 15:49
Homepage: http://www.htwdd.org
Wohnort: Gera/Dresden
 

Forum-Beherrscher mit 764 Punkte, 510 Beiträge
es gehhhhhtt :-D
Warum ist diese aus softwaretechnischer Sicht nicht gut?

mfg Marcel

lokale Webseite hier
Dieser Beitrag wurde insgesamt 1 mal editiert. Das letzte mal 02.03.2010, 13:57 von Mars.

 
Kein neuer Beitrag Nils , 02.03.2010, 14:09
Beitrag #6   

IP: n/a
Rang: * * * * * * *
Registrierung: 01.07.2003, 18:55
Homepage: http://www.script-solution.de
Wohnort: Marburg
 

Forum-Gott mit 7301 Punkte, 7077 Beiträge
Mars hat folgendes geschrieben:
Warum ist diese aus softwaretechnischer Sicht nicht gut?


  1. Durch die Ausgaben in der Funktion grenzt du die Verwendbarkeit sehr ein (Was ist, wenn einer das
    für eine CLI-Anwendung benutzen will oder aber einfach keine Ausgaben haben möchte, sondern selbst
    entscheiden möchte, was er dann tut?)
  2. Wieso gibst du false zurück, falls 0 Zeilen zurückkommen? Das muss doch kein Fehler sein. Außerdem
    erzwingst du so eine Sonderbehandlung für den Fall, die sonst nicht unbedingt notwendig wäre. Es
    wäre intuitiver einfach ein leeres Array zurückzugeben und bei einem wirklichen Fehlschlag des
    Queries z.B. false.
  3. Die Funktion gibt gar nix zurück (implizit NULL, AFAIK, aber dieses "Feature" sollte man nie
    nutzen), wenn ein Fehler passiert. Bei der ersten Stelle beendest du nicht mal die Funktion...
  4. Durch die Überprüfung mit strstr() auf "SELECT" zwingst du den Benutzer SELECT groß zu schreiben.
  5. Ich weiß ja nicht genau was connect() macht, aber das Verbinden zur DB (und das Schließen der
    Verbindung) würde ich lieber dem Benutzer überlassen.


mfg Nils

 
Kein neuer Beitrag Mars , 02.03.2010, 14:18
Beitrag #7   

IP: n/a
Rang: * * * * * * O
Registrierung: 04.09.2007, 15:49
Homepage: http://www.htwdd.org
Wohnort: Gera/Dresden
 

Forum-Beherrscher mit 764 Punkte, 510 Beiträge
ja oben habe ich kein exit gemacht ist mir gestern auch schon aufgefallen, wollte ich noch rein
machen ^^
naja wegen select, dann mache ich den Modifikator \i ran
sozusagen
PHP:
1
2
3
if(strstr($sql'SELECT\i') === false){
      exit("Error in select()-function");
}
Dann ist es ja egal wie es geschrieben wird ;-)
Wie meinst du das denn mit dem Entscheidung dem Bnutzer überlassen
meine connect()-Funktion
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function connect(){
        /*
         * MySQL-settings
         */

        $mysql_host =   "localhost";
        $mysql_user =   "root";
        $mysql_pass =   "*****";
        $mysql_data =   "marcel";
        if(!isset($mysql_host) || !isset($mysql_user) || !isset($mysql_pass) || !isset($mysql_data)){
                echo "MySQL-settings are wrong!";
        }
        $connect = mysql_connect($mysql_host$mysql_user$mysql_pass);
        if($connect == false){
                echo "<b>"mysql_errno() ."</b> "mysql_error();
        }
        $db_select = mysql_select_db($mysql_data);
        if($db_select == false){
                echo "<b>"mysql_errno() ."</b> "mysql_error();
        }
}
mfg Marcel

lokale Webseite hier
Dieser Beitrag wurde insgesamt 1 mal editiert. Das letzte mal 02.03.2010, 14:19 von Mars.

 
Kein neuer Beitrag Nils , 02.03.2010, 14:27
Beitrag #8   

IP: n/a
Rang: * * * * * * *
Registrierung: 01.07.2003, 18:55
Homepage: http://www.script-solution.de
Wohnort: Marburg
 

Forum-Gott mit 7301 Punkte, 7077 Beiträge
Mars hat folgendes geschrieben:
naja wegen select, dann mache ich den Modifikator \i ran
sozusagen
PHP:
1
2
3
if(strstr($sql'SELECT\i') === false){
      exit("Error in select()-function");
}
Dann ist es ja egal wie es geschrieben wird ;-)

Im Prinzip ja, aber strstr macht nur eine einfache Suche nach dem gegebenen String. Du verwechselst
das glaube ich mit preg_*, bei der mittels des Modifiers "i" Case-sensitivity abschalten kann :)
Insofern, nimm einfach stristr(), die ist case-insensitive.

Mars hat folgendes geschrieben:
Wie meinst du das denn mit dem Entscheidung dem Bnutzer überlassen
meine connect()-Funktion
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function connect(){
        /*
         * MySQL-settings
         */

        $mysql_host =   "localhost";
        $mysql_user =   "root";
        $mysql_pass =   "*****";
        $mysql_data =   "marcel";
        if(!isset($mysql_host) || !isset($mysql_user) || !isset($mysql_pass) || !isset($mysql_data)){
                echo "MySQL-settings are wrong!";
        }
        $connect = mysql_connect($mysql_host$mysql_user$mysql_pass);
        if($connect == false){
                echo "<b>"mysql_errno() ."</b> "mysql_error();
        }
        $db_select = mysql_select_db($mysql_data);
        if($db_select == false){
                echo "<b>"mysql_errno() ."</b> "mysql_error();
        }
}

Hier gelten die gleichen Kritikpunkte wie bei der anderen Funktion :) Die Funktion kann niemand
anderes verwenden (und du auch für nix anderes), weil du die Zugangsdaten darin festlegst und
Ausgaben (mit HTML-Tags) im Fehlerfall machst. Übergib doch die Zugangsdaten per Parameter und lass
die Funktion den Benutzer aufrufen. Wenn ein Fehler passiert schmeißt du eine Exception. Dann kann
der Benutzer der Funktion / Klasse? entscheiden was er tun möchte.

Mich wundert etwas, dass du nur zu den letzten 3 Punkten was gesagt hast (die nicht ganz soo
wichtig waren, zumindest nicht die letzten beiden), aber gut ^^

mfg Nils

 
Kein neuer Beitrag Mars , 02.03.2010, 14:36
Beitrag #9   

IP: n/a
Rang: * * * * * * O
Registrierung: 04.09.2007, 15:49
Homepage: http://www.htwdd.org
Wohnort: Gera/Dresden
 

Forum-Beherrscher mit 764 Punkte, 510 Beiträge
Ähm keine Ahnung, weil ich dir mir mal noch in Ruhe zu gemühte führen muss xD

mfg Marcel

lokale Webseite hier

n/a n/a 1     ( Anzeige: 1 - 9 , Gesamt: 9 ) n/a n/a
User in diesem Thema: 0 Registrierte, 0 Versteckte, 1 Gast, 0 Bots
Keine
Thema-Aktionen:

Toggle Ähnliche Themen zu "Frage zu "Undefined index" und fkt."
  Antworten Aufrufe Themeneröffnung Letzter Beitrag
Es wurden keine Themen gefunden.
  • 0.658791 Sek., 10 DB-Zugriffe, 6.791 MiB
  • Boardsolution v1.41 | © Nils Asmussen 2003-2009
Valid XHTML and CSS © 2003 - 2009 script-solution.de, Powered by Joomla!