Warning: Invalid argument supplied for foreach()

Papenburger

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem:

sql Code:
  1. Warning: Invalid argument supplied FOR foreach() IN index.php ON line 12


In Line 12 steht aber folgendes:

PHP:
07: $abfrage="SHOW TABLES FROM ".$dbname." LIKE '$dbtabelle'";
08: $query=mysql_query($abfrage);
09: $fetch_array=mysql_fetch_array($query);
10: mysql_close($db);
11: 
12: foreach($fetch_array as $key)
13: {
In der Datenbank ist schon eine Tabelle drin, die aber unrelevant ist!
Ich bin mit meinem Latein schon am Ende und habe den Fehler noch nicht gefunden.
Wer kann mir helfen?

MFG
Papenburger
 
Versuchs mal mit [phpf]mysql_error[/phpf] und einer anderen Abfrage:
PHP:
$abfrage="SHOW TABLES FROM ".$dbname." LIKE ".$dbtabelle.";";
 
bei error_reporting(E_ALL); zeigt der folgendes an:

Warning: Invalid argument supplied for foreach() in /usr/local/nagios/share/sms2/index.php on line 12
Notice: Undefined variable: vorhanden in /usr/local/nagios/share/sms2/index.php on line 27


in Zeile 27 steht eine Variable die aber vorher in der Foreachschleife belegt wird, also dort wo der Fehler auftaucht...
 
Versuchs mal mit [phpf]mysql_error[/phpf] und einer anderen Abfrage:
PHP:
$abfrage="SHOW TABLES FROM ".$dbname." LIKE ".$dbtabelle.";";


Mit der abfrage kommt nun folgendes:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /usr/local/nagios/share/sms2/index.php on line 9

Warning: Invalid argument supplied for foreach() in /usr/local/nagios/share/sms2/index.php on line 12

Notice: Undefined variable: vorhanden in /usr/local/nagios/share/sms2/index.php on line 27
 
Du hast einen fehler in deinem SQL-Query, dadurch ist $fetch_array kein Array und foreach zeigt diesen Fehler an. Schreib mal hinter mysql_query() noch:
PHP:
$query=mysql_query($abfrage) or die(mysql_error());

Viele Grüße
 
Zeige doch mal den kompletten Code, zumindest die ersten 27 Zeilen.
Wenn PHP sagt, die Variable ist nicht vorhanden, dann wird das auch so sein ;)
 
kleiner Tip nebenbei:

Gib vor der MySQL-Query folgendes ein und schau dir die Werte an. Vielleicht liegt da schon der Hund begraben ;-)

PHP:
echo "Datenbankname: ".$dbname."<br>";
echo "Tabelle: ".$dbtabelle."<br>";

Ansonsten geh in dein PHPmyAdmin und gib den SQL-String ein. Wenn dort kein Fehler kommt und die richtigen Daten angezeigt werden, dann weißt du, dass auf jeden Fall der Fehler im PHP-Dokument ist.
 
Zeige doch mal den kompletten Code, zumindest die ersten 27 Zeilen.
Wenn PHP sagt, die Variable ist nicht vorhanden, dann wird das auch so sein ;)


PHP:
<?php
$dbserver="localhost";
$dbuser="user";
$dbpass="passwort";
$dbname="datenbankname";
$dbtabelle="datenbanktabelle";


$db = mysql_connect ($dbserver,$dbuser, $dbpass) or die("Es konnte keine Verbindung hergestellt werden!");
mysql_select_db($dbname,$db) or die("Auswahl der Datenbank fehlgeschlagen!");

$abfrage="show tables from ".$dbname;
$query=mysql_query($abfrage);
$fetcharray=mysql_fetch_array($query);
mysql_close($db);

foreach($fetcharray as $key)
{
                     if ($key==$dbtabelle)
                     {
                      $vorhanden=1;
                     }
                     else
                     {
                      $vorhanden=0;
                     }
}

Die Tabelle die ich suche ist in der DB vorhanden jedoch schreibt das Script eine 0 in die Variable... Wieso? Fehler gibt es keine mehr!
 
Du übersiehst, was dir mysql_fetch_array() liefert...dies ist nämlich kein Array mit allen Ergebnissen, sondern eine Liste mit allen Ergebnissen, welche dort wiederum in Array-Form vorzufinden sind.

So wie du es jetzt hast, greifst du nur auf das erste Element dieser Liste zu....und dort findest du nur die 1. Tabelle der DB vor.
Probiers mal so:
PHP:
$abfrage="show tables from  $dbname LIKE '$dbtabelle' ";
$query=mysql_query($abfrage);

if($tab=mysql_fetch_array($query))
{
  echo '<i>'.$dbtabelle .'</i> vorhanden<br>';
}

else
{
  echo '<i>'.$dbtabelle .'</i> nicht vorhanden<br>';
}
mysql_close($db);
 
Zurück