PHP function

RobotSox

New Member
Hallo.

Ich bin gerade dabei ein paar eigene PHP Funktionen zu basteln. Dazu nutze ich "function". Nun meine Frage. Ich habe folgende Funktion:

PHP:
function email_von_partner($partner_uuid)
{
	$abfrage_email = "SELECT Email FROM UserAccounts WHERE PrincipalID = '$partner_uuid'";
	$ergebnis_email = mysql_query($abfrage_email,$verbindung_opensim);
	mysql_result($ergebnis_email, 0);
}

Nun möchte ich in einem anderen Script das so ausgeben:

PHP:
include ("functions.php");

$test = "898388eb-f1e9-4e5b-8332-e7d35e01d775";
$partner_mail = email_von_partner($test);
echo $partner_mail;

Leider sagt mir der "echo" aber nichts. In der functions.php habe ich auch noch die mysql_connect drin.

Weis einer warum der mir nicht as mysql_result der Funktion ausgibt?

Gruß Tim
 
Hi.

Und wie mache ich es dann z.B. ich gebe der function die $partner_uuid mit [email_von_partner($partner_uuid)] dann macht er die MySQL-Query und dann soll er mir aber die Variable $partner_mail gefüllt zurückgeben. Damit ich dann [echo $partner_mail] ausführen kann.
 
Zuerst mal ist deine Variable $verbindung_opensim nicht in der Funktion definiert.
Dass es vermutlich trotzdem funktioniert liegt daran dass er dann die letzt-geoeffnete Verbindung verwendet.
Du musst $verbindung_opensim entweder mit dem 'global' Kommando in die Variable importieren falls sie im Hauptbereich definiert wurde oder als Parameter uebergeben.

Dann kriegt man ein halbes Herzinfarkt wenn man den SQL sieht. Du uebernimmst $partner_uuid ohne Kontrolle ins SQL. Je nachdem wie dieser Wert reinkommt, kann er boeswillen Code enthalten und somit Schaden anrichten.
Es klingt vom Namen her als ob es eine Zahlenfolge sein sollte, in diesem Fall solltest du zuerst mit is_numeric() ueberpruefen ob es denn auch eine ist und im anderen Fall abbrechen. Alternativ, wenn es zB ein String ist, kannst du mit mysql_real_escape_string() die Eingabe "sicher" machen.
Uebrigens sollen Tabellen- und Datenbanknamen immer in Backticks (`) gebettet werden um sie ebenfalls zu escapen.

In Bezug auf deine Frage waere deine Funktion somit:
Code:
function email_von_partner($partner_uuid) 
{ 
    if(!is_numeric($partner_uuid)) return null;
    global $verbindung_opensim;
    $abfrage_email = "SELECT Email FROM UserAccounts WHERE PrincipalID = '$partner_uuid'"; 
    $ergebnis_email = mysql_query($abfrage_email,$verbindung_opensim); 
    if(!mysql_num_rows($ergebnis_email)) return null;
    return mysql_result($ergebnis_email, 0, 'Email'); 
}
 
Uebrigens sollen Tabellen- und Datenbanknamen immer in Backticks (`) gebettet werden um sie ebenfalls zu escapen.
Diese werden nicht wirklich escaped, sondern nur maskiert. Es kann nämlich passieren, dass man englische Spaltennamen nutzen will, welche aber bereits in der MySQL reserviert sind. Mit Backticks sagt man aber, dass man genau die Spalte in der Tabelle nutzen will, und nicht eine Funktion o.ä.

Dass nur mal am Rande, ging ja mehr oder weniger um die PHP Function ;)
 
Noch eine Randnotiz: Datenbank-, Tabellen- und Spaltennamen sollten immer lowercase sein, andernfalls fällt man irgendwann ganz böse auf die Nase.

Zudem ist ein DBAL zu empfehlen, sonst wird der Source demnächst extrem unübersichtlich und etwaige Bugs müssten massenhaft statt einmalig gefixt werden.
 
Back
Top