PHP et SQL

kyukyubi
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 10:05

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 ^^

ViPHP
ViPHP | 2577 Messages

27 déc. 2011, 10:10

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.

ViPHP
xTG
ViPHP | 7331 Messages

27 déc. 2011, 10:14

$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)."' ";

ViPHP
ViPHP | 2577 Messages

27 déc. 2011, 10:20

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

kyukyubi
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 10:21

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 ?

ViPHP
xTG
ViPHP | 7331 Messages

27 déc. 2011, 10:23

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().

kyukyubi
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 10:37

Je vois pas le problème dans mon select

ViPHP
ViPHP | 2577 Messages

27 déc. 2011, 10:41

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.

kyukyubi
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 10:50

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

kyukyubi
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 10:55

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.

ViPHP
ViPHP | 2577 Messages

27 déc. 2011, 11:25

Pour récupérer les données, faire mysql_fetch_assoc()

Eléphanteau du PHP | 13 Messages

27 déc. 2011, 11:41

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>"; }

ViPHP
xTG
ViPHP | 7331 Messages

27 déc. 2011, 12:25

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

Eléphanteau du PHP | 13 Messages

27 déc. 2011, 12:36

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 !

ViPHP
xTG
ViPHP | 7331 Messages

27 déc. 2011, 12:39

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. ;)