Page 1 sur 1

Probleme $_GET

Posté : 30 nov. 2013, 00:24
par florian11111111
Bonjour je suis actuellement étudiant, et je me lance dans les bases de données php my sql.

Cela fait plusieurs jours que je me casse la tête a trouver la solution, j'ai le message suivant qui apparaît:

"Notice: Undefined index: numero in C:\wamp\www\connectbdd\index.php on line 15"

si quelqu'un pourrait m'aider ça serait vraiment cool , merci d'avance

Et mon code est le suivant:

<?php


//-------------------------------------------------- En-tête JAVASCRIPT ------------------------------------------------------------
echo "<script type='text/javascript' src='jquery-1.9.1.js'></script>";
echo "<script type='text/javascript' src='moulinette.js'></script>";
//----------------------------------------------------------------------------------------------------------------------------------

$numero = $_GET["numero"]; c'est ici que j'ai l'erreur ligne 15


//echo "<h1><em>BASE DE DONNEES FILM </em>!</h1> ";

//connexion bdd ----------------------------------------------------------------------------------------------------------------------
$link = mysql_connect("localhost", "root", "");
mysql_select_db("bdd_film", $link) or die(mysql_error());



//------------------------------------------------ liste deroulante -----------------------------------------------------------

echo"SELECTIONNEZ UN DISQUE : ";
echo "<select id='idnumero' name='namenumero' size='1' onChange='idnumero()'>";

$query= "SELECT DISTINCT film.N_disque FROM film ORDER By N_disque ";

$result = mysql_query( $query, $link) or die($query . " - " . mysql_error());
while ($ligne = mysql_fetch_array($result))
{
echo "<option selected='selected' value='".$ligne['N_disque']."'>".$ligne['N_disque']."</option>";
}
echo "</select>";


//requete SQL Film ---------------------------------------------------------------------------------------------------------
echo "<table style='float:center' >";
echo '
<tr>
<th style="background:#A6ECC2">Numero du disque</th>
<th style="background:#A6ECC2">Genre</th>
<th style="background:#A6ECC2">Nom</th>
<th style="background:#A6ECC2">Realisateur</th>
<th style="background:#A6ECC2">Annee</th>
<th style="background:#A6ECC2">3D ?</th>
<th style="background:#A6ECC2">Poid</th>

</tr> ';


$query = "SELECT film.N_disque, film.Genre, film.Nom, film.Realisateur, film.Annee, film.3D, film.Poid FROM film WHERE film.N_disque='".$numero."'";


$result = mysql_query($query, $link) or die($query . " - " . mysql_error());
while ($ligne = mysql_fetch_array($result))
{
echo "
<tr>
<td>".$ligne['N_disque']."</td>
<td>".$ligne['Genre']."</td>
<td>".$ligne['Nom']."</td>
<td>".$ligne['Realisateur']."</td>
<td>".$ligne['Annee']."</td>
<td>".$ligne['3D']."</td>
<td>".$ligne['Poid']."</td>
</tr>";
}

?>
</table>




Mon fichier moulinette en javascript est le suivant:




function idnumero(){
id = $('#namenumero').val();
id = document.getElementById('namenumero').value;
location.href('index.php?numero='+id);
}

Element.update('numero');
var myAjax = new Ajax.Updater(
'numero',
'index.php',
{
method: 'get',
parameters: parametres
}
);

Re: Probleme $_GET

Posté : 30 nov. 2013, 00:30
par orenx22
regarde à la ligne 15 je suis certain que tu va trouver le problème :D

En fait, si la clé 'numero' de la variable $_GET n'est pas défini, ce qui est le cas si tu ne l'as transmets pas par une requête du type :

/localhost/monsite/index.php?numero=1

Ton système ne va pas trouver la valeur.

Une condition pour normaliser / initialiser tout ça me semble la bonne solution. Par la même occasion, il n'est pas utile de mettre en mémoire une valeur des variable d’environnement ($_GET/$_POST/$_REQUEST/$_SERVER/$_SESSION si ative).

if( !isset( $_GET['numero'] ) or !is_int( $_GET['numero'] ) )
{
    $_GET['numero'] = 0 ;
}
le ! devant les fonctions revient à == false ou 'n'est pas' dans la lecture en algorithme.

Si la clé numero de la variable $_GET n'est pas configuré ou que cette mm valeur n'est pas un entier..
tu la configure par 0.

Pour fini, je te conseil d'abandonner les fonctions mysql qui sont plus que dépassées. Utilise plutôt l'objet PDO ! C'est ultra simple a utiliser, mm pour quelqu'un qui débute. Par cette objet tu vas éviter bon nombre d'erreur, et surtout gagner en sécurité, parce qu'avec ton code actuel, tout du moins de ce que j'ai lu, il sera très facile de pirater ta base de données et de faire des injections sql sauvage. Et malheureusement tu trouveras plus des gens près a te faire chier pour rien que t'éviter la catastrophe.

Comment on utiliser l'objet PDO :

// -- INITIALISATION --
$dsn = "mysql:dbname=nom_bdd;host=127.0.0.1;port=3306" ;
// j'instancie l'objet / je créée l'objet que je stock dans la variable $database.
$database = new PDO( $dsn, 'root', null );
// !! null étant le mdp, soit 'vide' en local

// -- REQUETES --
// requête avec 1 inconnu :
$id = 1 ;
$sql = "SELECT * FROM nom_table WHERE id = ?" ;
$req = $database-> prepare( $sql );
$req-> execute( array( $id ) );
// sans inconnu : $req-> execute();
// requête avec plusieurs inconnu :
$id = 1 ;
$type = 'histoire' ;
$sql = "SELECT * FROM nom_table WHERE id = ? and type = ?" ;
$req = $database-> prepare( $sql );
$req-> execute( array( $id, $type ) );

// -- RESULTAT --
// te retourne un tableau de résultat :
$result = $req-> fetchAll( PDO::FETCH_ASSOC );
// compte le nombre de résultat obtenu :
$count = $req-> countRow();
Je t'invite à lire tout ça tranquillement. C'est pas du chinois, même si c'est de la programmation orienté objet, je trouve ce système tout aussi compréhensible pour un débutant.

http://php.net/manual/fr/book.pdo.php

ps : les echo 'plein de code html' c'est pas beau et ça serre à rien à par faire travailler ton service php pour rien ;). Afficher qu'une variable <?php echo $var ?> à l’endroit voulu est plus adapté.

Ciao

Re: Probleme $_GET

Posté : 30 nov. 2013, 11:48
par sirakawa
Remarque simple:
Quand on a une erreur sur du $_POST ou $_GET,
la première réflexion serait d'ajouter :
print "<br />";
print_r($_POST); die(); //le die() pour éviter que l'affichage soit recouvert
Si on a une erreur sur une requête mysqli:
$requete =" SELECT....";
print "<br />$requete</br>";
et tester la requete affichée avec phpmyadmin ou mysql en ligne.
Si on a une erreur sur une condition:
faire afficher les variables comparées (erreurs fréquentes quand on compare des réels entre eux...)
vérifier qu'on n'a pas mis = au lieu de ==

Si tu es étudiant, comme j'ai cru comprendre, je constate que les profs en disent toujours aussi peu sur les bases du débogage....

Re: Probleme $_GET

Posté : 30 nov. 2013, 12:45
par orenx22
Pour sirakawa
"Notice: Undefined index: numero in C:\wamp\www\connectbdd\index.php on line 15"
Traduit littéralement par :
"note : la clé 'numero' n'est pas indéfinie dans le fichier .. à la ligne 15"

Je vois pas ce qu'un professeur pourrait apprendre de plus à l’élevé à par de lui dire de bien lire les logs.

Re: Probleme $_GET

Posté : 30 nov. 2013, 16:09
par sirakawa
Il pourrait lui dire que en cas d'erreur, il faut en chercher la cause dans son code, et qu'une façon de faire à propos des erreurs $_GET et $_POST consiste à faire afficher
les $_GET par print_r($_GET); tout au début du fichier, ce qui permet de connaître les index qui sont passés, car il peut y avoir une erreur dans le formulaire qui envoie ces valeurs ou, si les index indiqués sont corrects, une modif passée inaperçue.

Il pourrait aussi lui dire que la cause de l'erreur est toujours antérieure au point du code où l'erreur est signalée.
J'ai constaté, après avoir dépanné des centaines d'étudiants en 25 ans, que les enseignants d'informatique sont en général forts sur la théorie, moins sur la pratique, et encore moins sur le débogage du genre:
if ($f == $limite ) ($f est une fonction convergente à valeurs réelles, $limite la valeur vers laquelle elle converge, réelle aussi)
où rituellement l'égalité ne se vérifie pas et où aucun sur une douzaine d'enseignants ne prévenait jamais qu'il faut tester les réeels informatiques sur un intervalle, car ils n'ont rien de la continuïté des réels mathématiques.

Re: Probleme $_GET

Posté : 01 déc. 2013, 01:02
par orenx22
Je suis d'accord avec toi que les prof sont très théorique voir métaphorique, mais les erreurs et la manière de les régler font partie je trouve de l'auto apprentissage. Et je peux vous dire que plus une personnes se cassera la tête à trouver une erreur et plus ses compétence vont augmenter.

L'exploitation de certaine fonction, comme le print_r fait partie des éléments que les débutants ne manipule pas jusqu'à temps qu'ils exploitent des tableaux importants. Le système D est roi, qui je trouve est plus formateur que d'apprendre des choses toutes fait sur lesquels bien des fois les élèves fond l'impasse.

Re: Probleme $_GET

Posté : 01 déc. 2013, 10:10
par sirakawa
C'est vrai que au " fond l'impasse" on ne trouve pas grand chose.