Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Array und Schleife [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Array und Schleife


 
kasIQ
03-02-2008, 16:45 
 
hallo

hab ein problem mit einer schleife

function CE_readoutFields($db,$gettblname){
$sqlfield = mysql_query("SHOW FIELDS FROM $db.".$gettblname." ");

while($rowfield[] = mysql_fetch_array($sqlfield)){

$t_rowfield = $rowfield;
}

return $t_rowfield;

}

$showField = CE_readoutFields("dbname", "tbl_test");

foreach($showField as $key =>$showFieldName){
echo $key.$showFieldName['Field'];
}


rufe ich nun diese funktion auf und lasse es mir mit einer forech schleife
anzeigen bekomme ich immer einen durchlauf mehr heraus als was für ein ergebnis in der funktion raus kam.

Ist es weil der Zeiger wieder zurückspringt?Wie kann ich das unterbinden? kann mir da jemand von euch helfen?

 
Kropff
03-02-2008, 17:01 
 
1. was soll das leerzeichen am ende?
$sqlfield = mysql_query("SHOW FIELDS FROM $db.".$gettblname." ");
2. wieso arbeitest du hier mit einem array?
while($rowfield[] = mysql_fetch_array($sqlfield))
3. und da nicht?
$t_rowfield = $rowfield;
4. in diesem fall brauchst du keine while-schleife, ein einfaches
$rowfield = mysql_fetch_array($sqlfield)
reicht völlig aus. und das kannst du zurückgeben

gruß
peter

 
kasIQ
03-02-2008, 17:32 
 
hallo kropff

danke für die schnelle antwort .

zu 1. gehört da nicht hin ...hatte vorher noch ne where klausel drin

zu2. und 3.
weil es funktioniert ! ;.)
hier liegt irgendwo der fehler dass bei zb bei 5 einträgen die foreach schleife 6 mal durchlaufen wird

zu 4.brauch doch ne while schleife, da ja mehrere Spalten in meiner tabelle drin sind, deren namen ich angezeigt bekommen möchte,
mache ich keine schleife bekomme ich doch nur den ersten eintrag angezeigt. ...aber das weisst du ja

 
TobiaZ
03-02-2008, 17:46 
 
while($rowfield = mysql_fetch_array($sqlfield))
{
$t_rowfield[] = $rowfield;
}

return $t_rowfield;

so ist zumindest sinnvoll.

 
Kropff
03-02-2008, 17:59 
 
da ja mehrere Spalten in meiner tabelle drin sind
deswegen brauchst du aber keine schleife, da es nur ein(!) datensatz ist, bestehend aus einem(!) array.

$sqlfield = mysql_query('SHOW FIELDS FROM '.$db.'.'.$gettblname);
$rowfield = mysql_fetch_array($sqlfield);
print_r($rowfield);


gruß
peter

 
kasIQ
03-02-2008, 17:59 
 
Hallo TobiaZ

das hätte ich auch gedacht.


funzt aber net..

print_r($t_rowfield); ist leer!

 
kasIQ
03-02-2008, 18:08 
 
@kropff

nein es sind mehrer DS

zb ID[Field],int(5) unsigned [Type] ,auto_increment [Extra]..
TableName [Field],varchar(50) [Type] ,.....
FG_USer[Field], tinyint(1) [Type] ....

die lese ich alle in de schleife aus und packe das ergebnis in ein array

welches ich mit der foreach schleife wieder auseinanderpflücke...was auch alles prima funktioniert. bis auf den einen durchlauf zuviel.

 
TobiaZ
03-02-2008, 18:14 
 
funzt aber net..

print_r($t_rowfield); ist leer! code zeigen!

 
Kropff
03-02-2008, 18:18 
 
nein es sind mehrer DS
stimmt, hast recht. habe noch nie mit so einer abfrage gearbeitet.
print_r($t_rowfield); ist leer!
und was ergibt ein
$sqlfield = mysql_query('SHOW FIELDS FROM '.$db.'.'.$gettblname) or die (mysql_error());

gruß
peter

 
TobiaZ
03-02-2008, 18:46 
 
function CE_readoutFields($db,$tbl)
{

$res = mysql_query("SHOW FIELDS FROM " . $db . "." . $tbl);
while($row = mysql_fetch_array($res))
{
$fields[] = $row;
}

return $fields;

}



$fields = CE_readoutFields("dbname", "tbl_test");

foreach($fields as $fiels)
echo $field['Field'];
}

Ungetestet, den erste Tippfehler hab ich schon beseitigt.

 
kasIQ
03-02-2008, 18:50 
 
//Tabellenattribute wie Field, Type usw einer
//beliebigen Tabelle werden in einem array geparkt
function CE_readoutFields($db,$gettblname){

$sqlfield = mysql_query("SHOW FIELDS FROM $db.".$gettblname." ");

while($rowfield[] = mysql_fetch_array($sqlfield)){

// $t_rowfield = $rowfield; unnötig
}

return $t_rowfield;

}


//array wird auseinandergepflückt und ich lasse mir
//die Tabellenspalten und deren Typ anzeigen
$showField = CE_readoutFields("dbname", "tbl_test");

foreach($showField as $key =>$showFieldName){
echo $key.$showFieldName['Field'].$showFieldName['Type'];
}



wie gesagt alles wunderbar fehler werden nicht angezeigt ..
das einzige problm ist der eine durchlauf der foreach schleife zuviel

dieser stört bei der weiteren abarbeitung in meinem weteren code.

ich hatte das auch alles schon zum funktionieren gebracht , jedoch ist meine platte mit dem code vorgestern gecrasht und ich habe keien Ahnung mehr was das Ausschlaggebende zum funktionieren dieses Codes war. Kommt Zeit kommt Rat..

 
TobiaZ
03-02-2008, 18:54 
 
while($rowfield[] = mysql_fetch_array($sqlfield)){

$t_rowfield = $rowfield;
}

return $t_rowfield; Das ist total überflüssig. Unsinnigerweise überschreibst du $_rowfeld immer wieder. Dann lass es lieber ganz raus und verwende nur $rowfeld. (siehe mein snippet)

Danach mal ne testausgabe vom Array machen, erhält es die gewünschte Struktur und Inhalt?

wie gesagt alles wunderbar fehler werden nicht angezeigt ..
das einzige problm ist der eine durchlauf der foreach schleife zuviel

dieser stört bei der weiteren abarbeitung in meinem weteren code. Wie gesagt, testausgabe des Arrays (gerne auch mal hier posten)

 
kasIQ
03-02-2008, 18:56 
 
@Tobiaz

ja das mit deinem Code ist besser, doch lasse dir mal den

$key anzeigen bei der schleife und du wirst feststellen , dass da ein durchlauf zuviel ist.

foreach($fields as $key => $fiels){

echo $key.$field['Field'];

}


kannst das ja mal mit ner beliebigen Tabelle versuchen

und wehe das klappt bei dir ;-)

 
TobiaZ
03-02-2008, 18:58 
 
Hab meinen Code noch mal angepasst, jetzt sollte es besser sein. Und wenn du noch ein mal postest, dass es nicht geht, ohne endlich das Array auszugeben, ...

Da wird nämlich wahrscheinlich ein "false" drin stehen, was jedoch kein array ist. ;)

 
kasIQ
03-02-2008, 19:05 
 
ergebnis des arrays();

Array (
[0] => Array ( [0] => ID [Field] => ID [1] => int(5) unsigned [Type]
=> int(5) unsigned [2] => NO [Null] => NO [3] => PRI [Key] => PRI
[4] => [Default] => [5] => auto_increment [Extra] =>
auto_increment )

[1] => Array ( [0] => TableName [Field] => TableName [1] =>
varchar(50) [Type] => varchar(50) [2] => NO [Null] =>
NO [3] => UNI [Key] => UNI [4] => [Default] => [5] =>
[Extra] => )

[2] => Array ( [0] => FG_SU [Field] => FG_SU [1] =>
tinyint(1) [Type] => tinyint(1) [2] => NO [Null] => NO [3] =>
[Key] => [4] => 1 [Default] => 1 [5] => [Extra] => )

[3] => Array ( [0] => FG_ADMIN [Field] => FG_ADMIN [1] =>
tinyint(1) [Type] => tinyint(1) [2] => NO [Null] => NO [3] =>
[Key] => [4] => [Default] => [5] => [Extra] => )

[4] => Array ( [0] => FG_USER [Field] => FG_USER [1] =>
tinyint(1) [Type] => tinyint(1) [2] => NO [Null] => NO [3] =>
[Key] => [4] => [Default] => [5] => [Extra] => )


[5] => ) //???

ergbnis von $key.fiels['Field'];

0ID
1TableName
2FG_SU
3FG_ADMIN
4FG_USER
5
//Tabelle hat nur aber nur 5 DS

 
TobiaZ
03-02-2008, 19:11 
 
1. Aktueller Code???

2. Wenn ich dir schon sage, dass da vermutlich ein false drin steht, wäre es ein leichtes gewesen diese vermutung mit var_dump zu bestätigen, anstatt sich über einen "leeren" Wert zu wundern.

 
tontechniker
03-02-2008, 19:13 
 
[5] => ) //??? Da wird nämlich wahrscheinlich ein "false" drin stehen, was jedoch kein array ist. var_dump zeigt das genau an.

 
kasIQ
03-02-2008, 19:18 
 
@tontechniker

jup , habe es bisher nur 1 mal benutzt und anscheinend wieder vergessen ..danke

@TobiaZ

 
TobiaZ
03-02-2008, 19:19 
 
Und?

 
kasIQ
03-02-2008, 19:29 
 
array(6) { {...........}[5]=> bool(false) }

 
TobiaZ
03-02-2008, 19:40 
 
Aha. Und die restlichen antworten vielleicht auch nocht?

1. Aktueller Code???

 
PHP-Desaster
03-02-2008, 19:42 
 
Ja, das liegt daran, weil du das Ergebnis von fetch_bla direkt ins Array pumpst. Mache es, wie schon 57mal hier im Thread gezeigt, über eine Zwischenvariable!

 
kasIQ
03-02-2008, 20:25 
 
@TobiaZ

es funktioniert alles... deine erste Antwort war schon richtig..sry wegen der Umstände. und nochmals vielen Dank. :-)

Wie war das mit dem Wald und den Bäumen ?

1. Aktueller Code

function CE_readoutFields($db,$tbl)
{

$sqlfield = mysql_query("SHOW FIELDS FROM " . $db . "." . $tbl);

while($row = mysql_fetch_array($sqlfield)){

$rowfields[] = $row ;

}
return $rowfields;
}


$showField = CE_readoutFields("dbname", "tbl_test");

foreach($showField as $key =>$showFieldName){
echo $key.$showFieldName['Field'].'<br>';
}

 
TobiaZ
03-02-2008, 21:02 
 
Aufmerksames Lesen würde schon reichen... Neben den Tipps, die hier ja oft überlesen werden, steht hier ausnahmsweise mehrfach die fertige Lösung drin. ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:17 Uhr.