Erreur anodine dans un code PHP (débutant)

banban6971 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonjour,

j'essaye d'intégré un code php de création de compte à ma page internet et j'ai l'erreur suivante, j'ai lu qu'elle était anodine mais je n'y connais rien, voici l'erreur :

Notice: Undefined index: accname in D:\xampp\htdocs\index.php on line 386

Notice: Undefined index: password in D:\xampp\htdocs\index.php on line 386

Notice: Undefined index: email in D:\xampp\htdocs\index.php on line 386
Error: Duplicate entry '' for key 'idx_username'


Et voici le code php :


<?php
$host = "localhost";
$user = "root";
$pass = "root";

$con = mysql_connect($host, $user, $pass);
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("realmd", $con);

$sql="INSERT INTO account (username, sha_pass_hash, email, expansion)
VALUES
('$_POST[accname]','$_POST[password]','$_POST[email]','2')";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "Account Created";

mysql_close($con)
?>


-----------------------------------

Si quelqu'un pouvait corriger mon code ce serait vraiment gentil ... :) Bonne journée !
A voir également:

8 réponses

ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
'lut, sur la ligne suivante:
('$_POST[accname]','$_POST[password]','$_POST[email]','2')"; 

Tu as omis les guillemets autour des noms de paramètres.

Aussi, l'extension MySQL est obsolète, vieille, lente, dangereuse car plus maintenue et induisant de mauvaises pratiques comme le
die
que tu utilises, et la gestion d'erreur (
mysql_error
) est archaïque et inefficace.
Qui plus est ton code actuel est sujet aux injections SQL qui peuvent modifier ou détruire tes tables/ta base de données à la volonté de n'importe quel visiteur. Passe à mysqli ou PDO et utilises les requêtes préparées.
from human import idiocy
del idiocy
0
banban6971 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Ce que tu veux dire c'est qu'il y a un risque d'intrusion vis a vis de ce code ?

('$_POST["accname"]','$_POST["password"]','$_POST["email"]','2')";
Quand je rajoute les guillemets comme ceci cela met une autre erreur ...


Parse error: syntax error, unexpected '"', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in D:\xampp\htdocs\index.php on line 386

Mais carrément sur toute la page cette fois
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
Oups j'ai raté ce 2e détail: la concaténation de chaines de caractère se fait via l'opérateur
.
, comme ceci:
('.$_POST["accname"].','.$_POST["password"].','.$_POST["email"].','2')"; 

Et OUI il y a un risque d'intrusion, un paramètre POST façonné comme il faut permet de modifier ou détruire la table/base. Il y a un exemple (via un paramètre GET mais le principe est exactement le même) dans mon article concernant l'extension MySQL, dans son paragraphe le plus important.
Les requêtes préparées, en plus d'être plus élégantes et lisibles, réduisent ce risque à zéro si on s'en sers bien.
0
banban6971 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Okay je vais lire ça, je ne connais pas grand chose, mais j'ai une connaissance qui a fait des études dans l'informatique, je vais voir si il y a des alternatives. Et pour info j'ai toujours la même erreur même avec les points. C'est normal ?
0
Utilisateur anonyme
 
Bonjour

C'est normal que tu aies toujours l'erreur avec les points, vu que ton écriture initiale était correcte. Contrairement à ce que t'avait dit gravgun dans son premier message, il ne fallait pas ajouter d'apostrophes.
Par contre, il a parfaitement raison en ce qui concerne l'obsolescence de l'extension mysql_ et les risques associés.
L'erreur que tu avais, et que tu as toujours, vient du fait que tu traites des variables d'un formulaire qui n'est pas reçu. Soit il n'est pas reçu du tout, soit il n'utilise pas la méthode GET, soit les noms des champs sont incorrects...
Peux-tu ajouter print_($_POST); au début de ton script pour voir ce que tu reçois vraiment ?
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
Ah nan je viens de me rendre compte de ce qui allait pas ><...
Problème de guillemets simple/doubles. J'ai pas précisé.
Mea culpa.
0
Utilisateur anonyme > ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention  
 
J'ai pas précisé.
Il n'y avait rien à préciser car il n'y avait aucun problème de guillemets simples ou doubles.
Quand on met une variable tableau dans une chaîne entre guillemets doubles, il ne faut pas de guillemets simples autour de l'index.
D'ailleurs PHP ne signalait aucune erreur de syntaxe, seulement une erreur d'exécution, preuve que la syntaxe était correcte.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
banban6971 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai enlevé les guillemets et ajouté ton code au debut et ca donne :


Parse error: syntax error, unexpected '$host' (T_VARIABLE) in D:\xampp\htdocs\index.php on line 373

Pour la sécurité je vais voir ça avec mon beau frère, il travaille des sites web

merci
0
Utilisateur anonyme
 
Pardon, c'était print_r($_POST); et non print_($_POST);
Attention, si tu as enlevé les guillemets, il fallait aussi enlever les points de concaténation et revenir à ce que tu avais écrit au départ.
0
banban6971 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
et si je les laisses ?
0
banban6971 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
En enlevant les guillements, les points puis en ajoutant ton code j'obtient : Array ( )
Notice: Undefined index: accname in D:\xampp\htdocs\index.php on line 387

Notice: Undefined index: password in D:\xampp\htdocs\index.php on line 387

Notice: Undefined index: email in D:\xampp\htdocs\index.php on line 387
Error: Duplicate entry '' for key 'idx_username'
0
Utilisateur anonyme
 
Si $_POST vaut simplement un Array ( ) vide, c'est que tu ne reçois pas de formulaire par POST.
Peux-tu donner le code du formulaire ?
0
banban6971 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Je n'ai pas tout compris :

<?php
$host = "localhost";
$user = "root";
$pass = "root";

$con = mysql_connect($host, $user, $pass);
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("realmd", $con);

$sql="INSERT INTO account (username, sha_pass_hash, email, expansion)
VALUES
('$_POST[accname]','$_POST[password]','$_POST[email]','2')";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "Account Created";

mysql_close($con)
?>

La machine ne prendrais pas en compte certaine fonction ? oO
0
Utilisateur anonyme
 
Ce n'est pas un problème de machine...
Tu lui demandes d'enregistrer les valeurs de accname,password et email mais d'où viennent ces valeurs ? Tu n'as pas un formulaire où le visiteur remplit ces informations ?

[edit] J'avais oublié de préciser : le code de ta réponse précédente N'EST PAS le code du formulaire. Le formulaire est ce que le visiteur remplit et qui envoie les informations au serveur. Le code que tu donnes est celui qui traite les informations envoyées par le formulaire.
0
banban6971 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Je n'ai aucune connaissance en informatique donc je ne savais pas qu'il n'y avait pas de formulaire en fait !

J'avais un site avant et ce code marchait très bien :

--------------------------------------------
<?php
/*Config*/

$realmd = array(
'db_host'=> 'localhost', //ip of db realm
'db_username' => 'root',//realm user
'db_password' => 'root',//realm password
'db_name'=> 'realmd',//realm db name
);
q

///////////////Start script//////////////////

/*
Function name: CHECK FOR SYMBOLS
Description: return TRUE if matches. ( True = OK ) ( False = NOT OK)
  • /

function check_for_symbols($string){
$len=strlen($string);
$alowed_chars="1234567890abcdefghijklmnopqrstuvwxyzÃf¦Ãf¸ÃfÂ¥ABCDEFGHIJKLMNOPQRSTUVWXYZÃf+Ãf~Ãf...&é"'(-è_çà)=$*!ù^^"";
for($i=0;$i<$len;$i++) {
if (!strstr($alowed_chars,$string[$i]))
return TRUE;
}
return FALSE;
}
/*
Function name: OUTPUT USERNAME:PASSWORD AS SHA1 crypt
Description: obious.
  • /

function sha_password($user,$pass){
$user = strtoupper($user);
$pass = strtoupper($pass);

return SHA1($user.':'.$pass);
}

if (isset($_POST['registration']) && $_POST['registration']) {
/*Connect and Select*/
$realmd_bc_new_connect = mysql_connect($realmd['db_host'],$realmd['db_username'],$realmd['db_password']);
$selectdb = mysql_select_db($realmd['db_name'],$realmd_bc_new_connect);
if (!$realmd_bc_new_connect || !$selectdb) {
$information = array('status' => 'nok', 'message' => 'Could NOT connect to db, please check the config part of the file!');
}

/*Checks*/
$username = mysql_real_escape_string($_POST['username']);
$password = sha_password($username,$_POST['password']);

$qry_check_username = mysql_query("SELECT username FROM `account` WHERE username='$username'");

if (check_for_symbols($_POST['password']) == TRUE || check_for_symbols($username) == TRUE || mysql_num_rows($qry_check_username) != 0){
$information = array('status' => 'nok', 'message' => 'Erreur lors de la création de votre compte : utilisateur déjà existant ou username/password invalide');
}
else{
mysql_query("INSERT INTO account (username,sha_pass_hash) VALUES ('$username','$password')");// Insert into database.
$information = array('status' => 'ok', 'message' => 'Votre compte a été créé');;
}
}
?>


---------------------------------------------------------------

sauf que maintenant j'ai cette erreur :


Parse error: syntax error, unexpected 'function' (T_FUNCTION) in D:\xampp\htdocs\index.php on line 389

---------------------------------------------------------------

Tu sais d'où viens le soucis ? il y a le formulaire + le code pour la base de donnée la je me trompe ?
0
banban6971 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
je suis un boulet ! x)
0
banban6971 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
?>
<h2><span>Formulaire de création de compte</span></h2>
<?php if (isset($information) && 'nok' === $information['status']) { echo '<span style="color:red;">'.$information['message'].'</span>'; } ?>
<div class="clr"></div>
<p>En créant un compte, vous acceptez les conditions générales d'utilisation ci-dessus.</p>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
<div>
<p><strong>Identifiant       </strong>
<input type="text" name="username">
</p>

<p><strong>Mot de passe</strong>
<input type="password" name="password">
</p>
<p>
<input name="registration" type="submit" value="S'enregistrer" />
</p>

</div>
</form>
<?php } ?>


Voilà le code du formulaire, j'ai essayé de l'insérer mais j'ai l'erreur :

Parse error: syntax error, unexpected '}' in D:\xampp\htdocs\index.php on line 392

Désolé
0
Utilisateur anonyme
 
, j'ai essayé de l'insérer mais j'ai l'erreur ...
Impossible de détecter l'erreur si tu modifies le code en parallèle.
Surtout que je n'ai aucune idée d'où tu as fait ton insertion.
Et que je ne sais pas où se trouve la ligne 392.
Mais tu n'as qu'à vérifier les correspondances entre les { et les }, tu devrais bien voir où est le problème. Si tu utilises un éditeur de texte correct, il doit avoir une fonction pour t'aider à trouver ces correspondances;
0