[RESOLU] Problème: Notice: Undefined offset: 0

Petit nouveau ! | 4 Messages

21 mai 2014, 11:53

Bonjours a tous!
Je vous expose mon problème:
J'ai fait un script de connection qui permet d'accèder à un formulaire mais ce script m'affiche "compte non reconnu" et cette erreur:
Notice: Undefined offset: 0 in C:\Program Files\EasyPHP-DevServer-14.1VC9\data\localweb\Projet_Stage\index.php on line 15
Notice: Undefined offset: 0 in C:\Program Files\EasyPHP-DevServer-14.1VC9\data\localweb\Projet_Stage\index.php on line 22
J'ai chercher pendant 2 jours mais là je vois plus de solution.

Voici le script:
<?php
require('connexion.php');

if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion')
{
	if((isset($_POST['nom_utilisateur']) && !empty($_POST['nom_utilisateur'])) && (isset($_POST['mot_de_passe']) && !empty($_POST['mot_de_passe'])))
	{
		$req = $bdd->prepare('SELECT count(*) FROM utilisateur WHERE nom_utilisateur = :nom_utilisateur AND mot_de_passe = :mot_de_passe ');
		$req -> bindParam( 'nom_utilisateur',$_POST['nom_utilisateur'], PDO::PARAM_STR);
		$req -> bindParam( 'mot_de_passe',$_POST['mot_de_passe'], PDO::PARAM_STR);
		$row = $req->fetchAll();
		print_r($row);
		unset($req);
		$bdd= NULL;
			if ($row[0] == 1)
			{
				session_start();
				$_SESSION['nom_utilisateur']=$_POST['nom_utilisateur'];
				header('formulaire_quest.php');
				exit();
			}
				elseif ($row[0] == 0)
				{
					$erreur = 'Compte non reconnu.';
				}
						else
						{
							$erreur = 'Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
						}
	}
	
	else
	{
		$erreur = 'Au moins un des champs est vide.';
	}
}
?>



<!doctype html>
<html>
	<div class="ensemble"> 
	<head>
		<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
		<title>Aprentissage du SelfService</title>
		<link rel="stylesheet" href="styles.css">
	</head>
	<body>
		<form method="POST" action="index.php">
			Nom Utilisateur: <input type="text" name="nom_utilisateur" value="<?php if (isset($_POST['nom_utilisateur'])) echo (trim($_POST['nom_utilisateur'])); ?>"/> <br/><br/>
			Mot de Passe: <input type="password" name="mot_de_passe" value="<?php if (isset($_POST['mot_de_passe'])) echo (trim($_POST['mot_de_passe'])); ?>"/> 
			<input type="submit" name="connexion" value="Connexion" />
		</form>
		<?php
		if (isset($erreur)) echo '<br /><br />',$erreur;
		?>
	</body>
	</div>
</html>
Le print_r m'affiche Array(), j'ai peut-être un problème dans bindParam, je sais plus quoi faire j'ai tout tout essayé.
Merci d'avance pour vos réponse!

Eléphant du PHP | 422 Messages

21 mai 2014, 13:33

hello

$row[0] existe pas

fait un print_r($row); si il est vide tu as un problème avant.
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

ViPHP
xTG
ViPHP | 7331 Messages

21 mai 2014, 13:34

C'est bizarre que cela te retourne un array vide... Si la requête ne passe pas cela devrait te retourner false et non un array vide.
Affiches tes valeurs $_POST et exécutes la requête dans phpmyadmin pour voir ce qu'elle retourne.

Eléphant du PHP | 422 Messages

21 mai 2014, 13:36

hello

la requête est peut etre bonne mais ne retourne rien :)
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Petit nouveau ! | 4 Messages

21 mai 2014, 13:46

J'ai effectuer la requête dans phpMyadmin est le résultat est bien 1 si les identifiants sont correcte et 0 quand ils ne le sont pas. Les $_POST transmettent bien les valeurs de mes input. J'avais déja fais les test. Là c'est un phénomène paranormal xp
Merci pour vos réponse aussi rapide ;)

Eléphant du PHP | 422 Messages

21 mai 2014, 13:55

hello

fait un print_r($row);

stp
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Petit nouveau ! | 4 Messages

21 mai 2014, 14:03

hello

fait un print_r($row);

stp
Ca me donne un Array() vide alors et si je met un execute() à la place de fetchAll() cela me met 1 du coup c'est comme FALSE. Ducoup sa vient d'avant mais où...

Eléphant du PHP | 422 Messages

21 mai 2014, 14:14

hello

la solution est ici http://www.php.net/manual/fr/pdostatement.fetchall.php

$sth->execute();
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Petit nouveau ! | 4 Messages

21 mai 2014, 14:49

hello

la solution est ici http://www.php.net/manual/fr/pdostatement.fetchall.php

$sth->execute();
Merci!! Je sens que je tient le bon bout!! ;) J'obtient Array ( [0] => Array ( [count(*)] => 1 [0] => 1 ) ) quand je fais print_r($row) avec les bon identifiants et Array ( [0] => Array ( [count(*)] => 0 [0] => 0 ) ) avec de mauvais identifiants.

Du coup j'ai changer cette partie:
$req = $bdd->prepare('SELECT count(*) FROM utilisateur WHERE nom_utilisateur = :nom_utilisateur AND mot_de_passe = :mot_de_passe ');
$req -> bindParam('nom_utilisateur',$_POST['nom_utilisateur'], PDO::PARAM_STR);
$req -> bindParam('mot_de_passe',$_POST['mot_de_passe'], PDO::PARAM_STR);
$req->execute();
$row = $req->fetchAll();
unset($req);
$bdd= NULL;
Ensuite j'ai remplacé fetchAll() par fetch(PDO::FETCH_NUM) mais j'obtient une page blanc.

Edit: Et si je refais un print_r($row) j'obtient: Array ( [0] => 1 ) donc se que je voulais mais tjs ma page blanche

Edit2: La blanche était du au header() car j'avais oublié d'écrire Location. Je suis tête en l'air. ET ENCORE MERCI!

sara belkasmy
Invité n'ayant pas de compte PHPfrance

08 avr. 2016, 15:11

bonjour moi aussi j'ai le meme probleme tjrs Problème: Notice: Undefined offset: 0 SVP aider moi SVP
<?php
$panier=$_SESSION['panier'];
?>

<table width="50%">
<tr bgcolor="#FF00BF">
<th> REFERENCE </th> <th> DESIGNATION </th> <th> PRIX </th> <th> QUANTITE </th>
</tr>
<?php
$total=0;
for($i=0;$i<count($panier);$i++){
$total=$total+$panier[$i]['quantite']*$panier[$i]['prix'];
?>

<tr bgcolor="#00FF00">
<td> <?php echo($panier[$i]['ref'])?></td>
<td> <?php echo($panier[$i]['designation'])?></td>
<td> <?php echo($panier[$i]['prix'])?></td>
<td> <?php echo($panier[$i]['quantite'])?></td>
<form action="suppDuPanier.php?index=<?php echo($i)?>" method="post">
<td><input type="image" src="suppanier.png" value="submit"/></td>
</form>
</tr>

<?php } ?>
<tr bgcolor="#FF00BF">
<td colspan="3"><b>TOTAL:</td>
<td>
<b><?php echo($total); ?></b>
</td>
</tr>
</table>
<input type="button" value="commander" onclick="document.location='commander.php'"/>

Mammouth du PHP | 1967 Messages

08 avr. 2016, 16:08

A priori ta session est vide et donc ton panier aussi.

Essaye un var_dump($panier);
juste en dessous de ton
$panier=$_SESSION['panier'];

Un session_start(); en tout début de code peut aussi faire des miracles. car si tu n'ouvre pas ta session, impossible d'y récupérer des données
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube