funktionen und variablen
ronny
- php
hallo, will mich grad mal mit funktionen versuchen, habe dazu eine funktion die einen datenbankeintrag erledigen soll ;) der eintrag klapp als reiner code, aber als funktion nicht. muss ich in der funktion alle(!) variablen einbinden
function test() { mein datenbankeintrag }
oder eben
function test ($alle, $variablen, $die, $irgendwo, $im, $script, $vorkommen) { mein datenbankeintrag}
danke
ronny
ich frage, weil ich ziemlich viele variablen habe ;) und nicht sicher bin welche nun hingehören, wenn überhaupt.
Hi,
muss ich in der funktion alle(!) variablen einbinden
nein, nur die, die Du in der Funktion benötigst. Das nennt man Scope.
ich frage, weil ich ziemlich viele variablen habe ;)
Wenn es gleichartige sind, kannst Du diese beispielsweise auch in einem (assoziativen) Array speichern und übergeben.
Cheatah
P.S.: Komm mir bitte keiner mit 'global'. Davon ist abzuraten. Wozu gibt es Scopes?
ich frage, weil ich ziemlich viele variablen habe ;)
Wenn es gleichartige sind, kannst Du diese beispielsweise auch in einem (assoziativen) Array speichern und übergeben.
nee sind es leider nicht.
danke
hat mir geholfen.
Hello,
Wenn es gleichartige sind, kannst Du diese beispielsweise auch in einem (assoziativen) Array speichern und übergeben.
nee sind es leider nicht.
da hat sich Cheatah wohl etwas missverständlich ausgedrückt. Man kann bei PHP auch ganz verscheidenartige Variablen in einem assoziativen Array speichern und übergeben.
$daten = array(); # damit wird ein leeres Array erzeugt.
$daten["vorname"] = "Hans"; # damit wird ein Stringfeld mit dem
# Inhalt "Hans" ins Array aufgenommen
$daten["alter"] = 37; # Damit wird eine Zahl angelegt
Über Arrays könnte man hier bsetimmt 140 Seiten schreiben...
Wenn Du diese Daten nun an die Funktion übergeben willst, dann machst Du das folgendermaßen:
Die Definition
function SatzSpeichern($werte, $table, $con)
{
...
return $erfolgsergebnis;
}
Der Aufruf:
$ok = SatzSpeichern($daten, "Adressen", $db1);
Innerhalb der Funktion kannst Du auf die Daten nun folgendermaßen zugreifen:
function SatzSpeichern($werte, $table, $con)
{
$sql = "Insert into $table set ";
$sql .= "Vorname = ".mysql_escape_string($daten["vorname"]); #1)
$sql .= "Alter = ".intval($daten["alter"]);
$ ergebnis = mysql_query($sql, $con);
return $ergebnis;
}
#1) Wenn man die Daten in einem Array bindet und die Namen für die
# Variablen günstig wählt, kann man hier gut eine Schleife
# verwenden, wenn man viele Felder zu bearbeiten hat.
Die Funktionen mysql_escape_string() und intval() wurden benutzt, damit keine schädlichen Werte an die Datenbankschnittstelle übergeben werden können. Lies einfach mal nach, was sie machen.
$con bzw $db1 enthält die Verbindungskennung, die man immer angeben sollte, auch wenn man nur mit einer Datenbank arbeitet. Es beschleunigt die Zugriffe.
Und dass in $table der Tabellenname steht, kann man erkennen, oder?
Ich hoffe, das konnte man so verstehen, sonst frag nochmal.
Grüße
Tom
Hello,
Innerhalb der Funktion kannst Du auf die Daten nun folgendermaßen zugreifen:
function SatzSpeichern($werte, $table, $con)
{
$sql = "Insert into $table set ";
$sql .= "Vorname = ".mysql_escape_string($werte["vorname"]); #1)
$sql .= "Alter = ".intval($werte["alter"]);
$ ergebnis = mysql_query($sql, $con);
return $ergebnis;
}
tut mir leid. Copy und Paste ist manchmal tödlich
Tom
Innerhalb der Funktion kannst Du auf die Daten nun folgendermaßen zugreifen:
function SatzSpeichern($werte, $table, $con)
{
$sql = "Insert into $table set ";$sql .= "Vorname = ".mysql_escape_string($werte["vorname"]); #1)
$sql .= "Alter = ".intval($werte["alter"]);$ ergebnis = mysql_query($sql, $con);
return $ergebnis;
}
ja vielen dank, ich denke ,al bin schon etwas weiter, zumindest vom verständnis her ;) habe mir jetzt zum testen das mal so zusammengebastelt.
<?
$geschlecht = "männlein";
$name = "familiennamet";
$vorname = "alizeee";
$daten = array();
$daten[name] = $name;
$daten[vorname] = $vorname;
function db_entry ($werte,$conn){
require "db.php";
if ($daten[geschlecht] == "Männlein")
{
$conn = mysql_connect($db_server,$db_username,$db_passwort)or die ("Verbindungsabbruch");
mysql_select_db($db_database)or die ("Datenbankauswahl fehlerhaft");
$sql = "Insert into mann ";
$sql .= "name = ".mysql_escape_string($werte["name"]);
$sql .= "vorname = ".mysql_escape_string($werte["vorname"]);
$ergebnis = mysql_query($sql, $conn);
if ($Ergebnis === FALSE) {
echo "diese Abfrage ist gescheitert:<br>";
echo $SQLString."<br>";
echo "Die MySQL-Fehlermeldung lautet: ".mysql_error();
}
return $ergebnis;
}
else
{
echo "geht nicht";
}
}
?>
leider kein datenbankeintrag, keine fehlermeldung, einfach nichts :(
danke ronny
seh grad das noch das fehlte
$daten[geschlecht] = $geschlecht;
is da, geht aber trotzdem nix :(
danke
Hello,
<?
$geschlecht = "männlein";
$name = "familiennamet";
$vorname = "alizeee";$daten = array();
$daten[name] = $name;
$daten["name"] = $name;
$daten[vorname] = $vorname;
$daten["vorname"] = $vorname;
$daten["geschlecht"] = "Männlein";
require "db.php"; ## ?? was passiert hier?
##Steht das nicht in db.php?
$conn = mysql_connect($db_server,$db_username,$db_passwort)or die ("Verbindungsabbruch");
$db1 = mysql_select_db($db_database)or die ("Datenbankauswahl fehlerhaft"); ## man braucht das Ergebnis zwar selten, aber wissen kann man nie...
// sollte außerhalb der Funktion passieren
function db_entry ($werte,$conn)
{
if ($daten[geschlecht] == "Männlein")
if ($werte["geschlecht"] == "Männlein")
{
$sql = "Insert into mann ";
$sql .= " set ";
$sql .= "name = ".mysql_escape_string($werte["name"]);
$sql .= "vorname = ".mysql_escape_string($werte["vorname"]);$ergebnis = mysql_query($sql, $conn);
return $ergebnis;
}
$ok = db_entry($daten,$conn);
##»» »» if ($Ergebnis === FALSE)
## if ($ergebnis === FALSE) ## Variablen sind case sensitive
if ($ok)
{
echo "diese Abfrage hat geklappt:<br>";
}
else
{
echo "diese Abfrage ist gescheitert:<br>";
echo mysql_error();
}
?>
Lies dir das mit den Funktionen naochmal genau durch. Du hat eine Funktionsdeklaration und einen Funktionsaufruf. Das sollte man immer schön auseinanderhalten, auch im Script.
Erst alle Includes und Requires
Dann alle Konstanten (die noch nicht includes wurden)
Dann alle Funktionen
Zwischen allen Bereichen (und besonders zwischen den Funktionen) immer einen schönen Kommentarstrich //----------------------, damit man auf einen Blick sieht, wo etwas anfängt und wo etwas aufhört...
Dann zum Schluss das Hauptprogramm.
Und dann klappts auch mit dem Insert.
Viel Erfolg Ronny
Grüße
Tom
Hello,
$sql = "Insert into mann ";
$sql .= " set ";
$sql .= "name = ".mysql_escape_string($werte["name"]);
$sql .= ", vorname = ".mysql_escape_string($werte["vorname"]);
hatte noch das Komma vergessen...
Grüße
Tom