0

所以我正在做一个项目,我遇到了一些 mysql & php 错误。

第一个错误:

这是与第一个错误相关的所有代码

// 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

4

1 回答 1

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')");
} 

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

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
}
于 2013-02-06T01:53:33.637 回答