0

PHP を使用して、Web サイトから SQL データベースに情報を書き込もうとしています。データベースにアクセスしてログインできますが、自分の Web サイトからデータベースに何も書き込むことができません。また、接続エラーも表示されません。

フォームページ:

<?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 であるため、無効です。すべての参照を削除mysql_*()し、PDO ステートメントのみに固執します。基本的に、すべての 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 に答える