mehrere Werte in Funktion
Gerd
- php
Hallo,
nachdem ich meine erste Funktion mit Hilfe dieses Forums geschrieben habe, wollte ich mehrere Werte in eine Funktion übergeben.
<?php function mehrere() {
//Verbindung zu MySQL herstellen
$verbindung =mysql_connect("localhost", "root","");
//Verbindung zu Datenbank herstellen
mysql_select_db('dodp',$verbindung);
$abfrage = @mysql_query("SELECT * FROM sb");
$row_abfrage = mysql_fetch_array($abfrage);
$totalRows_abfrage = mysql_num_rows($abfrage);
$anzahl = $totalRows_abfrage;
return array( $totalRows_abfrage, $row_abfrage['name'] , $row_abfrage['vorname'] , $row_abfrage['telefon'], );
}
$ergebnis = mehrere();
for($i=1; $i<=$ergebnis[0]; $i++)
{
echo $ergebnis[0]."<br>";
echo $ergebnis[1]."<br>";
echo $ergebnis[2]."<br>";
echo $ergebnis[3]."<br>";
}
?>
eigentlich müsste ich qq verschiedene Datensätze angezeigt bekommen, ich bekomme aber den ersten DS 11 mal angezeigt.
Wo liegt mein Fehler?
Danke Gerd
Hello,
leider kan ich nicht ganz folgen, was Du genau vor hast.
Könntest Du das einfach mal im Klartext erzählen?
Also auf Deutsch, nicth auf PHP :-)
Und dann solltest Du zum Lernen und Testen immer alle Fehlermeldungen und Statusmeldungen nutzen, also nicht unterdrücken udn auch auswerten.
<?php function mehrere() {
//Verbindung zu MySQL herstellen
$verbindung =mysql_connect("localhost", "root","");
//Verbindung zu Datenbank herstellen
mysql_select_db('dodp',$verbindung);
#> $abfrage = @mysql_query("SELECT * FROM sb");
$abfrage = mysql_query("SELECT * FROM sb");
if (($error = mysql_errno($verbindung)) > 0)
{
## Fehlermeldung
}
$row_abfrage = mysql_fetch_array($abfrage);
$totalRows_abfrage = mysql_num_rows($abfrage);
$anzahl = $totalRows_abfrage;return array( $totalRows_abfrage, $row_abfrage['name'] , $row_abfrage['vorname'] , $row_abfrage['telefon'], );
}
#---------------------------------------------------------
$ergebnis = mehrere();
for($i=1; $i<=$ergebnis[0]; $i++)
{
echo $ergebnis[0]."<br>";
echo $ergebnis[1]."<br>";
echo $ergebnis[2]."<br>";
echo $ergebnis[3]."<br>";
}
?>
Wenn Du aus einem Resultset (ergebnismenge einer SQL-Abfrge) mehrere Zeilen haben möchtest, dann musst Du sie holen.
$sql = "SELECT * FROM sb";
$abfrage = mysql_query($sql, $verbindung);
if (!$abfrage or ($error = mysql_errno($verbindung)) > 0)
{
## Fehlermeldung echo "MySQL-Fehler $error";
}
else
{
while ($_row = mysql_fetch_assoc($abfrage))
{
$_ergebnis[] = $_row; ## Hier wird dem großen Array $_ergebnis immer ein Datensatz
## hinzugefügt.
}
}
$row_abfrage = mysql_fetch_array($abfrage);
echo "<pre>\n";
print_r($_ergebnis);
echo "<pre>\n";
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Guten Morgen,
was ich vor hatte ? Ich versuchs, erklären kann ich schlecht.
Ich wollte eine Funktion schreiben, die mir mehrere Werte zurückgibt und diese dann auch noch durch eine Schleife laufen läßt.
So das ich dann nur noch die Funktion aufrufen muss und die Werte angezeigt bekomme.
ich dachte mir das so:
<?php
require_once('testfunktionen.inc.php');
$ausgabe =mehrere() ;
echo $ergebnis[0]."<br>";
echo $ergebnis[1]."<br>";
echo $ergebnis[2]."<br>";
?>
Naja und das Ergebnis sollte sein
Name1
Vorname1
Telefon1
Name2
Vorname2
Telefon2
und das sollte sich wiederholen.
Die Funktion selber sieht so aus:
function mehrere()
{
//Verbindung zu MySQL herstellen
$verbindung =mysql_connect("localhost", "root","");
//Verbindung zu Datenbank herstellen
mysql_select_db('dodp' ,$verbindung);
$abfrage = @mysql_query("SELECT * FROM sb");
$row_abfrage = mysql_fetch_array($abfrage);
$totalRows_abfrage = mysql_num_rows($abfrage);
$anzahl = $totalRows_abfrage;
for($i=1; $i<=$anzahl; $i++)
{
return array($row_abfrage['name'] , $row_abfrage['vorname'] , $row_abfrage['telefon'] );
}
}
Das klappt aber nicht. Ich bekomme keinen durchlauf, nur ein Datensatz wird angezeigt oder wenn ich die Schleife ändere 11 mal der erste DS.
Fehler oder Warnungen bekomme ich nicht angezeigt.
Besten Dank
Gerd
hi,
Ich wollte eine Funktion schreiben, die mir mehrere Werte zurückgibt und diese dann auch noch durch eine Schleife laufen läßt.
Eine Funktion kann nur genau ein Datenelement zurückgeben.
Wenn du mehrere Werte zurückliefern willst, musst du sie alle in einem Datenelement ablegen - bspw. einem Array.
ich dachte mir das so:
<?php
require_once('testfunktionen.inc.php');
$ausgabe =mehrere() ;
echo $ergebnis[0]."<br>";
echo $ergebnis[1]."<br>";
echo $ergebnis[2]."<br>";
Du hast an dieser Stelle überhaupt keine Variable namens $ergebnis.
Die Funktion selber sieht so aus:
function mehrere()
{
//Verbindung zu MySQL herstellen
$verbindung =mysql_connect("localhost", "root","");
//Verbindung zu Datenbank herstellen
mysql_select_db('dodp' ,$verbindung);
$abfrage = @mysql_query("SELECT * FROM sb");
$row_abfrage = mysql_fetch_array($abfrage);
$totalRows_abfrage = mysql_num_rows($abfrage);
$anzahl = $totalRows_abfrage;for($i=1; $i<=$anzahl; $i++)
{
return array($row_abfrage['name'] , $row_abfrage['vorname'] , $row_abfrage['telefon'] );
}
}Das klappt aber nicht. Ich bekomme keinen durchlauf, nur ein Datensatz wird angezeigt
Natürlich - return springt aus der Funktion heraus (wie ich dir schon mal sagte). Danach wird _nichts_ mehr vom restlichen Code, der danach noch in der Funktion stehen mag, mehr ausgeführt.
oder wenn ich die Schleife ändere 11 mal der erste DS.
Natürlich - du hast ja auch nur einen einzigen Datensatz aus dem Abfrageergebnis herausgeholt.
Die mysql_fetch-Funktionen liefern dir immer nur einen Datensatz (oder false, wenn kein weiterer Vorhanden). Also musst du eine solche auch _in_ einer Schleife aufrufen, wenn du mehrere Datensätze "abholen" willst.
Fehler oder Warnungen bekomme ich nicht angezeigt.
Die bekommst du nur, wenn du syntaktische Fehler gemacht hast, oder etwas schiefging.
_Logische_ Fehler bei absolut korrekter Syntax bekommst du aber natürlich nicht angezeigt - so weit ist die KI noch nicht.
gruß,
wahsaga
hi,
eigentlich müsste ich qq verschiedene Datensätze angezeigt bekommen, ich bekomme aber den ersten DS 11 mal angezeigt.
Die for-Schleife zu durchlaufen, ist dem Interpreter leider nicht mehr möglich - schliesslich hast du ihn schon davor per return gezwungen, aus der Funktion auszusteigen.
gruß,
wahsaga