php/mysql INSERT un peu poussé

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : php/mysql INSERT un peu poussé

Résolu - php/mysql INSERT un peu poussé

par macplus » 24 janv. 2012, 16:40

Re-
J'ai suivi ton conseil, qu'en fait j'avais mis en place au début, sauf que j'avais une erreur dans le nom d'un champs dans ma requ^te, et donc forcément, ça marchait moins bien...

Merci à vous pour votre gentillesse et votre disponibilité !

Re: php/mysql INSERT un peu poussé

par xTG » 24 janv. 2012, 14:32

Si tu attends plusieurs résultat il faut dans ce cas faire le traitement dans la boucle while.
Ou bien stocker non pas dans des variables de type simple mais dans un tableau.

Re: php/mysql INSERT un peu poussé

par macplus » 24 janv. 2012, 14:15

Utilises mysql_num_rows() pour connaitre le nombre de n-uplets renvoyé par ta requête.
Car tu boucles avec un while mais ton traitement ne semble attendre qu'un seul n-uplet.
Donc il suffit d'un second n-uplet dans ta table que tu n'as pas pris en compte dans ton raisonnement pour te donner des résultats inattendus.
Hello!
Je suis susceptible d'attendre plusieurs réponses de mon select.
Mais je pense que c'est là qu'est le problème, peut être faut il que je décompose en faisant un nouveau select conditionnel pour chaque cas de figure et donc chaque if ?

Re: php/mysql INSERT un peu poussé

par xTG » 23 janv. 2012, 16:50

Utilises mysql_num_rows() pour connaitre le nombre de n-uplets renvoyé par ta requête.
Car tu boucles avec un while mais ton traitement ne semble attendre qu'un seul n-uplet.
Donc il suffit d'un second n-uplet dans ta table que tu n'as pas pris en compte dans ton raisonnement pour te donner des résultats inattendus.

Re: php/mysql INSERT un peu poussé

par macplus » 23 janv. 2012, 16:45

Hello!
Merci pour ces corrections.

concernant la requête insert, sortie du contexte conditionnel, elle fonctionne sans problème.
Par contre dans le code que j'ai mis en ligne, j'affiche déjà les valeurs de mes variables:
=> si je rentre un telephone qui est déjà dans la basse avec l'état gagné=1 et une date de gain de moins de 60 jours:
Il trouve bien le numéro dans la base.
==> il n'en extrait aucune valeur pour les variables appelées:
Resource id #5tel :06.xx.xx.xx.xx.
today: 2012-01-23
jour de gain: 
diff : 15361.958333333 (nombre abérrant mais normal vu qu'il ne trouve pas la date de gain
déjà tel 
etat ok: 

Merci pour ton intérêt à mon souci

Re: php/mysql INSERT un peu poussé

par moogli » 23 janv. 2012, 16:25

salut,

Tu ne sais pas faire une comparaison en php. (c'est == ou === le = étant l'affectation) ton if et ton elseif seront toujours valide sur la 1ère partie.

de plus le et logique c'est && (and c'est du sql, même si les deux fonctionnent ;) )

a tu affiché la requete pour la tester avec une console mysql ? (ou phpmyadmin).

affiche, dans le else le contenu des variables correspondant aux tests effectuée pour y arriver.

@+

php/mysql INSERT un peu poussé

par macplus » 23 janv. 2012, 15:48

Bonjour,
Je vous explique ma problématique:
Via formulaire je permets à mes visiteurs de s'inscrire en donnant leur prénom et téléphone...
Chaque téléphone dans la bdd peut avoir 3 états:
-inscrit=1
-participé=1
-gagné=1

Je dois donc prendre ces états en considérations lors de mon INSERT:
Pour le téléphone entré dans le Input:
-si pas présent dans la bdd => on enregistre dans la bdd
-si présent avec l'état inscrit=1 => on enregistre pas et message d'erreur (déjà inscrit)
-si présent dans la bdd avec l'état participé=1 => on enregistre dans la bdd
-si présent dans la bdd avec l'état gagné=1 => on vérifie que le délai entre la date de gagné (un champs existant dans la bdd) >60 jours => si oui, on inscrit =/= sinon on n'inscrit pas avec message d'erreur (gagné il y a moins de 60 jours).

Je rencontre des soucis :-il ne semble pas réussir à voir si le téléphone est déjà existant dans la bdd ni son état.
donc => il inscrit systématiquement le téléphone

voici mon code ( de la partie validation uniquement:
<?
	$message_erreur_formulaire = "Vous devez d'abord remplir le formulaire.";

// on teste si le formulaire a été soumis
	if (!isset($_POST['submit']))
	{
		
echo "<br><br><br><center><span class='bleu_italique'>";
echo "les coordonnées ont bien été enregistrées !" ;
echo "</span></center><br>";
	
$ip=$REMOTE_ADDR;
$support="Téléphone";
$inscripokvox = "1";
$userident = "Non identifiable (téléphone)";
$chiffres = '';
$lettres = '';
$chaine = $_POST['telephone'];



for($i = 0; $i < strlen($chaine); $i++)
{
	if(is_numeric($chaine[$i]))
		{
			$chiffres .= $chaine[$i];
		}
	if(!is_numeric($chaine[$i]))
		{
			$lettres .= trim($chaine[$i]);
		}
}
function Format_telephone($numero_tel)
{
// ne garde que les chiffres
$numero_tel = ereg_replace("[^[:digit:]]", "",$numero_tel);
$numero_tel = trim($numero_tel);
// ajout des points entre les numéros
if (strlen($numero_tel) == 10) {
$numero_tel = preg_replace('#(\d{2})#', '$1.', $numero_tel);
}
return $numero_tel;
}

$nouveau_tel = Format_telephone ($chiffres);

function no_special_character_v2($chaine2){       //  les accents
$chaine2=trim($chaine2);
$chaine2= strtr($chaine2,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
//  les caracètres spéciaux (aures que lettres et chiffres en fait)
$chaine2 = preg_replace('/([^.a-z0-9]+)/i', '-', $chaine2);
$chaine2 = strtolower($chaine2);
return $chaine2;
}

$lettres2 = no_special_character_v2 ($lettres);


echo $nouveau_tel;
echo "<br/>";
echo $lettres2;
echo"<br/>";


include("../fichier de connection"); 
mysql_connect($host, $user, $pass); 
mysql_select_db("$bdd") 
or die("Ouverture base impossible"); 

$req_lire ="SELECT *,DATE_FORMAT(winvox, '%Y-%m-%d') as datewin FROM jeuvox WHERE telvox='$nouveau_tel' "; 											
mysql_query($req_lire) or die($req_lire. mysql_error());
$lire2 = mysql_query($req_lire) or die($req_lire."<br>\n".mysql_error());

while ($reponse = mysql_fetch_array($lire2))
{
$alreadytel = $reponse['telvox'];
$inscriptok = $reponse['inscriptokvox'];
$win = $reponse['datewin'];
	}
$today = date("Y-m-d");
$diffdate = (strtotime(date("Y-m-d")) - strtotime($win)) / 86400 ;

	echo "tel :" .$nouveau_tel. "<br/>today: " .$today. "<br/> jour de gain: " .$win. "<br/>diff : " .$diffdate. "<br/>déjà tel " .$alreadytel. "<br/>etat ok: " .$inscriptok;



if (isset($_POST['prenom']) AND isset($_POST['telephone'])) 
{

    if ($_POST['prenom'] != NULL AND $_POST['telephone'] != NULL)

{ 

	if ($nouveau_tel = $alreadytel AND $inscriptok = "1")
	{
	
		echo "Ce participant est déjà inscrit";
	}
		
	elseif ($nouveau_tel = $alreadytel AND $diffdate <= '60' )
	{
		echo "Ce participant a gagné il y a moins de 60 jours !";
	}
	else
	{

		$req_create ="INSERT INTO jeuvox (telvox,prenomvox,supportvox,inscripokvox,uservox) 
VALUES ('$nouveau_tel','$prenom','$support','$inscripokvox','$userident')"; 
		$add=mysql_query($req_create) or die(mysql_error());	
		echo $win. " - " .$diffdate. " - " .$alreadytel. " - " .$inscriptok. " - " .$win;
	}
	

	

}	
}	 
mysql_close; 

		};



?>
Pourriez-vous m'aider un peu à me dépatouiller?
En fait, je n'arrive pas à chopper le contenu de la variable dans ma boucle, ou bien il n'arrive pas à lire dans la bdd, mais je n'ai aucun message d'erreur...

Merci d'avance