2013-11-20 3 views
1

У меня возникла странная проблема. Я разрабатываю веб-интерфейс для базы данных MySQL и пытаюсь извлечь информацию из него с помощью PHP. Короче говоря, я могу получить информацию просто из некоторых баз данных, пока я не с другими.Информация о базе данных MySQL не отображается на странице PHP

$userList = mysql_query("SELECT * FROM myTable"); 
while ($userInfo = mysql_fetch_array($userList)) 
{ 
    echo "<p>Name = " . $userInfo["name"] . ". Password = " . $userInfo["password"] . ".</p>"; 
} 

Эта часть является просто испытанием, и она отлично работает. Я получаю имя и пароль всех в базе данных. Но когда я пытаюсь это сделать, я сталкиваюсь с ошибками. Учтите, что

while (($userInfo = mysql_fetch_array($userList)) && (!$found)) 
{ 
    echo "The current username is " . $userInfo["name"] . ". <ul>"; 
    if ($username == $userInfo["name"]) 
    { 
     $found = true; 
     if ($password == $userInfo['password']) 
     { 
      echo "The password you entered, " . $userInfo['password'] . " was correct!"; 

      //things which we do once the account is confirmed 
     } 
     else //the username is right but the password is wrong. 
     { 
      "The password didn't match, though!"; 
     } 
    } 
    else //this username isn't the right one. 
    { 
     echo "<p>$username does not match " . $userInfo['name'] . "."; 
    } 
    echo "</ul>"; 
} 

Чтобы быть конкретнее, $ USERINFO [ «имя»] и $ USERINFO [ «пароль»] символы не возвращают абсолютно ничего во втором блоке кода, в то время как в первом блоке кода они, кажется, работать просто отлично. Я не понимаю, почему существует разница между ними.

Любая помощь или совет, который я мог бы получить, будем очень благодарны.

EDIT: Для тех, кто хочет получить полный код, вот он.

<head> 
<title>My Web Interface</title> 
</head> 

<?php 
if (!($_POST["go"])) 
{ 
?><h1>Hello World!</h1> 
<form action="test.php" method="post"> 
    Username: <input type="text" name="username" /> <br /> 
Password: <input type="text" name="password" /> <br /> 
<input type="submit" name="go" /> 
</form> 
<?php 
} 
else //the user has submitted: in which case, we check if the details match any user info in the database 
{ 

$username = $_POST["username"]; 
$password = $_POST["password"]; 

//the database info variables 
$hostname = "myhostname"; 
$dbUsername = "myusername"; 
$dbPassword = "mypassword"; 

echo "<p>You entered the username and password combo of '$username' and '$password'.</p>"; 

$connect = mysql_connect($hostname, $dbUsername, $dbPassword) or die ("Unable to connect to MySQL"); 

//test for the connection's presence. Every time so far it's returned True. 
if ($connect) 
{ 
    echo "Got it!"; 
} 
else 
{ 
    echo "Don't got it!"; 
} 

//echo "<p>My username is " . $dbUsername ", my hostname is " . $hostname . " and my password is " . $dbPassword . ".</p>"; 

$selected = mysql_select_db("myDatabase",$connect) 
or die("Could not select examples"); 

$userList = mysql_query("SELECT * FROM testUsers;"); 

/**** 
* This part tests to show a connection between the user and the database. 
* It should return a list of users and the rights they have. 
*** 
*/ 
$found = false; //how we terminate the loop. 

//echo "<ul>"; 
while ($userInfo = mysql_fetch_array($userList)) 
{ 
    echo "<p>Name = " . $userInfo["name"] . ". Password = " . $userInfo["password"] . ".</p>"; 
    if ($userInfo["password"] == $password) 
    { 
     echo "<p>The passwords match and are both $password!</p>"; 
    } 
    else 
    { 
     echo "<p>$password does not match with " . $userInfo["password"] . "!</p>"; 
    } 
} 

while (($userInfo = mysql_fetch_array($userList)) && (!($found))) 
{ 
    echo "The current username is " . $userInfo["name"] . ". <ul>"; 
    if ($username == $userInfo["name"]) 
    { 
     $found = true; 
     echo "<p>We found you in the database, " . $userInfo['name'] . ". Now to test your password.</p>"; 
     if ($password == $userInfo['password']) 
     { 
      echo "<p>The password you entered, " . $userInfo['password'] . " was correct!</p>"; 
      //now show the table's contents 
      $register = mysql_query("SELECT * FROM myTable;"); 
      while ($col = mysql_fetch_array($register)) 
      { 
       echo "<li>Tag: " . $col['service_tag'] . "</li>"; 
      } 
     } 
     else //the username is right but the password is wrong. 
     { 
      echo "The password didn't match, though!"; 
     } 
    } 
    else //this username isn't the right one. 
    { 
     echo "<p>$username does not match " . $userInfo['name'] . "."; 
    } 
    echo "</ul>"; 
} 

/* 
*Test code: trying to output the testUsers info without the conditions. 
*/ 

if (!$found) 
{ 
    echo "<p>We could not find you in the database. Did you enter your username correctly?</p>"; 
} 
echo "</ul>"; 

mysql_close($connect); 
} 
?> 

EDIT # 2: Некоторые люди отмечают, что эта презентация является очень небезопасным с паролями, и я согласен - это не претендует на окончательный код из сайт вообще. Я просто подумал, что проверю соединение, когда поеду, и столкнулся с этой проблемой.

+1

Быстрое примечание: вы не эхом '' Пароль не совпал, хотя! ";', Который выдает ошибку, если это не опечатка. –

+0

Какие ошибки? .. – Mihai

+2

'echo 'Пароль, который вы ввели,". $ userInfo ['password']. «было правильно!»; «Слова не могут выразить, насколько ужасно эта идея.1) Никогда не храните пароли в виде обычного текста. 2) Никогда * не показывайте * пароли. (Примечание. Если вы выполните шаг 1, вы автоматически получите шаг 2.) Кроме того, если сбой входа в систему, просто сообщите пользователю, что логин завершился неудачно. Вы даете им слишком много информации. «Имя пользователя не совпадает», «пароль не совпадает», это слишком большая информация об ошибках. – David

ответ

1

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

$userInfo = mysql_fetch_array($userList) 

Try включить следующее заявление перед вторым блоком, чтобы переместить курсор назад к первому пункту:

mysql_data_seek($userList, 0); 

или лучше:

if (!mysql_data_seek($userList, 0)) 
{ 
    echo "You can't go back (seek): " . mysql_error() . "\n"; 
} 
else 
{ 
    // Block 2 
} 
+0

Я действительно попытался удалить первый блок вчера вечером, и это сработало! Я благодарен за этот обходной путь; это может быть удобно позже в проекте! –

0

Я думаю, что вы не показываете нам не полный код. Где-то вам нужно установить учетные данные для базы данных, это до или после того, как вы поместили значение в $ username? Возможно, вы также используете $ username для подключения к базе данных?

0

Это из-за (!($found) в вашем цикле while. конечное состояние этого должно быть истинным для того, чтобы цикл предпринимал действия, но он все время выходит из строя, потому что вы просите его не быть ложным, но это так. Поэтому он не будет работать, потому что условия не выполняются. Попробуйте удалить из него ! и проверьте его. Если вы не можете сделать это таким образом, попробуйте использовать это:

do { 
//your code here to motion 
} 
while()// your conditions 

в этом случае до тех пор, как государства истинны в while, do будет продолжать работать.

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