Un objet de la classe Utilisateur n'a pas pu être converti en chaîne
Je travaille sur un logiciel de forum actuellement.
J'ai une classe Utilisateur appelé, à l'intérieur de cette classe, j'ai une méthode appelée GetUserGroup pour déterminer à quel groupe l'utilisateur est en.
Je suis en cours d'exécution de la requête et les assoc de la même manière que je fais avec tous mes autres questions, je ne suis pas sûr de ce que je fais mal, j'ai regardé sur la requête pour les erreurs de syntaxe, mais il suffit de ne pas en voir du tout.
Erreur fatale: un Objet de la classe Utilisateur n'a pas pu être converti en chaîne de C:\xampp\htdocs\forums\index.php sur la ligne 22
Voici l'intégralité de la page:
<?php
include_once('connect.php');
session_start();
if (isset($_SESSION['username'])) {
$username = $_SESSION['username'];
}
class User {
public $usergroup;
public $user;
function __construct() {
if (isset($_SESSION['username'])) {
$this->user = $_SESSION['username'];
}
}
public function GetUserGroup() {
$find_group = "SELECT group FROM users WHERE username='$this->user'";
$run_find_group = mysql_query($find_group);
$find_group_assoc = mysql_fetch_assoc($run_find_group);
$this->usergroup = $find_group_assoc['group'];
}
}
class Forum {
function __construct() {
}
public function DisplayForums() {
$find = "SELECT id,name,description FROM forums";
$run_find = mysql_query($find);
while ($is = mysql_fetch_assoc($run_find)) {
$forum_id = $is['id'];
$forum_name = $is['name'];
$forum_description = $is['description'];
echo "<div style='background:#FF6699;width:1000px;'>";
echo "Forum: <a href='topics.php?t='$forum_id'>".$forum_name."</a><br/>".$forum_description."<br/><hr>";
echo "</div>";
}
}
}
$forum = new Forum();
if (isset($_SESSION['username'])) {
$_SESSION['username'] = new User();
$_SESSION['username']->GetUserGroup();
}
?>
<html>
<head>
<title>Home</title>
</head>
<body>
<?php
if (isset($_SESSION['username'])) {
echo "Welcome, " . $username . "!";
if ($_SESSION['username']->usergroup==admin) {
echo "<span align='right'><a href='/admin/index.php'>Admin CP</a></span>";
}
$forum->DisplayForums();
} else {
$forum->DisplayForums();
echo "
<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='text' name='password' /></td>
</tr>
<tr>
<td><input type='submit' name='login_submit' value='Login' /></td>
</tr>
</table>
</form>";
}
?>
</body>
</html>
- Ce qui semble être le problème ici, monsieur l'agent?
- L'erreur n'est pas dans l'extrait de code que vous avez fournis. Je soupçonne que le plein de la sortie d'erreur vous indiquera le numéro de la ligne où le problème se produit. Merci de poster le message d'erreur complet et le code source.
- Remarque - si vous n'avez pas fait aucune validation antérieure, la requête SQL est ouverte à des attaques par Injection SQL tizag.com/mysqlTutorial/mysql-php-sql-injection.php
- J'obtiens le message d'erreur "Objet de la classe Utilisateur n'a pas pu être converti en chaîne". À la ligne $find_group = "SÉLECTIONNEZ groupe from users where username='$this->user'"; Aussi, je suis conscient qu'il est vulnérable, je viens de commencer et n'en ai pas eu l'occasion de l'ajout de protéger encore.
- apparemment, $this->l'utilisateur est un objet. var_dump à vérifier. comme une alternative, utiliser un débogueur à l'étape par le biais de votre exécution de code pour savoir où ça se passe mal. si vous voulez $this->utilisateur à un objet, ajouter un __méthode toString dire comment se comporter dans un contexte de chaîne.
- Logiciel de sécurité n'est pas une "phase" de développement.
Vous devez vous connecter pour publier un commentaire.
Votre problème est ici:
Vous êtes l'affectation d'un
User
objet de la$_SESSION['username']
. Donc, quand$_SESSION['username']->GetUserGroup()
est appelé$this->user
est un objet Utilisateur.Vous devez définir
$_SESSION['username']
pour le nom d'utilisateur, et non un objet. Ou de faire une méthode pour obtenir le nom d'utilisateur de l'objet. Vous devez ajouter ungetUsername
méthode ou quelque chose àUser
.Vous pouvez également utiliser PHP
__toString
méthode.Si vous utilisez
__toString
, puis:fonctionne.
$_SESSION['username'] = new User();
à$username = new User();
, après avoir un $nom d'utilisateur défini à l' $_SESSION?$_SESSION['username']
est unUser
objet, pas une chaîne de caractères. Donc, quand vous ne$this->user = $_SESSION['username'];
de la configuration de$this->user
à un objet, pas une chaîne de caractères. Vous pouvez faire$_SESSION['username'] = new User();
, assurez-vous de savoir que ce n'est pas une chaîne. Vous avez besoin de faire quelque chose comme$this->user = $_SESSION['username']->getUsername()
, ou utiliser le__toString()
méthode.getUsername
, vous devriez mettre un moyen d'obtenir un nom d'utilisateur. Vous avez unUser
objet, comment savez-vous ce que l'utilisateur qu'il est?Problèmes de sécurité et le manque de cohésion de côté: l'affectation d'un
new User()
à$_SESSION['username']
dans votre exemple, c'est ce que$this->user
est.Il semble que vous utilisez
$_SESSION['username']
pour la chaîne du nom d'utilisateur et leUser
objet. Magasin soit seulement l'un d'eux, ou de les stocker séparément (par exemple, comme$_SESSION['username']
et$_SESSION['user']
).Modifier cette ligne: