2012-07-15 5 views
0

После обучающую онлайн и удалось получить этот код:PHP Учебник код не работает

class RedeemAPI { 
private $db; 

// Constructor - open DB connection 
function __construct() { 
    $this->db = new mysqli('localhost', 'username', 'password', 'promos'); 
    $this->db->autocommit(FALSE); 
} 

// Destructor - close DB connection 
function __destruct() { 
    $this->db->close(); 
} 

// Main method to redeem a code 
function redeem() { 
    // Print all codes in database 
    $stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code'); 
    $stmt->execute(); 
    $stmt->bind_result($id, $code, $unlock_code, $uses_remaining); 
    while ($stmt->fetch()) { 
     echo "$code has $uses_remaining uses remaining!"; 
    } 
    $stmt->close(); 
} 
} 

Тогда прямо после этого, парень говорит, что я должен запустить страницу и посмотреть:

test has 10000 uses remaining! 

но ничего не происходит, страница просто пустая. Данные находятся в базе данных, а учетные данные на 100% правильны.

любые мысли? Спасибо.

+0

либо включить ошибки (run: 'error_reporting (-1);'), либо добавить печать, чтобы увидеть, какая строка не работает – alfasin

+0

, а ваш код включает '$ api = new RedeemAPI();' и ваш вызов '$ api-> redeem(); '? –

+0

@alfasin Новое для PHP (отсюда почему im следует за учебником) Как мне его распечатать с ошибками? – MarkP

ответ

2

Ваш код должен включать в себя: $api = new RedeemAPI(); и $api->redeem();, только потому, что учебник доза не включают, что дальше вниз доза не означает, что вы не использовать его.

Так попробуйте:

error_reporting(E_ALL); 
class RedeemAPI { 
private $db; 

// Constructor - open DB connection 
function __construct() { 
    $this->db = new mysqli('localhost', 'username', 'password', 'promos'); 
    $this->db->autocommit(FALSE); 
} 

// Destructor - close DB connection 
function __destruct() { 
    $this->db->close(); 
} 

// Main method to redeem a code 
function redeem() { 
    // Print all codes in database 
    $stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code'); 
    $stmt->execute(); 
    $stmt->bind_result($id, $code, $unlock_code, $uses_remaining); 
    while ($stmt->fetch()) { 
     echo "$code has $uses_remaining uses remaining!"; 
    } 
    $stmt->close(); 
} 
} 

$api = new RedeemAPI(); 
$api->redeem(); 
+0

, вы были первыми, кто понял, что экземпляр экземпляра не был создан, +1! – alfasin

+0

Спасибо, наконец, добрался до конца; p –

+0

Я следил за учебником и не знал достаточно, чтобы это получить. Но ребята, большое спасибо за то, что помогли мне с этим вопросом и дополнительной помощью. Действительно ценю это :) – MarkP

0

Для отладки с использованием тиражи вы можете использовать echo следующим образом:

изменение:

function redeem() { 
    // Print all codes in database 
    $stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code'); 
    $stmt->execute(); 
    $stmt->bind_result($id, $code, $unlock_code, $uses_remaining); 
    while ($stmt->fetch()) { 
     echo "$code has $uses_remaining uses remaining!"; 
    } 
    $stmt->close(); 
} 

к:

function redeem() { 
    // Print all codes in database 
    echo "1\n"; 
    $stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code'); 
    echo "2\n"; 
    $stmt->execute(); 
    echo "3\n"; 
    $stmt->bind_result($id, $code, $unlock_code, $uses_remaining); 
    echo "4\n"; 
    while ($stmt->fetch()) { 
    echo "5\n"; 
     echo "$code has $uses_remaining uses remaining!"; 
    } 
    echo "6\n"; 
    $stmt->close(); 
    echo "7\n"; 
} 

Таким образом, вы можете увидеть, на какой линии вы не.
Другой вариант заключается в использовании try и catch:

function redeem() { 
     try{ 
     // Print all codes in database 
     $stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code'); 
     $stmt->execute(); 
     $stmt->bind_result($id, $code, $unlock_code, $uses_remaining); 
     while ($stmt->fetch()) { 
      echo "$code has $uses_remaining uses remaining!"; 
     } 
     $stmt->close(); 
     } 
     catch(Exception $e) { 
      echo 'Caught exception: ', $e->getMessage(), "\n"; 
     } 
} 
+0

все еще ничего не печатает. – MarkP

+0

Как вы называете этот код? – alfasin

+0

@alfasin Я не думаю, что он .... –

0

ли вы создать экземпляр вашего класса ??

Вам необходимо создать экземпляр вашего класса, а затем вызвать функцию redeem(), чтобы получить желаемый результат.

<? 
    $someVar = new RedeemAPI(); 
    $someVar->redeem(); 
?> 
0

Там может быть много разных вещей, что здесь происходит. Сразу же после вашего открытия

<?php 

добавить

ini_set("display_errors", 1); 

видеть ошибки. См. Результат в вашем браузере, используя

http://localhost/promos 

Если код запущен на машине, вы выполняете этот учебник. Если на другом компьютере заменить «localhost» на IP-адрес удаленной машины. Из того, что я вижу в вашем коде, вы не использовали

$api = new RedeemAPI(); 
    $api->redeem(); 

Возможно, это было так просто, Если у вас есть это, и вы по-прежнему видите пустую страницу, это может быть связано с ошибкой или пропуском при настройке сервера mysql. Это была моя проблема при заполнении этого же урока. Я бы удалил таблицы базы данных и повторно добавил их, убедившись, что вы следуете инструкциям для части mysql в 't'.

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