Bessere Funktionen ?

Sibra

Grünschnabel
hi,

ich habe einen code geschrieben, über den ich mich mit dem server verbinden kann.

die erste funktion soll username und passwort überprüfen:


PHP:
function ueberpruefe($user,$psw,$richtig_psw,$richtig_user){

         if(($user!=$richtig_user)||($psw!=$richtig_psw)){

         echo "<a href='index.php'>Error!gehen Sie zurueck</a>";
    }
        else{

        // wenn passwort und username ok, dann 
     //zu funktion verbinde() springen!

          $uebergib_daten=verbinde($user, $psw);
        }
}


function verbinde($user, $psw){
         $verbinden=mysql_pconnect("MyODBC_Server_SQL", $user, $psw)
         or die("Verbindung zum Server nicht möglich!");
         $my_odbc=("SQL_DATENBANK_1");
}
trotz fehlermeldung( irgendwas mit severity ) funktioniert alles nur...

ich benötige weiter funktionen, um meine abfragen zu machen. so wie ich es oben gemacht hab, ist nicht gerade die beste lösung. wie kann man es noch besser machen?

was ich vor hatte war:

a) funktion überprüfung von userdaten
b) funktion server verbinden
c) funktion abfrage 1, abfrage 2, abfrage 3

bitte hilfe :(
 
ad a) Was verstehst Du unter Userdaten überprüfen? Was genau willst machen? Username und Passwort verifizierst Du ohnehin schon. Was noch?

ad b) server verbinden? Diese Funktion hast eh schon.

ad c) Statt für jede Abfrage eine Funktion zu bauen solltest eine Funtkion basteln, der Du einen SQL-String übergibst und die handelt dann das Inserten, Updaten, Selecten. Musst halt nur den übergebenen SQL-String auch durchparsen, ob ja wohl nix drinnen ist, was Dir ein potentieller Angreifer untergeschoben hat.

Nitro
 
Also ich hätte das jetzt mal auf die schnelle so gemacht :

PHP:
<?

//Daten prüfen
if($user != $richtig_user) echo "Der Username ist falsch";
elseif($psw != $richtig_psw) echo "Das Passwort ist falsch";

//wenn richtig weiter ansonsten wird else () übersprungen

else {

$verbindung = mysql_pconnect("MyODBC_Server_SQL",$user,$psw);
if (!verbindung) {
echo "Keine Verbindung zur Datenbank";
exit;
}
mysql_select_db("SQL_DATENBANK_1");


$sqlkommando1 = "";
$sqlkommando2 = "";
$sqlkommando3 = "";
				
mysql_query($sqlkommando"SqlKommandoNr") or die("Error: " . mysql_error());
echo "<center><b>Daten wurden erfolgreich in die Datenbank eingetragen.</center></b><br>";


//Else schliessen
}

?>

Müsste eigentlich so klappen...wenn sich kein Schönheitsfehler eingeschliessen hat
 
Du solltest deinen Code umorganisieren. Wenn du aus der Methode ueberpruefe
noch verbinde aufrufst, ist das eher schlechter Stil.

Eine Funktion bzw Methode sollte eine ihr zugedachte Aufgabe erledigen.
Du erreichst eine grössere modularität, wiederverwendbarkeit wenn die funktionen
klein gehalten werden.

z.b kannst du durch deine Lösung nicht die Logindaten prüfen ohne zu verbinden. Vielleicht willst du, oder einer der mit deinem Code arbeitet, in einer Situation wirklich
nur die Daten überprüfen.

Besser:

Code:
function check($user,$needUser,$givenPass,$needPass) {
  if(... // alles korrekt
         return true;
  else return false;
}

function connect($user,$pass) {
   // verbindung
}


Damit kannst du den Code modularer aufbauen. Sprich du kannst einerseits so nutzen
das du bei korrekten Check, dies gleich nutzt:

Code:
if(check(.....)) connect(...);

oder aber du kannst auch alleinig checken und ein flag einsetzen, um später anhand dieses Flags zu connecten.

Code:
$validated = check(...);
...
 /// viel viel Code
if($validated) connect(...);

Wenn du das unbedingt in einer einzigen Funktion haben willst. Den Check und den Connect dann schreibe eine 3. Funktion

Code:
funcation validatedConnect(.....) {
  if(check(...)) connect(....);
}
 
nitronic hat gesagt.:
ad a) Was verstehst Du unter Userdaten überprüfen? Was genau willst machen? Username und Passwort verifizierst Du ohnehin schon. Was noch?

ich hab ne login-maske mit html gemacht. username und passwort steht schon im script. mit der funktion überprüfe() schaue ich, ob der richtige user sich einloggt.

ad b) server verbinden? Diese Funktion hast eh schon.

ja, aber kann man das nicht bessermachen? in java war es über punkt-notation möglich eine funktion aus beliebigen orten aufzurufen.
ist das nicht hier möglich? wie gesagt, funktionen werden bei mir nur innerhalb von funktionen aufgerufen, was nicht so toll ist.

ad c) Statt für jede Abfrage eine Funktion zu bauen solltest eine Funtkion basteln, der Du einen SQL-String übergibst und die handelt dann das Inserten, Updaten, Selecten. Musst halt nur den übergebenen SQL-String auch durchparsen, ob ja wohl nix drinnen ist, was Dir ein potentieller Angreifer untergeschoben hat.
Nitro

:( wie soll ich diese funktion denn machen, wenn ich sowieso nicht weiß, wie ich die anders ansprechen soll :(

Sibra
 
Zurück