Форма входа в PHP с использованием DashDB

Я пытаюсь создать форму входа с помощью PHP с сервисом DashDB от Bluemix, я действительно не знаю, что не так с этим кодом, и я был бы очень признателен за вашу помощь! Мой код состоит из пяти частей: ConexionDB.php, checklogin.php, login_success.php, logout.php и main_login.php.

База данных DashDB:

CREATE TABLE MEMBERS (
  ID         INT NOT NULL,
  USERNAME     VARCHAR(65) NOT NULL DEFAULT,
  PASSWORD       VARCHAR(65) NOT NULL DEFAULT,
  PRIMARY KEY (ID)
 );

ConexionDB.php

<?php
// Parse VCAP
if( getenv("VCAP_SERVICES") ) {
    $json = getenv("VCAP_SERVICES");
}
// No DB credentials
else {
    throw new Exception("No Database Information Available.", 1);
}

// Decode JSON and gather DB Info
$services_json = json_decode($json,true);
$bludb_config = $services_json["dashDB"][0]["credentials"];

// Create DB connect string
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=".
   $bludb_config["db"].
   ";HOSTNAME=".
   $bludb_config["host"].
   ";PORT=".
   $bludb_config["port"].
   ";PROTOCOL=TCPIP;UID=".
   $bludb_config["username"].
   ";PWD=".
   $bludb_config["password"].
   ";";

?>

main_login.php

<!DOCTYPE HTML>

<html>
    <head>
        <title>Application Name</title>
    </head>
    <body>

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form name="form1" method="post" action="checklogin.php">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Member Login </strong></td>
</tr>
<tr>
<td width="78">Username</td>
<td width="6">:</td>
<td width="294"><input name="myusername" type="text" id="myusername"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="mypassword" type="text" id="mypassword"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</form>
</tr>
</table>

    </body>
</html>

checklogin.php

<?php

//Include DB conexion
require('includes/ConexionDB.php');

$tbl_name="MEMBERS"; // Table name

// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// Connect to BLUDB
$conn = db2_connect($conn_string, '', '');
if ($conn) {

    // Prepare, execute SQL and iterate through resultset
    $sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";

    $stmt = db2_prepare($conn, $sql);
    $result = db2_execute($stmt);

//$result=db2_query($sql);

?>

<?php

// DB2_num_row is counting table row
$count=db2_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"

session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}

?>


<?php
    db2_close($conn);
}
?>

успешный_вход

// Check if session is not registered, redirect back to main page.
// Put this code in first line of web page.
<?php
session_start();
if(!session_is_registered(myusername)){
header("location:main_login.php");
}
?>

<html>
<body>
Login Successful
</body>
</html>

выйти

// Put this code in first line of web page.
<?php
session_start();
session_destroy();
?>

person Randall Núñez Aguilar    schedule 14.09.2015    source источник
comment
Было бы полезно, если бы вы предоставили дополнительные сведения о том, что происходит не так.   -  person wwkudu    schedule 14.09.2015
comment
вашего вопроса недостаточно, добавьте свою ошибку, если таковая имеется, или какую часть, если код не работает, как вы понимаете.   -  person Ashish Ranade    schedule 14.09.2015
comment
Как называется схема таблицы MEMBERS? Вы должны использовать SCHEMA.TABLENAME в своем коде, если это возможно.   -  person data_henrik    schedule 14.09.2015
comment
Спасибо за ваши ответы, проблема в том, что когда я нажимаю на вход, меня перенаправляют на страницу checklogin.php и просто показывает пустую страницу, поэтому я думаю, что код checklogin.pho не проверяет базу данных правильно, он просто не Делать что-нибудь. Имя схемы будет DASH103758.MEMBERS, я протестировал его таким образом в коде, но получил тот же результат.   -  person Randall Núñez Aguilar    schedule 14.09.2015


Ответы (3)


Вам нужно использовать альтернативный пакет сборки Cloud Foundry, содержащий клиент db2.

Если вы еще этого не сделали, загрузите инструмент командной строки Cloud Foundry, а также начальный код вашего PHP-приложения (вы можете загрузить их по ссылке «Начать кодирование» в правой части окна приложения в пользовательском интерфейсе Bluemix).

Запустите «cf логин».

Выполните следующую команду, чтобы отправить приложение с пакетом сборки php с db2:

cf push <app-name> -b https://github.com/ibmdb/db2heroku-buildpack-php

После перезапуска приложения протестируйте его еще раз.

Вы можете найти более подробную информацию здесь:

http://bit.ly/1UROtMO

person Alex da Silva    schedule 15.09.2015

есть некоторые проблемы в вашем коде и сборке :)

1) изменить

$tbl_name="ЧЛЕНЫ";

с

$tbl_name="СХЕМА.ЧЛЕНЫ";

где «SCHEMA» в вашем случае — «DASH103758» (как предложено data_henrik)


2) вам нужно нажать, используя пользовательский пакет сборки, потому что вы хотите использовать db2client (как предлагает adasilva). Командная строка CF:

cf login -u ваше имя пользователя -o ваша организация -s ваше пространство

cf push YOUAPPNAME -b https://github.com/ibmdb/db2heroku-buildpack-php -p YOURAPP_LOCAL_PATH


3) функция db2_num_rows( .. ); не принимает логическое значение. Вы передаете $result, который является логическим значением. db2_execute фактически возвращает логическое значение (http://php.net/manual/en/function.db2-execute.php).

Итак, я предлагаю изменить строку запроса в 'checklogin.php':

$sql="SELECT count(*) FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";

и такой чек:

// DB2_num_row считает строку таблицы
//$count=db2_num_rows($result);

// Если результат соответствует $myusername и $mypassword, строка таблицы должна быть 1 строкой

$количество = -1;
if ($result) {
$rowcount = db2_fetch_array($stmt);
$count = $rowcount[0];
}

если($count==1){
.... ...


Надеюсь, это может быть полезно


С уважением

person Crescenzo Migliaccio    schedule 15.09.2015

Пожалуйста, опишите вашу ошибку. Вы можете получить свои журналы, используя

cf logs [название вашего приложения] (добавьте --recent для получения дампа последних)

person v.bontempi    schedule 14.09.2015
comment
Спасибо за ваши ответы, проблема в том, что когда я нажимаю на вход, меня перенаправляют на страницу checklogin.php и просто показывает пустую страницу, поэтому я думаю, что код checklogin.pho не проверяет базу данных правильно, он просто не Делать что-нибудь. Имя схемы будет DASH103758.MEMBERS, я протестировал его таким образом в коде, но получил тот же результат. - person Randall Núñez Aguilar; 14.09.2015
comment
Если вы получаете пустую страницу, скорее всего, вы получаете ошибку в своем коде. Проверьте журналы приложений, как описано выше. - person v.bontempi; 14.09.2015