Работая над выводом вопросов пользователей, я могу вставить значения, и это работает через администратора php, но не работает через форму на странице профиля пользователя?
Ошибка говорит,«Вызов функции-члена query () для необъекта в файле profile.php в строке 82» PHP-код в этой строке выглядит следующим образом
$query1=$db->query("SELECT id,title,question,username FROM QnA WHERE username='$dbusername'");
Остальная часть profile.php находится ниже
<?php
session_start();
$dusername=$_GET['username'];
if (isset($dusername)){
require('connect.php');
$userquery =$db->query("SELECT id,firstname,username,lastname,email FROM users WHERE username = '".$dusername."'");
while ($row =$userquery->fetch()){
$id=$row["id"];
$dbusername =$row["username"];
$dfirstname = $row["firstname"];
$demail =$row["email"];
$dlastname =$row["lastname"];
}
}
?>
<html>
<head><title><?php echo $dfirstname;?></title>
<link rel="stylesheet" href="stylesheets/profile.css" type="text/css">
</head>
<body>
<div id="container">
<?php
echo'
<div id="qform"><center>
<form action="ask.php" method="post">
<b>Title</b>
<br/>
<input type ="text" name="title"/>
<br/>
<b>Question</b>
<br/>
<textarea name="question"></textarea>
<br/>
<b>This is to make sure your not a robot 2+2=</b>
<input type="text" name="plus"/>
<br/>
<input type="submit" value="Submit"name="submit"/>
</form></center>
</div>
';
?>
<div id="questions">
<?php
$query1=$db->query("SELECT id,title,question,username FROM QnA WHERE username='$dbusername'");
//$query2=$db->query("SELECT * FROM answers");
while($asked=$query1->fetch()){
if($asked['username']==$dbusername){
echo '<div class="asked"><b>Title</b><br/><b> ',$asked['title'],'</b> <hr/><br/><b>Question</b><br/><b>',$asked['question'],'</b></div><br/><br/>';
}
else if(!$asked['username']==$dbusername){
error_reporting(E_ALL);
echo 'No questions have been asked';
}
}
?>
</div>
</div>
</center>
</body>
</html>
Форма находится в файле profile.php, действие для формы — в отдельном файле с именем ask.php, который находится ниже.
<?php
//form action below
require('profile.php');
session_start();
require('connect.php');
$plus=$_POST['plus'];
$title=$_POST['title'];
$question=$_POST['question'];
$dusername=$_SESSION['username'];
if(isset($_POST['submit'])){
if(!empty($_POST['title']) && !empty($_POST['question'])&& $plus==4){
$query="INSERT INTO `QnA` (id,title,question,username) VALUES (?,?,?,?)";
$query=$db->prepare($query);
$query->execute(array(' ',$title,$question,$dusername));
echo'succes';
header("Location: profile.php");
}
else{
error_reporting(E_ALL);
echo " Fill in all Slots or you gave the wrong answer to the security question";
}
}
?>
Приведенный ниже код вообще не возвращает True:
if(isset($_POST['username'])){
вот почему это происходит в другом заявлении.
Вы используете функцию isset для поля username, но вы должны проверить кнопку Submit. Попробуйте заменить следующие строки:
<input type="submit" value="Log In" />
в
<input type="submit" value="Log In" name="submitbtn" />
А ТАКЖЕ
if(isset($_POST['username'])){
в
if(isset($_POST['submitbtn'])){
Это должно работать тогда 🙂
У вас есть ошибка в вашем запросе добавить пространство между ANDpassword='
может быть, это должно работать
$query="SELECT * FROM users WHERE username='".$username."' AND password='".$password."' LIMIT 1" ;
отладить вашу ошибку попробуйте
$res = mysql_query($query) or die(mysql_error());
Обратите внимание, что этот запрос уязвим в SQL-инъекции, возможно, вам следует попробовать использовать mysqli или PDO в целях безопасности.
Попробуй это :
<form action="login.php" method="post" >
<table>
<tr>
<td>Username: </td><td><input type="text" name="username" /></td>
</tr>
<tr>
<td>Password: </td><td><input type="password" name="password" id ="password"/></td>
</tr>
</table>
<input type="submit" value="Log In" />
<input type="button" value="Register" onClick="location.href='register.php'" />
</form>
</body>
</html>
<?phprequire('connect.php');
session_start();
if ($_SESSION['username'])
{
header("Location: home.php");
}
else{
if(isset($_POST['username'])){
require('connect.php');//According to user's input
$username=$_POST['username'];
$password=$_POST['password'];
$query="SELECT * FROM users WHERE username='".$username."'AND password='".$password."'";
$res = mysql_query($query);
//check username and password for match
if (mysql_num_rows($res) > 0){
//Sets username to the comment session so no username has to be input$_SESSION['username']=$username;
// jumps to secure page
header ("Location: home.php");
}
Как уже упоминалось выше, вы получаете 0
значения строк, может быть пробел или что-то еще в вашем запросе, так что сделайте ниже.
повторить этот запрос
SELECT * FROM users WHERE username='".$username."' AND password='".$password."'
и выполнить этот запрос вручную в базе данных и посмотреть, что происходит с этим запросом. И исправьте ваш запрос соответственно.