Tim: if/else funktionert nicht

Morgen,

ich habe grade eine kleine PHP Datei geschrieben. Sie soll gucken ob eine Tabelle vorhanden ist:

<html>
<body>
<?php
include("help.php");
if(isset($_POST["undweg"]))
{
  session_start();
  echo"<form action = "$PHP_SELF" method = "post">";

$dbh = connect("abschluss");
  echo "Tabellenname: ". $_POST["tabellenname"]. "<br>";
  $sql = "SELECT * FROM ". $_POST["tabellenname"]. ";";
  echo "SQL Befehler: ". $sql. "<br>";
  // phpinfo();
  $result = db_query($sql,$dbh);

if(mysql_num_rows($result) > 0)
  {
   $_SESSION["status"] = $_POST["tabellenname"];
   echo "Tabelle ist vorhanden<br>";
  }
  else
  {
   $_SESSION["status"] = "Fehler";
   echo "Tabelle ist nicht vorhanden<br>";
  }

echo "$_SESSION: ".($_SESSION["status"])."<br>";
  echo "</form>";
}
else
if(($_SESSION["status"] != "Fehler") && ($_SESSION["status"] == true))
{
  echo"Ausgabe:<br> <br>";
}
else
{

echo"<form action = "$PHP_SELF" method = "post">";
  echo "Tabellenname: ";
        echo "<input type = "text" name = "tabellenname">";
        echo "<input type = "submit" name = "undweg">";
        echo "</form>";
    }
?>
</body>
</html>

Leider geht das Programm NIE in diese else Anweisung:

if(mysql_num_rows($result) > 0)
  {
   $_SESSION["status"] = $_POST["tabellenname"];
   echo "Tabelle ist vorhanden<br>";
  }
  else
  {
   $_SESSION["status"] = "Fehler";
   echo "Tabelle ist nicht vorhanden<br>";
  }

Kann mir jemand sagen warum?

Ich bin über jede HIlfe dankebar.

Eine gute Nacht noch ;)

Tim

  1. Hallo Tim

    ich habe grade eine kleine PHP Datei geschrieben. Sie soll gucken ob eine Tabelle vorhanden ist:

    Aha. Wenn eine Tabelle neu angelegt ist und noch keine Datensätze enthält, so wäre sie nach Deinem beabsichtigten Vorgehen nicht vorhanden :-(

    Du solltest stattdessen mysql_list_tables() verwenden.

    Ausserdem ist es eine gute Idee, Daten, die aus Formularfeldern stammen _niemals_ ungeprüft in ein SQL-Statement zu übernehmen, SQL-Injection läßt grüßen. Zu diesem Thema gab es hier im Forum schon viele Diskussionen, die solltest Du mit dem von mir gelieferten Stichwort finden können.

    Freundliche Grüße

    Vinzenz

  2. Hi,

    $sql = "SELECT * FROM ". $_POST["tabellenname"]. ";";
      $result = db_query($sql,$dbh);

    Sollte die Tabelle nicht existieren, ist $result false.
    D.h. daß Dir

    if(mysql_num_rows($result) > 0)

    das hier eine Fehlermeldung liefern müßte ("not a valid query result" oder so ähnlich).

    Auf welche (zu niedrige) Stufe hast Du das Error Reporting eingestellt, daß Du diese Meldung nicht siehst?

    Statt die Anzahl der Zeilen in der Tabelle abzuprüfen (was ja sowieso unsinnig ist, siehe Vinzenz), solltest Du hier prüfen, ob $result false ist oder nicht.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  3. Hi,

    $dbh = connect("abschluss");
      $sql = "SELECT * FROM ". $_POST["tabellenname"]. ";";
      $result = db_query($sql,$dbh);

    fällt dir nicht auf das da etwas fehlt? also bei mir sieht das standardmässig und verkürzt so aus:

    $dbcnx = @mysql_connect($host, $user, $pwd);
    mysql_select_db($db);
    $sql = "SELECT * FROM $tabelle";
    $result = mysql_query($sql);

    siehst du jetzt was dir fehlt?

    MfG