首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP输出在HTML中是正确的,但是浏览器给出了500个内部服务器错误

PHP输出在HTML中是正确的,但是浏览器给出了500个内部服务器错误
EN

Stack Overflow用户
提问于 2014-01-22 14:08:21
回答 4查看 1.9K关注 0票数 0

当心!我只是从PHP开始,所以如果这是某种n00b错误,我提前道歉。我在PHP中有一个小脚本,它从MySQL数据库中读取一个表,并将单个列的值作为下拉列表提供。PHP代码如下:

代码语言:javascript
复制
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<?php
    $dbc = mysql_connect("localhost", "someDBuser", "somecorrectpass");
    $db = mysql_select_db("someDB");
    $results= mysql_query("SELECT name FROM sometable");
?>
<select name="eventid">
    <option value="0">Choose</OPTION>
    <?php
        while($row = mysql_fetch_array($results)) {
            echo '<option value="'.$row['name'].'">'. $row['name'].'</option>';
        }
    ?>
</select>
</form>
</body>
</html>

现在,当我从浏览器调用文件时,我会得到一个空白屏幕。我启用了PHP错误报告,并获得了下面的错误Fatal error: Call to undefined function mysql_connect() in /var/www/html/testdel.php on line 12

接下来,我尝试使用PHP命令在后端运行该文件。它运行良好,给出了所需的html输出,如下所示:

代码语言:javascript
复制
$ php /var/www/html/testdel.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form method="post" action="/var/www/html/testdel.php">
<select name="eventid">
    <option value="0">Choose</OPTION>
    <option value="Ex1005">Ex1005</option><option value="Ex1009">Ex1009</option><option value="user1">user1</option></select> 
</form>
</body>
</html>

当我将这个输出放入一个文件(例如"testdel.html“)中时,我得到了正确的输出。

我在原来的PHP文件中做错了什么?这与权限有关吗?当前文件权限为644。还是我需要包括(使用)某些模块?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-22 14:17:57

第一

从不在页面中直接执行连接或指令,就像这样,这是一个糟糕的实践,当然也不安全。

例如,创建一个仅用于连接的文件/类,比如connection.php,它们调用该方法,例如:Connection::start();

对于SQL说明,也可以这样做。创建类,例如:class SomeTable,它们调用所需的方法:SomeTable::getAll();

只是个例子。

第二

使用PDO MySQL

可能出现的问题

检查您的扩展php_mysql是否未注释,是否存在于php.ini中。在UNIX中,也许这个/etc/php/php.ini。在窗户里我不知道。就像这样:

代码语言:javascript
复制
extension=php_mysql.so
extension=php_pdo_mysql.so

或者,在Windows中:

代码语言:javascript
复制
extension=php_mysql.dll
extension=php_pdo_mysql.dll

为了确保这个,创建一个文件,用这个代码<?php phpinfo(); ?>DocumentRoot中创建一个文件,然后搜索mysql--with-mysql。例如:

  • /var/www/info.php中创建文件
  • 编写以下代码:<?php phpinfo(); ?>
  • 在浏览器中,调用以下文件:http://localhost/info.php
  • 并搜索mysql

如果你有任何意见,请在评论中告诉我。

为我的英语道歉。

票数 3
EN

Stack Overflow用户

发布于 2014-01-22 14:29:35

尝试使用以下代码

代码语言:javascript
复制
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<?php
    $db = new mysqli('hostname', 'root', 'root', 'db_name');
    if($db->connect_errno > 0)
    {
      die('Unable to connect to database [' . $db->connect_error . ']');
    }
    $sql = 'SELECT name FROM sometable';

    if(!$result = $db->query($sql))
    {
       die('There was an error running the query [' . $db->error . ']');
    }
?>
<select name="eventid">
    <option value="0">Choose</OPTION>
    <?php
        while($row = $result->fetch_assoc())
        {
            echo '<option value="'.$row['name'].'">'. $row['name'].'</option>';
        }
    ?>
</select>
</form>
</body>
</html>

现在使用的是mysql_i,而不是现在不推荐的mysql_。

如果您可以通过SSH访问您的服务器,您可能还需要安装php-mysql,类似的问题请参见本答案。

连接()

票数 1
EN

Stack Overflow用户

发布于 2014-01-22 14:59:14

你可以采取这些措施来发现/解决你的问题。这可能对你有帮助。

  1. 您可以验证您的PHP安装是否已经在mysql支持下编译过。创建包含以下内容的php测试网页

并将其加载到浏览器中。它将显示环境加载的配置。在页面中搜索MySQL。如果您没有看到它,则需要使用MySQL支持重新编译PHP,或者重新安装内置的package。

  1. 验证在php.ini中加载mysql扩展的行是否没有注释。在Linux中,行是extension=mysql.so,在Windows中,行是extension=php_mysql.dll。删除分号,取消该行注释.
  2. 如果在php.ini中进行了任何更改,则重新启动apache服务,以使更改生效。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21285185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档