未定义的变量错误

时间:2013-02-06 01:44:54

标签: php mysql

所以我正在开展一个项目,我正在运行一些mysql& php错误。

第一个错误:

这是与First Error相关的所有代码

// Database Class 

class Database {
    public $_link, $_result, $_numRows;

    public function __construct($server, $username, $password, $db){
        $this->_link = mysql_connect($server, $username, $password) or die('Cannot Execute:'. mysql_error());
        mysql_select_db($db, $this->_link);
    }

    public function disconnect(){
        mysql_close($this->_link);
    }

    public function query($sql){
        $this->_result  = mysql_query($sql, $this->_link) or die('Cannot Execute:'. mysql_error());
        $this->_numRows = mysql_num_rows($this->_result);
    }

    public function numRows() {
        return $this->_numRows;
    }

    public function rows(){
        $rows = array();
        for($x = 0; $x < $this->numRows(); $x++) {
            $rows[] = mysql_fetch_assoc($this->_result);    
        }
        return $rows;
    }

}

// Setup.php 

$is_set = 'false'; 
global $company_name, $ebay_id;
    if( isset($_POST['ebay_id'], $_POST['company_name']) ){
        $_ebay_id = $_POST['ebay_id'];
        $_company_name = $_POST['company_name'];
        $is_set = 'true';
    } else { 
        // Silence is Golden!
    }

    $_service_database = new Database('localhost', 'root', 'password', 'chat-admin');

    $_service_database->query("SELECT * FROM installs WHERE `identity` = '$mysqldb' AND `db_name` = '$mysqldb'");


    if ($_service_database->numRows() == 0){ 
        if($is_set == true){
             $_service_database->query("INSERT INTO installs (ebay_id, name, db_name, identity) VALUES ('$_ebay_id', '$_company_name', '$mysqldb', '$mysqldb')");
        } 
    } else { 
        // header("Location: index.php");
    }
    $_service_database->disconnect();

?>

<form name="setup" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<input placeholder="eBay Username" type="text" name="ebay_id">
<input placeholder="Company Name" type="text" name="company_name">
<input type="hidden" name="insert" value="true">
<input type="submit">
</form>

所以它做的是检查定义的变量是否在数据库中,如果它们不是那么当表单提交时它插入我们的值,如果它们在数据库中它重定向到index.php,好吧我接收所有强大的MySQL num_rows *期望参数1是资源,布尔给定...,现在我已经到处搜索并且只发现了模具错误应该解决,这就是为什么你可以在函数查询的第16行看到它,现在虽然我得到了错误,但一切仍然有效,对我来说关闭错误报告并不是很好,所以任何帮助都会很棒。此外,如果你看到未定义的变量,如$ mysqldb,它们实际上是设置但在不同的页面上,它们是有效的

第二个错误:=为简化模板系统而制作的功能

这与第二错误

都有关
function get_content_type($value){
    if (strpos($value,'title:') === 0 ) {
        $title = explode("title: ",$value);
        $value = $title[1];
    } else if (strpos($value,'css:') === 0 ) {
        $css = explode("css: ",$value);
        $value = $css[1];
    } else if (strpos($value, 'js:') === 0 ) {
        $javascript = explode("js: ", $value);
        $value = $javascript[1];
    } else {
        // Silence is Golden
    }

    if($value == $title[1]){
        echo '<title>'.$value.'</title>';
    } else if ($value == $css[1]) {
        echo '<link rel="stylesheet" href="'.$value.'">';
    } else if ($value == $javascript[1]) { 
        echo '<script src="'.$value.'"></script>';
    }
}

// Calling
get_content_type('title: Welcome to my site');
get_content_type('css: http://something.com/style.css');
get_content_type('js: http://code.jquery.com/jquery-latest.min.js');

一切正常,因此输出

<title>Welcome to my site</title><link rel="stylesheet" href="http://somesite.com/style.css"><script src="http://code.jquery.com/jquery-latest.min.js"></script>

仅在我设置error_reporting(0);

我得到的错误是未定义的变量,因为显然我设置了一个,然后我解开那个并设置另一个因此最终只有1是真的,尽管它已经正确输出了所有这些。

更新

第二个错误:错误=

Notice: Undefined variable: css in C:\Server\www\hidie\libs\test.php on line 19 Notice: Undefined variable: title in C:\Server\www\hidie\libs\test.php on line 17 Notice: Undefined variable: title in C:\Server\www\hidie\libs\test.php on line 17

第一个错误:错误=

错误:Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given

1 个答案:

答案 0 :(得分:2)

好的,这是你的问题:

首先,如评论中所述,mysql_num_rows仅适用于select和show。您在查询方法中拥有它,该方法由插入调用。你不能这样做。

public function query($sql){
    $this->_result  = mysql_query($sql, $this->_link) or die('Cannot Execute:'. mysql_error());
    $this->_numRows = mysql_num_rows($this->_result); // <- BAD!
}

你可以在这一行上调用它:

if($is_set == true){
     $_service_database->query("INSERT INTO installs (ebay_id, name, db_name, identity) VALUES ('$_ebay_id', '$_company_name', '$mysqldb', '$mysqldb')");
} 

您可以为数据库创建第二种方法,并为写入db的所有调用调用它:

public function execute($sql){
        $this->_result  = mysql_query($sql, $this->_link) or die('Cannot Execute:'. mysql_error());
    }

会像这样调用:

if($is_set == true){
     $_service_database->execute("INSERT INTO installs (ebay_id, name, db_name, identity) VALUES ('$_ebay_id', '$_company_name', '$mysqldb', '$mysqldb')");
} 

其次,您需要在这些条件之外隐式定义变量$ css和$ title。否则,您将尝试调用未定义的变量,如消息所示...

$title = "";
$css = "";

if (strpos($value,'title:') === 0 ) {
    $title = explode("title: ",$value);
    $value = $title[1];
} else if (strpos($value,'css:') === 0 ) {
    $css = explode("css: ",$value);
    $value = $css[1];
} else if (strpos($value, 'js:') === 0 ) {
    $javascript = explode("js: ", $value);
    $value = $javascript[1];
}   else {
    // Silence is Golden
}