PHP, получить строку из MySQL и установить переменную, чтобы показать ссылку - PullRequest
0 голосов
/ 03 февраля 2012

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

Я занимался этим абсолютно часами, и я не уверен, что еще я могу попробовать, я уверен, что я на правильном пути, но мои навыки php оставляют желать лучшего

в любом случае, вот мой код, и если кто-то может помочь, я был бы вечно рад, забыл, что я пытаюсь передать это $logOptions_account для достижения ссылки, а поле accounttype в базе данных - это тип enum, если это имеет значение

<?php
/* 
 * Date: january 20, 2012
   *------------------------------------------------------------------------------------------------*/
session_start(); // Start Session First Thing
// Force script errors and warnings to show on page in case php.ini file is set to not display them
error_reporting(E_ALL);
ini_set('display_errors', '1');
//-----------------------------------------------------------------------------------------------------------------------------------
include_once "scripts/connect_to_mysql.php"; // Connect to the database
$dyn_www = $_SERVER['HTTP_HOST']; // Dynamic www.domainName available now to you in all of your scripts that include this file
//------ CHECK IF THE USER IS LOGGED IN OR NOT AND GIVE APPROPRIATE OUTPUT -------
$logOptions = ''; // Initialize the logOptions variable that gets printed to the page
// If the session variable and cookie variable are not set this code runs
if (!isset($_SESSION['idx'])) { 
  if (!isset($_COOKIE['idCookie'])) {
     $logOptions = '<a href="//' . $dyn_www . '/register.php">Register Account</a>
 &nbsp;&nbsp; | &nbsp;&nbsp; 
 <a href="http://' . $dyn_www . '/login.php">Log In</a>';
   }
}
// If session ID is set for logged in user without cookies remember me feature set
if (isset($_SESSION['idx'])) { 

$decryptedID = base64_decode($_SESSION['idx']);
$id_array = explode("p3h9xfn8sq03hs2234", $decryptedID);
$logOptions_id = $id_array[1];
$logOptions_username = $_SESSION['username'];
$logOptions_username = substr('' . $logOptions_username . '', 0, 15); // cut user name down in length if too long

// Check if this user has any new PMs and construct which envelope to show
$sql_pm_check = mysql_query("SELECT id FROM private_messages WHERE to_id='$logOptions_id' AND opened='0' LIMIT 1");
$num_new_pm = mysql_num_rows($sql_pm_check);
if ($num_new_pm > 0) {
    $PM_envelope = '<a href="pm_inbox.php"><img src="images/pm2.gif" width="18" height="11" alt="PM" border="0"/></a>';
} else {
    $PM_envelope = '<a href="pm_inbox.php"><img src="images/pm1.gif" width="18" height="11" alt="PM" border="0"/></a>';
}
// Ready the output for this logged in user
$act = "";
$logOptions_account = $act;
$act = mysql_query("SELECT accounttype FROM memberstable WHERE accounttype='$logOptions_account' ");
if ($act == "a") {
    $logOptions_account = '<a href="fanprofile.php">';}
    else if($act == "b") {
    $logOptions_account = '<a href="artistprofile.php">';}
    else if($act == "c") {
    $logOptions_account = '<a href="bandprofile.php">';}
    else if($act == "d") {
    $logOptions_account = '<a href="businssprofile.php">';}
    else if($act == "e") {
    $logOptions_account = '<a href="venueprofile.php">';}
    else if($act == "f") {
    $logOptions_account = '<a href="serviceprofile.php">';}
    else {
    }



$logOptions = $PM_envelope . ' &nbsp; &nbsp;
<a href="http://' . $dyn_www . '">Home</a>
&nbsp;&nbsp; |&nbsp;&nbsp; 
<a href="http://' . $dyn_www . '/' . $logOptions_account . '?id=' . $logOptions_id . '">Profile</a>
&nbsp;&nbsp; |&nbsp;&nbsp;
<div class="dc">
<a href="#" onclick="return false">Account &nbsp; <img src="images/darr.gif" width="10" height="5" alt="Account Options" border="0"/></a>
 <ul>
<li><a href="http://' . $dyn_www . '/edit_profile.php">Account Options</a></li>
<li><a href="http://' . $dyn_www . '/pm_inbox.php">Inbox Messages</a></li>
<li><a href="http://' . $dyn_www . '/pm_sentbox.php">Sent Messages</a></li>
<li><a href="http://' . $dyn_www . '/logout.php">Log Out</a></li>

</ul>
</div>
';

} else if (isset($_COOKIE['idCookie'])) {// If id cookie is set, but no session ID is set yet, we set it below and update stuff

$decryptedID = base64_decode($_COOKIE['idCookie']);
$id_array = explode("nm2c0c4y3dn3727553", $decryptedID);
$userID = $id_array[1]; 
$userPass = $_COOKIE['passCookie'];
// Get their user first name to set into session var
$sql_uname = mysql_query("SELECT firstname, lastname, email, accounttype FROM memberstable WHERE id='$userID' AND password='$userPass' LIMIT 1");
$numRows = mysql_num_rows($sql_uname);
if ($numRows == 0) {
    // Kill their cookies and send them back to homepage if they have cookie set but are not a member any longer
    setcookie("idCookie", '', time()-42000, '/');
    setcookie("passCookie", '', time()-42000, '/');
    header("location: index.php"); // << makes the script send them to any page we set
    exit();
}
while($row = mysql_fetch_array($sql_uname)){ 
    $firstname = $row["firstname"];
    $surname = $row["lastname"];
    $useremail = $row["email"];
    $logOptions_account = $row["accounttype"];
}

$_SESSION['id'] = $userID; // now add the value we need to the session variable
$_SESSION['idx'] = base64_encode("g4p3h9xfn8sq03hs2234$userID");
$_SESSION['firstname'] = $firstname;
$_SESSION['surname'] = $surname;
$_SESSION['useremail'] = $useremail;
$_SESSION['userpass'] = $userPass;

$logOptions_id = $userID;
$logOptions_uname = $firstname;
$logOptions_uname = $surname;
$logOptions_uname = substr('' . $logOptions_uname . '', 0, 15); 
///////////          Update Last Login Date Field       /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
mysql_query("UPDATE memberstable SET last_log_in=now() WHERE id='$logOptions_id'"); 
// Ready the output for this logged in user
// Check if this user has any new PMs and construct which envelope to show
$sql_pm_check = mysql_query("SELECT id FROM private_messages WHERE to_id='$logOptions_id' AND opened='0' LIMIT 1");
$num_new_pm = mysql_num_rows($sql_pm_check);
if ($num_new_pm > 0) {
    $PM_envelope = '<a href="pm_inbox.php"><img src="images/pm2.gif" width="18" height="11" alt="PM" border="0"/></a>';
} else {
    $PM_envelope = '<a href="pm_inbox.php"><img src="images/pm1.gif" width="18" height="11" alt="PM" border="0"/></a>';
}
// Ready the output for this logged in user
 $act = "";
$logOptions_account = $act;
$act = mysql_query("SELECT accounttype FROM memberstable WHERE accounttype='$logOptions_account' LIMIT 1");
if ($act == 'a') {
    $logOptions_account = '<a href="fanprofile.php">';}
    else if($act == 'b') {
    $logOptions_account = '<a href="artistprofile.php">';}
    else if($act == 'c') {
    $logOptions_account = '<a href="bandprofile.php">';}
    else if($act == 'd') {
    $logOptions_account = '<a href="businssprofile.php">';}
    else if($act == 'e') {
    $logOptions_account = '<a href="venueprofile.php">';}
    else if($act == 'f') {
    $logOptions_account = '<a href="serviceprofile.php">';}
    else {
    }
 $logOptions = $PM_envelope . ' &nbsp; &nbsp;
 <!--<a href="http://' . $dyn_www . '">Home</a>
&nbsp;&nbsp; |&nbsp;&nbsp; -->
 <a href="http://' . $dyn_www . '/' . $logOptions_account . '?id=' . $logOptions_id . '">Profile</a>
&nbsp;&nbsp; |&nbsp;&nbsp;
<div class="dc">
<a href="#" onclick="return false">Account &nbsp; <img src="../images/darr.gif" width="10" height="5" alt="Account Options" border="0"/></a>
<ul>
<li><a href="http://' . $dyn_www . '/edit_profile.php">Account Options</a></li>
<li><a href="http://' . $dyn_www . '/pm_inbox.php">Inbox Messages</a></li>
<li><a href="http://' . $dyn_www . '/pm_sentbox.php">Sent Messages</a></li>
<li><a href="http://' . $dyn_www . '/logout.php">Log Out</a></li>
</ul>
</div>';
}



?>

Мне действительно жаль, если я делаю что-то не так или глупо, но сейчас я слеп от того, чтобы смотреть на это весь день, и, как я сказал, я был бы вечно рад, если кто-то может помочь

Ответы [ 4 ]

1 голос
/ 03 февраля 2012

Я бы тоже хотел вам кое-что предложить. Это примерно $act. Вы используете его как String, MySQL Data set и снова как Char. Так что если вы используете отдельные переменные для разных типов данных, здесь будет легко управлять. Конечно, вы можете сделать это с помощью PHP. Но я думаю, что мое предложение - хорошая практика.

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

$act = "";
$logOptions_account = $act;
$act = mysql_query("SELECT accounttype FROM memberstable WHERE accounttype='$logOptions_account' ");
if ($act == "a") 

Здесь я вижу пару вопросов.

$act = "";
$logOptions_account = $act;

См. $act - пустая строка. Затем вы назначаете его на $logOptions_account. Так что в конечном итоге ваш запрос будет.

SELECT accounttype FROM memberstable WHERE accounttype=''

Так что вы не получите результат. Вы должны изменить это. Я не могу предсказать, какие именно у вас значения в $logOptions_account.

Однако, если вы исправите это. Вы можете продолжить со следующего вида кода.

$act = "";
$result = mysql_query("SELECT accounttype FROM memberstable WHERE accounttype='$logOptions_account' ");
while($row = mysql_fetch_array($result))
{
    $act = $row['accounttype'];
    if ($act == "a") {
    $logOptions_account = '<a href="fanprofile.php">';}
    else if($act == "b") {
    $logOptions_account = '<a href="artistprofile.php">';}
    else if($act == "c") {
    $logOptions_account = '<a href="bandprofile.php">';}
    else if($act == "d") {
    $logOptions_account = '<a href="businssprofile.php">';}
    else if($act == "e") {
    $logOptions_account = '<a href="venueprofile.php">';}
    else if($act == "f") {
    $logOptions_account = '<a href="serviceprofile.php">';}
    else {
    }
}

Приведенный выше код является лишь примером для вашего понимания.

1 голос
/ 03 февраля 2012

mysql_query () возвращает ресурс, а не текст.

$act = mysql_query // this is not text, so never "a, b, c ..."
0 голосов
/ 03 февраля 2012

Это полная чушь:

$act = ""; // is empty
$logOptions_account = $act; // both are empty
$act = mysql_query("SELECT accounttype FROM memberstable WHERE accounttype='$logOptions_account' "); // why you query for $logOptions_account(=$act) only to get $act again?
if ($act == "a") { // it is still empty, not "a"

И, наконец, получить ряд:

0 голосов
/ 03 февраля 2012

Обычно у вас должна быть только одна строка для каждого пользователя, так что это должно быть сделано ... см. Пример, приведенный здесь:

http://de.php.net/manual/en/function.mysql-fetch-row.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...