PHP tester avant insertion dans la base

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

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.

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…

Salut
sinon tu peux faire juste un INSERT IGNORE