2013-01-09 4 views
0

Я пытаюсь написать некоторую информацию в базу данных SQL с моего сайта с помощью 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'); 

?> 
+0

Почему у вас есть соединение DB на странице формы? Убедитесь, что вы включаете обработку ошибок на каждом шаге процесса (при создании экземпляра '$ handler', при подготовке инструкции, при выполнении инструкции и т. Д. И выходите из системы, чтобы вы могли точно видеть, где вы ошибаетесь. –

ответ

3

Вы смешиваете PDO и mysql_connect(). Это неверно, поскольку они несовместимы с API. Удалите все ссылки на mysql_*() и придерживайтесь только своих заявлений PDO. Вы в основном дублируете каждую инструкцию PDO с неправильным вызовом mysql_query(), но у вас не должно быть ни одного из mysql_connect(), mysql_query(), mysql_error(), mysql_fetch_*().

См. the manual on PDO prepared statements, чтобы увидеть множество примеров.

Я вижу несоответствие между столбцами здесь. Вы перечислите 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.

+0

Да , используйте либо PDO, либо mysql_ * (или mysqli- *) функции, а не как сочетание обоих. Я бы предположил, что вы используете PDO или mysqli_ *, поскольку функции mysql_ * устарели и если я был профессором преподавателя и у меня был студент что-то с помощью mysql- * Я бы в значительной степени осудил это подачу на неудачный класс. –

+0

привет спасибо за ответы, я исправляю ошибки mysql/PDO, несоответствие между столбцами и значениями таково, что первое значение - это авто увеличивая индексный столбец, мне все еще нужно добавить это? – user1964965

+0

Нет, вам не нужно включать идентификатор автоматического инкремента вообще. –

Смежные вопросы