des champs vides

Eléphant du PHP | 187 Messages

04 nov. 2011, 14:26

Bonjour,
je sais pas pourquoi ma requête ça marche pas,si quelqu'un peut en jeter un coup d’œil sera très gentil :)
Ps:il me retourne que le premier champ :Num Affectation,le reste vide
<?php
$id_aff=0;
if(isset($_GET['id_aff']) && !empty($_GET['id_aff']))
{
 $id_aff=$_GET['id_aff'];
}
$sql='select  * from affectation where id_aff=".$id_aff."  ';
$req=mysql_query($sql) or die(mysql_error());;	
$data=mysql_fetch_assoc($req);
//echo $sql;

?>				
<div align="center">
  <table width="375">
    <form name="motif_aff" method="post" action="?do=db_aff_modif&id=22&id_aff=<? echo $id_aff ?>" onsubmit="return control_saisie();">   
        <tr>
        <td align="left">Num Affectation</td>
        <td align="left"><input type="text" name="id_aff" size="25"  value="<? echo $id_aff ?>"/></td>
      </tr>
      <tr>
        <td align="left">liste</td>
        <td align="left"><input type="text" name="liste" size="25" value="<? echo $data['liste'] ?>"/></td>
      </tr>
     <tr>
        <td colspan="2"><div align="center">
            <input type="submit" name="modifier" value="Modifier" />
        </div></td>
      </tr>
    </form>
  </table>
</div>

ViPHP
ViPHP | 2577 Messages

04 nov. 2011, 14:48

$sql='select  * from affectation where id_aff=".$id_aff."  ';
à remplacer par :
$sql='select  * from affectation where id_aff=\''.$id_aff'.''\';
En suposant que $id_aff est une chaine de caractère.

Mammouth du PHP | 19672 Messages

04 nov. 2011, 14:55

Observe attentivement comment tu as utilisé les quotes/guillemets pour encadrer les composants de ta requête SQL : si tu décommentes la ligne echo $sql, au lieu de voir la valeur de ta variable $id_aff, tu dois voir directement le nom de la variable.

Donc... ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 187 Messages

04 nov. 2011, 15:01

merci Mazarini pour ta réponse mais ça pas marché :
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in motif_aff.php on line 11

ViPHP
ViPHP | 2291 Messages

04 nov. 2011, 15:13

merci Mazarini pour ta réponse
Et pour le Mammouth ??

il a dit la même chose.....
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 2577 Messages

04 nov. 2011, 15:15

J'ai laissé une quote derrière la variable.

Mammouth du PHP | 19672 Messages

04 nov. 2011, 15:50

Mouais, collections de mauvaises habitudes qui aboutissent toujours à ce genre de questionnement existentiel un peu stérile et surtout qui font perdre un temps considérable.

Reprenons à la base voulez-vous ? Partons de la requête SQL de départ et supposant que l'identifiant recherché soit par exemple 12. La requête sera donc :
SELECT  * FROM affectation WHERE id_aff = 12
Bien, maintenant, si on veut affecter cette requête comme valeur d'une variable, on va encadrer le requête comme on ferait de n'importe quelle chaine de caractère :
$sql = "SELECT  * FROM affectation WHERE id_aff = 12";
Notez au passage que j'ai encadré la chaine de caractère de guillemets et non d'apostrophes.
Remplaçons maintenant notre valeur « 12 » écrite en dur par une variable PHP. Les mauvaises habitudes feront écrire ceci :
$sql = "SELECT  * FROM affectation WHERE id_aff = $id_aff";
Maintenant la bonne pratique : Nous avons une chaine de caractère, elle n'est pas interprétée par PHP, mais s'il y a une variable PHP et que la chaine est encadrée de guillemets et non d'apostrophes, une variable sera correctement interprétée. Prenez l'habitude systématique de bien séparer le PHP de ce qui n'en est pas, donc :
$sql = "SELECT  * FROM affectation WHERE id_aff = ". $id_aff;
Petit complément. Si la valeur de notre identifiant était une chaine de caractère et non un entier, par exemple « douze », alors il faudrait écrire la requête SQL :
SELECT  * FROM affectation WHERE id_aff = 'douze'
Ce qui donnerait en PHP :
$sql = "SELECT  * FROM affectation WHERE id_aff = 'douze'";
Notez que comme j'ai encadré la chaine de caractère de guillemets et dans la requête SQL la valeur de l'identifiant à tester d'apostrophes, il n'y a pas de conflit.

Remplaçons enfin la valeur « douze » en dur par une variable :
$sql = "SELECT  * FROM affectation WHERE id_aff = '". $id_aff ."'";
Voilà, là c'est propre, la coloration syntaxique des éditeurs ne se mélange pas les crayons et il n'y aura pas d'erreur à l'exécution.

On prend de bonnes habitudes et on se discipline ! Je repasse tout à l'heure pour ramasser les copies :mrgreen:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
xTG
ViPHP | 7331 Messages

04 nov. 2011, 16:22

J'espère que le professeur a protégé la variable avant de l'utiliser. =P~

Eléphant du PHP | 187 Messages

04 nov. 2011, 16:26

merci Mazarini pour ta réponse
Et pour le Mammouth ??

il a dit la même chose.....
Désolé j'avais un problème de cnx donc c’était pas actualisé le 2ème post ;)

Alors Boss Cyrano voilà ma copie sans faute 20/20 :D ..merci bien surtout pour l'explication j'ai bien aimé.et ça marche Merci à vous tous.
@xTG nouveau teste ça ? #-o

Mammouth du PHP | 19672 Messages

04 nov. 2011, 16:28

J'espère que le professeur a protégé la variable avant de l'utiliser. =P~
Pour ce qui me concerne, j'ai résolu ça en ne faisant plus que des requêtes préparées avec PDO, ça limite considérablement les risques même s'il est vrai qu'il traine encore de petits cas où il serait possible de pirater le système, il y a eu une publication récemment sur ce point.

Mais bon, ce n'était pas le sujet, le professeur sermonnait de la graine de délinquant du PHP/SQL :mrgreen:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: