# PHP tester avant insertion dans la base

**URL:** <https://www.debian-fr.org/t/php-tester-avant-insertion-dans-la-base/72745>\
**Category:** Programmation\
**Created:** [Février 20, 2017, 10:49 UTC](https://www.debian-fr.org/t/php-tester-avant-insertion-dans-la-base/72745 "2017-02-20T10:49:46Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Lissteck](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/l/5f8ce5/32.png) [@Lissteck](https://www.debian-fr.org/u/Lissteck)\
**Post date:** [Février 20, 2017, 10:49 UTC](https://www.debian-fr.org/t/php-tester-avant-insertion-dans-la-base/72745/1 "2017-02-20T10:49:47Z")

</div>

Bonjour JE tente d’eviter des doublons , je lance cette requete, mais ca ne marche pas  
le message ci dessous si la requette est vide

Erreur SQL !  
Resource id #4

$result = mysql\_query(‘SELECT \* FROM gestech WHERE EXISTS (SELECT \* FROM gestech WHERE date= "’.$formdate2.’" && tech="’.$\_POST[‘tech\_n1’].’" ) ‘);  
$num\_rows = mysql\_num\_rows($result) or die(‘Erreur SQL !  
’.$result.’  
’.mysql\_error());;

if ($num\_rows= 0) {  
// do something  
echo’ \> ok’;  
}  
else {  
// do something else  
echo’ \> Nok’; JE VOUDRAIS UNE REDIRECTION ICI

}

Merci pour vos éclaircissements

---

<div class="post-metadata">

**Author:** ![zessirb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/e19b73/32.png) [@zessirb](https://www.debian-fr.org/u/zessirb)\
**Post date:** [Février 21, 2017, 6:30 UTC](https://www.debian-fr.org/t/php-tester-avant-insertion-dans-la-base/72745/2 "2017-02-21T18:30:10Z")

</div>

Bonjour,

Voici quelques points que je constate, en espérant que ça puisse t’aider :

- Vérifie les erreurs directement lors de l'exécution de ta requête : pour cela, déplace ton "or die( ... );" sur la même ligne que ta requête, ce qui donnerait :  
$result = mysql\_query( ... ) or die( ... );
- Ta requête SQL me paraît plus compliqué qu'elle ne devrait l'être, peux-tu l'essayer sans la partie "SELECT \* FROM gestech WHERE EXISTS" ?
- Dans ta condition "if", un simple = assigne une valeur à ta variable, alors qu'un double == est utilisé pour vérifier une condition (dans ton code tel qu'il est actuellement, la condition sera toujours considérée vraie).
- Pour information, la librairie PHP MySQL est obsolète (ce n'est pas forcément gênant en fonction de la portée de ton projet).
- Ta requête est vulnérable aux injections SQL ; si tu restes avec l'extension mysql, tu peux entourer les variables de mysql\_escape\_string() pour sécuriser tes requêtes.

---

<div class="post-metadata">

**Author:** ![harpo](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/d9b06d/32.png) [@harpo](https://www.debian-fr.org/u/harpo)\
**Post date:** [Février 22, 2017, 11:45 UTC](https://www.debian-fr.org/t/php-tester-avant-insertion-dans-la-base/72745/3 "2017-02-22T11:45:30Z")

</div>

> [@zessirb](#):
>
> Pour information, la librairie PHP MySQL est obsolète (ce n’est pas forcément gênant en fonction de la portée de ton projet).

Oui, mais comme c’est en phase de programmation, il vaudrait mieux passer tout de suite au standard de php7. En cas de passage de Jessie à Stretch (qui ne devrait pas tarder à sortir), ce sera php7 et là, php mysql n’est plus obsolète, mais n’existe plus. Il faudra donc tout ré-écrire…

---

<div class="post-metadata">

**Author:** ![demenvil](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/d2c977/32.png) [@demenvil](https://www.debian-fr.org/u/demenvil)\
**Post date:** [Juillet 6, 2017, 1:49 UTC](https://www.debian-fr.org/t/php-tester-avant-insertion-dans-la-base/72745/4 "2017-07-06T13:49:40Z")

</div>

Salut  
sinon tu peux faire juste un INSERT IGNORE
