0

我正在尝试使用 PHP 从我的网站将一些信息写入 SQL 数据库。我可以访问数据库进行登录,但是我无法从我的网站向其中写入任何内容。此外,我无法查看任何连接错误。

表格页面:

<?php
    $dbh = new PDO('mysql:host='.$hostname.';dbname='.$dbname, $user, $pass);

if (!$dbh)  {  die('Could not connect: ' . mysql_error());  }else echo 'connected';echo '<br>';
if(isset($_COOKIE['username'])) 
?>  
        <div id="imagel">
        <img class="imagel" src="../images/logos/logo2.jpg" width="300" height="300" alt="studio table" />
        </div>
        <div id="textr">

        <form name="tableofevents" method="post" action="adminhome.php">
        Name of Event(Maximum of 83 characters): <input type="text" name="noe"/>
        <br>
        Event Description (Maximum of 288 characters): <input type="text" name="eventdescription"/>
        <br>
        Date of Event: <input type="text" name="date"/>
        <br>
        Ticket Price: <input type="text" name="price"/>
        <br>
        <input type="submit" name="submit" text="submit"/>
        </form>

处理页面:

<?php

$hostname = 'localhost';
$user='******';
$pass='***********';  
$dbname='sth420';
$handler = new PDO('mysql:host='.$hostname.';dbname='.$dbname,$user,$pass);

$dbh = mysql_connect ($hostname.';dbname='.$dbname, $user, $pass);

if (!$dbh)  {  die('Could not connect: ' . mysql_error());  }
else echo 'connected';echo '<br>';


if(isset($_COOKIE['username'])) 
{
    $username=$_COOKIE['username'];
    $password=$_COOKIE['password'];

    $sql='SELECT * FROM Users WHERE ID=:id';   
    $results = $handler->prepare($sql);
    $results->execute([':id' => $username]);
    $row = $results->fetch();
    if($row!=null)



    {
        $pword = $row['Password'];
        if($pword == $password)
        {
            if(isset($_POST['submit']))
            {
                $noe=$_POST['noe'];
                $ed=$_POST['eventdescription'];
                $date=$_POST['date'];
                $price=$_POST['price'];



                    $sql='INSERT INTO ismievents ( title, evtdesc, dandt, price ) VALUES(0, :noe, :eventdescription, :date, :price)';
                    mysql_error()
                    $results = $handler->prepare($sql);
                    $results->execute([':noe' => $noe, ':eventdescription' => $ed, ':date' => $date, ':price' => $price]);
                    $handler = null;
                    header('Location: events.html');


            }
        }
    }
}
if (!mysql_query($sql,$dbh))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($dbh);
require_once('adminhome.html');

?>
4

1 回答 1

3

您正在混合 PDO 和mysql_connect(). 这是无效的,因为它们是不兼容的 API。删除所有对您的 PDO 语句的引用mysql_*()并仅坚持使用。您基本上复制了每个 PDO 语句,但调用不正确,mysql_query()但您不应该有任何mysql_connect(), mysql_query(), mysql_error(), mysql_fetch_*().

请参阅有关 PDO 准备语句的手册以查看许多示例。

我在这里看到列数不匹配。您列出 4 列,但VALUES ()列表包含 5:

// Prepared statemetn looks ok...
$sql='INSERT INTO ismievents ( title, evtdesc, dandt, price ) VALUES(0, :noe, :eventdescription, :date, :price)';
// But this is meaningless here...
mysql_error()

我还注意到您正在使用 PHP 5.4 数组文字,例如:

$results->execute([':noe' => $noe, ':eventdescription' => $ed, ':date' => $date, ':price' => $price]);

希望您实际上是在 PHP 5.4 中运行此代码。

确实,您需要将此代码带回绘图板上,以清除 PDO 和mysql_*(). 之后,您将能够缩小其他问题的范围。

最后一点,将密码存储在$_COOKIE. 成功登录后,将登录状态存储在$_SESSION.

于 2013-01-09T22:55:49.280 回答