Page 1 sur 2

PHP et SQL

Posté : 27 déc. 2011, 10:05
par kyukyubi
Bonjour,
je dois créer un site internet qui gère un parc informatique et entre de nombreuses fonctionnalités je dois faire une page qui permette à un utilisateur de faire une demande de renouvellement si son ordinateur est trop ancien, j'ai donc une table Ordinateur qui contient le nom de l'ordi et sa date d'obsolescence (entre autres).
Voici donc le code que j'ai écris mais le programme ne rentre pas dans la bouche :

Code : Tout sélectionner

<?php $db_conn = mysql_connect("localhost","root","") or die (mysql_error()); mysql_select_db("lif4",$db_conn) or die (mysql_error()); ?> <html> <head> <title>Demande Renouvellement</title> </head> <body> <h2><center>Demande de Renouvellement d'un Ordinateur</center></h2> <br><h3><center> Veuillez insérer le nom de l'ordinateur à renouveler </center></h3> <br><form method="POST" action="DemandeRenouvellement.php">> <br><center>Nom Ordinateur <input TYPE="text" NAME="Ordinateur" ></center> <br><center><input type="submit" nom ="Renouvo" value="Envoyer"></center> </form> <?php if(!empty($_POST['Renouvo']) && !empty($_POST['Ordinateur'])) { $nom=$_POST['Ordinateur']; $requete= " SELECT nom FROM ordinateur Where obsolescence < curdate() AND $nom = nom "; $resultat = mysql_query($requete) or die(mysql_error()); if($resultat != NULL){ $requete= "UPDATE ordinateur SET etat='obsolete' Where nom = '".$nom."' "; $resultat = mysql_query($requete) or die(mysql_error()); echo "Changement effectué"; } else { echo "Cet Ordinateur n'est pas obsolète"; } } ?> </body> </html>
Merci de votre indulgence je suis débutant ^^

Re: PHP et SQL

Posté : 27 déc. 2011, 10:10
par Mazarini
L'erreur est la : nom ="Renouvo"

Edit : A priori on traite l'action avant l'affichage. Ca permet entre autre de mettre un message et de réinitialiser les variables à saisir.

Re: PHP et SQL

Posté : 27 déc. 2011, 10:14
par xTG
$resultat sera toujours différent de null, car cela n'est pas dans les retours possibles de la fonction. :)
Il serait plus judicieux aussi de vérifier le nombre de retour du SELECT, car la requête renvoie toujours une ressource même s'il n'y a aucun résultat.
De plus pour traiter les noms d'ordinateurs pouvant faire planter la requête :
if($resultat != false && mysql_num_rows() == 1){
      $requete= "UPDATE ordinateur SET etat='obsolete' Where nom = '".mysql_real_escape_string($nom)."' ";

Re: PHP et SQL

Posté : 27 déc. 2011, 10:20
par Mazarini
Il est également possible de faire directement la requete de mise à jour avec la condition supplémentaire "obsolescence < curdate()" et de controler le nombre de lignes modifiés (0 ou 1) avec mysql_affected_rows()
cf : http://php.net/manual/fr/function.mysql ... d-rows.php

Re: PHP et SQL

Posté : 27 déc. 2011, 10:21
par kyukyubi
Merci à tous les deux pour l'aide, j'ai fait les changements que vous m'avez indiqué et maintenant quand je rentre un nom d'ordinateur (ici Tosh1) ceci s'affiche :
Unknown column 'Tosh1' in 'where clause'.
Vous savez pourquoi ?

Re: PHP et SQL

Posté : 27 déc. 2011, 10:23
par xTG
Dans ton select le nom de la colonne et sa valeur son inversé.
Et il faut aussi ici protéger la variable avec mysql_real_escape_string().

Re: PHP et SQL

Posté : 27 déc. 2011, 10:37
par kyukyubi
Je vois pas le problème dans mon select

Re: PHP et SQL

Posté : 27 déc. 2011, 10:41
par Mazarini
Dans le die(), affiche la requete :
$resultat = mysql_query($requete) or die(mysql_error().'<br>'.$requete);

Ca te permettra peut être de voir ce qui ne va pas. A priori, il manque des quotes autour du nom de l'ordinateur d'après le message, mais pas d'après le code PHP.

Edit : l'erreur est la : AND $nom = nom "; Il faut metre des quotes autour de $nom.

Re: PHP et SQL

Posté : 27 déc. 2011, 10:50
par kyukyubi
C'est bon mon programme marche,
j'ai mis :
$requete= "
SELECT nom
FROM ordinateur
Where obsolescence < curdate()
AND '".$nom."' = nom ";

et j'ai mis dans le if : if($resultat != false && mysql_num_rows($resultat) == 1).

Merci pour l'aide

Re: PHP et SQL

Posté : 27 déc. 2011, 10:55
par kyukyubi
Une dernière question,
comment on affiche le résultat d'une requête SQL ?
Parce que je dois montrer ensuite le nombre de jour qu'il reste, j'arrive à faire la requête mais je ne sais pas comment afficher le résultat.

Re: PHP et SQL

Posté : 27 déc. 2011, 11:25
par Mazarini
Pour récupérer les données, faire mysql_fetch_assoc()

Re: PHP et SQL

Posté : 27 déc. 2011, 11:41
par hazaki
Ok, j'ai réussi à afficher le résultat mais au lieu d'afficher 1458 (résultat obtenu dans phpmyadmin) il affiche 14581.
Voici le code du else :

Code : Tout sélectionner

else { echo "Cet Ordinateur n'est pas obsolète"; $requete =" SELECT Datediff(obsolescence,Curdate()) As Temps FROM ordinateur WHERE nom = '".$nom."' "; $resultat = mysql_query($requete) or die(mysql_error()); print "<ul>\n"; while($nuplet = mysql_fetch_assoc($resultat)){ print "<li>" .$nuplet['Temps']. print "</li>"; } print "</ul>"; }

Re: PHP et SQL

Posté : 27 déc. 2011, 12:25
par xTG
Tu prends une différence de temps... Si tu n'as pas exécuté les requêtes (script et phpmyadmin) en même temps c'est un peu logique de ne pas avoir le même écart de temps non ? :D

Re: PHP et SQL

Posté : 27 déc. 2011, 12:36
par hazaki
Oui mais c'est une différence de jour !
Et en fait quand je le fais sur phpmyadmin c'est le résultat attendu mais sur ma page ça me fout un '1' derrière le chiffre attendu, et je sais pas d'où vient ce 1 !

Re: PHP et SQL

Posté : 27 déc. 2011, 12:39
par xTG
Ah je crois savoir...
print "<li>"  .$nuplet['Temps'].
print "</li>";
A la fin de la variable tu as mis une concaténation (le point).
Donc il concatène avec le retour de la fonction print qui doit renvoyer true en cas d'affichage réussi. ;)