le problème est dû :
- au fait que tu n'utilise pas la concaténation
- que tu n'as pas compris l'utilisation des variables

ceci
<php
$requette1 = mysql_query("SELECT titre FROM top_ip WHERE info LIKE '$info' AND titre LIKE '$titre'");
mysql_real_escape_string($titre);
est inutile parce que tu ne récupère pas le retour de mysql_real_escape_string et surtout que tu le fait après exécution de la requête.
l’exécution d'un script est séquentielle. c'est à dire qu'elle s'effectue ligne après ligne (seule sont omit les commentaires les lignes dansu n if / else qui ne correpsondent pas à la condition bien sur).
Mais le point important c'est que l'on ne revient pas en arrière.
Donc ici le mysql_query est executé donc l'échappement du titre est inutile.
pour la
concaténation cela permet d'avoir un code plus lisible, d'éviter des source d'erreur (le parseur de chaine ne sais pas toujours ce qu'il doit utiliser comme variable, sauf si tu utilise les {}) et par principe il y a de grandes chances que cela soit plus rapide (pas d'analyse de la chaîne à faire).
Tu ne peux pas utiliser dans fonction sans concaténation.
Dernière chose, même si l'utilisation du passage par référence est généralisé cela ne veux pas dire que c'est toujours le cas, ce qui fait qu'ici la valeur de $titre ne change pas.
la requête correcte est
<php
$sql = 'SELECT titre FROM top_ip WHERE info = \'.mysql_real_escape_string($info).'\' AND titre =\''.mysql_real_escape_string($titre).'\'';
$requette1 = mysql_query($sql);
Les like sont inutiles vu que tu n'utilise pas de joker (%) le égale est suffisant et surtout (dans ce cas) plus performant.
pour répondre à ta question sur mysqli, effectivement cela peux résoudre ton problème car la plus part du temps présenté avec les requêtes préparées (utilisées à tors et à travers) qui s'occupent de réaliser l'échappement des données pour toi (avec les bind*).
Ceci dit il est préférables de savoir le faire toi même histoire de comprendre ce que tu faite.
j'ai utilisé une variable pour la requête SQL simplement parce que cela permet de la réutiliser pour debuguer (avec xdebug par exemple) et / l'afficher dans un quelconque message d'erreur voir un loguer).
J'ajouterais au fait que le driver mysql n'est plus supporté, qu'il est prévu pour être supprimé dans une future version (ce n'est pas pour demain mais autant préparer sont code à l'avenir c'est pas trop complexe et te permettra de ne pas devoir le faire au dernier moment
du coup ton code deviendrait
<?php
mysql_connect('host', 'user', 'password');
mysql_selectdb('le nome la base');
$info = getenv("REMOTE_ADDR") . " " . date("j/m/Y") . " " . date("H");
$sql = 'SELECT count(*) as nb FROM top_ip WHERE info = \'' . mysql_real_escape_string($info) . '\' AND titre = \'' . mysql_real_escape_string($titre) . '\'';
$req = mysql_query($sql);
if ($req === false) {
echo 'Erreur SQL : ' . mysql_error() . '<br />Avec la requête : ' . htmlentities($sql);
} else {
$data = mysql_fetch_assoc($req);
if ($data['nb'] != 0) {
echo 'existe deja dans la table';
} else {
echo 'existe pas dans la table';
}
mysql_free_result($req);
}
mysql_close();
// version mysqli
$connexion = mysqli_connect('host', 'user', 'password', 'nom de la base', 3306);
$info = getenv("REMOTE_ADDR") . " " . date("j/m/Y") . " " . date("H");
$sql = 'SELECT count(*) as nb FROM top_ip WHERE info = \'' . mysql_real_escape_string($info) . '\' AND titre = \'' . mysql_real_escape_string($titre) . '\'';
$req = mysqli_query($connexion, $sql);
if ($req === false) {
echo 'Erreur SQL : ' . mysqli_error($connexion) . '<br />Avec la requête : ' . htmlentities($sql);
} else {
$data = mysqli_fetch_assoc($req);
if ($data['nb'] != 0) {
echo 'existe deja dans la table';
} else {
echo 'existe pas dans la table';
}
mysqli_free_result($req);
}
mysqli_close($connexion);
@+