[RESOLU] Problème dans ma bbd à cause de bigint

Eléphant du PHP | 386 Messages

12 sept. 2012, 01:54

Bonjour,

J'ai un espace membre, avec une BDD.
Dans mon espace membre, j'ai un script php qui affiche le nombre de membres connectés à la base.
Le nom de la colonne est "lastquerytime" bigint(20) (Voir code ci-dessous)

Le problème c'est que je peux rien ajouter à ma base par l'intermédiaire d'un formulaire, ça ne fonctionne pas à cause de ce "lastquerytime".
Et je ne sais pas pourquoi.
J'ai essayé de l'enlever pour voir, et ça marche si on supprime "lastquerytime"

Voici le code de mon script de membres connectés :
$sql = connect_sql();
if ($_SESSION['pseudo'] != '')
{
$pseudo = $_SESSION['pseudo'];
$query = "SELECT * FROM wa_communaute WHERE pseudo='$pseudo'";
$result = mysql_query($query);
if ($result)
{
$lastquerytime = time();
$query = "UPDATE wa_communaute SET lastquerytime='$lastquerytime' WHERE pseudo='$pseudo'";
mysql_query($query);
}
}
$fiveminago = time() - 1 * 60;
$query = "SELECT COUNT(pseudo) FROM wa_communaute WHERE lastquerytime>'$fiveminago'";
$result = mysql_query($query);
$resultat = mysql_fetch_row($result);
if ($resultat['pseudo'] > 1) {
	echo '<p style="font-size: 11px;"><b>'.$resultat[0].'</b> &nbsp;Membres connectés</p>';
	} else {
	echo '<p style="font-size: 11px;"><b>'.$resultat[0].'</b> &nbsp;Membre connecté</p>';
}
mysql_close();
Merci pour votre aide :)

ViPHP
xTG
ViPHP | 7331 Messages

12 sept. 2012, 08:56

Tu mets des quotes, donc c'est interprété comme une chaîne de caractères.
Or stocker ça dans un entier ça fait mal. :P
De plus pourquoi ne pas utiliser un format timestamp ou date pour ce champs ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 sept. 2012, 09:09

Tu mets des quotes, donc c'est interprété comme une chaîne de caractères.
auto cast sur les entiers, ce n'est pas la même chose sur les bigint ?

en tous cas il n'y a pas d'insertion dancs les lignes montrées.

par contre je suis certain que ce code
<?php
$query = "SELECT COUNT(pseudo) FROM wa_communaute WHERE lastquerytime>'$fiveminago'";
$result = mysql_query($query);
$resultat = mysql_fetch_row($result);
if ($resultat['pseudo'] > 1) {
        echo '<p style="font-size: 11px;"><b>'.$resultat[0].'</b> &nbsp;Membres connectés</p>';
        } else {
        echo '<p style="font-size: 11px;"><b>'.$resultat[0].'</b> &nbsp;Membre connecté</p>';
}
mysql_close();
 
?>
doit fournir une erreur car, au vu de la requête, il ne peux y avoir d'index pseudo dans $resultat étant donné qu'il n'est pas sélectionné avant.

Alors oui tu va me dire que ça fonctionne !
normale tu a exactement la même chose dans dans le if et le else à l'accord du pluriel prêt !

as tu essayé ce script avec plusieurs connecté ?

@+
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

12 sept. 2012, 09:53

auto cast sur les entiers, ce n'est pas la même chose sur les bigint ?
Les autocast c'est jamais clair, donc je raisonne toujours comme si cette saleté existait pas.
Quand on code clairement (même si on rajoute des choses qui ne font que le travail de l'autocast) on vient pas se poser de questions quand ça ne fonctionne pas. :)
J'avais rencontré le problème dans je ne sais plus quel langage ou l'autocast ne fonctionnait pas pareil pour tous les types primitifs... Une belle galère pour trouver l'erreur.

Eléphant du PHP | 386 Messages

12 sept. 2012, 15:20

Le problème c'est si j'ajoute un champ "timestamp" à ma base de donnée, les données ne s'enregistre plus dans ma base :cry:

ViPHP
xTG
ViPHP | 7331 Messages

12 sept. 2012, 15:36

Le problème c'est si j'ajoute un champ "timestamp" à ma base de donnée, les données ne s'enregistre plus dans ma base :cry:
mysql_error() pour avoir plus d'informations que "ça ne fonctionne pas" ? ^^

Eléphant du PHP | 386 Messages

12 sept. 2012, 15:52

Enfaite y'a déjà msql_error(); mais ca n'affiche rien, vu que la page est accepté, il n'y a pas d'erreur mais les données ne sont pas enregistré dans la base a cause soit du bigint(20) ou d'un timestamp.
Et je ne sais pas pourquoi !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 sept. 2012, 16:05

je pense t'avoir répondu dans ton "autre post"

Montre nous le code qui pose problème.

si un mysql_query ne réalise pas l'insert c'est qu'il y a une erreur et celle ci doit t'être retournée !

si tu veux être convaincu :
- tu affiche ta requête SQL avant de la donner à manger à mysql_query
- tu télécharge heidiSQL ou phpmyadmin
- tu exécute la requête SQL avec ce que tu a dl au second point

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 386 Messages

12 sept. 2012, 16:38

Voici la page inscription.php qui fait l'insertion dans la bdd :

Le code du script est plus haut
<?php
session_start();
require($_SERVER["DOCUMENT_ROOT"].'/include/connect.php');

	$mail = htmlentities($_POST['mail']);
	$pseudo = htmlentities($_POST['pseudo']);
	$mdp = htmlentities($_POST['mdp']);
	$verif_mdp = htmlentities($_POST['verif_mdp']);
	$nom = htmlentities($_POST['nom']);
	$prenom = htmlentities($_POST['prenom']);
	$sexe = htmlentities($_POST['sexe']);
	$jour = htmlentities($_POST['jour']);
	$mois = htmlentities($_POST['mois']);
	$annee = htmlentities($_POST['annee']);

    if (preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $mail))
    {
		
		$message1 = '<html><body><div style="font-size: 14px">Cher(e) <span style="text-transform: capitalize;">'.$prenom.' '.$nom.',</span><br />'; 
		$message1 .= '</br>';
		$message1 .= 'Vous faites désormais partie de la communauté Web Astronomie !<br /><br />'; 
		$message1 .= 'Voici un rappel de vos identifiants, notez les précieusement : <br /><br />';
		$message1 .= 'Votre pseudo : <b>'.$pseudo.'</b><br />';
		$message1 .= 'Votre Mot de passe : <b>'.$mdp.'</b><br /><br />';
		$message1 .= 'Vous pouvez d\'ores et déjà : <br /><br />
					  √  Renseigner ou compléter votre compte<br />
					  √  Partager des articles, photos ou liens<br />
					  √  Rechercher et devenir ami(e) avec des membres du réseau<br />
					  √  Tchater en direct avec vos amis<br />
					  √  Participer au forum<br /><br />
					  Et bien plus encore !<br /><br />
					 ';
		$message1 .= 'Cordialement<br />L\'équipe de <a href="'.$url_site.'">'.$nom_site.'</a></div></body></html>';

		$sql = connect_sql();
		
		$verification = mysql_query("SELECT COUNT(*) FROM wa_communaute WHERE pseudo='$pseudo' OR mail='$mail'") or die (mysql_error());
		$donnees = mysql_fetch_array($verification)or die (mysql_error());

		if($donnees['COUNT(*)'] >= 1)
		{ 
			$reponse1 = '<div id="reponse02" align="center">L\'adresse email est déjà utilisée, merci d\'en choisir une autre</div>';
		}
		else
		{	
			if( empty($pseudo) || empty($mdp) || empty($verif_mdp) || empty($mail) || empty($nom) || empty($prenom) || empty($sexe) || empty($jour) || empty($mois) || empty($annee))
			{
				$reponse1 = '<div id="reponse03" align="center">Un ou plusieurs champs ne sont pas remplis</div>';
			}
			elseif( $mdp != $verif_mdp)
			{
				$reponse1 = '<div id="reponse04" align="center">Les mots de passe ne sont pas identiques</div>';
			}
			else
			{
				mysql_query("INSERT INTO wa_communaute VALUES ('','$pseudo', '$mdp', '$mail', '$nom', '$prenom', '$sexe', '$jour', '$mois', '$annee')");
				$reponse = mysql_query ("SELECT * FROM wa_communaute WHERE pseudo='$pseudo'");
				$donnees = mysql_fetch_array ($reponse);
				$pseudo_sql = $donnees['pseudo'];
				setcookie("pseudo", $_POST["pseudo"], time() + 90 * 24 * 60 * 60, "/");
				$_SESSION['pseudo'] = $pseudo_sql;
				header('location: index.php');
				$entete = "MIME-Version: 1.0\r\n";
				$entete .= "Content-type: text/html; charset=utf-8\r\n";
				$entete .= "From: \"Web Astronomie\" <$email_admin>\r\n";
				$entete .= "Reply-To: $email_admin\r\n";
				mail($mail,'Bienvenue sur '.$nom_site.'' , $message1, $entete);
			}
		}
		mysql_close($sql);
	}
	else {
		$reponse1 = '<div id="reponse05" align="center">Veuillez remplir tous les champs et vérifiez que l\'adresse email est correctement écrite et valide<br />
		<br />En cliquant sur Inscription, vous acceptez nos conditions d\'utilisation.</div>';
	}
?>

ViPHP
xTG
ViPHP | 7331 Messages

12 sept. 2012, 16:52

Bah bizarrement je ne vois pas de mysql_error() sur la ligne incriminée. ;)

Eléphant du PHP | 386 Messages

12 sept. 2012, 17:14

comment on dois faire ?

ViPHP
xTG
ViPHP | 7331 Messages

12 sept. 2012, 19:57

mysql_query("INSERT INTO wa_communaute VALUES ('','$pseudo', '$mdp', '$mail', '$nom', '$prenom', '$sexe', '$jour', '$mois', '$annee')") or die(mysql_error());
A enlever après avoir réglé le souci, le mysql_error() ne doit pas apparaître sur un environnement de production car il donne des informations plus qu'utiles aux visiteurs mal intentionnés.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 sept. 2012, 20:38

A enlever après avoir réglé le souci, le mysql_error() ne doit pas apparaître sur un environnement de production car il donne des informations plus qu'utiles aux visiteurs mal intentionnés.
j'aurais plutôt dit de gérer correctement le erreurs, mais bon c'est p'tet trop la pour le coup :)
parce que l'on peux simplement lever une erreur avec un bon niveau d'erreur de façon a ce que cela ne soit pas afficher en prod ;)
<?php
$sql = "INSERT INTO wa_communaute VALUES ('','$pseudo', '$mdp', '$mail', '$nom', '$prenom', '$sexe', '$jour', '$mois', '$annee')";
$ret = mysql_query($sql);
if ($ret === false){
     trigger_error('Erreur SQL : '.$sql.'<br />'.mysql_error(), E_USER_ERROR);
}

?>

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 386 Messages

12 sept. 2012, 20:41

Le problème c'est que mon formulaire est en bas du script d'envoi du formulaire.
Donc enfait, je ne verrai pas l'erreur, parce qu'il y a un header qui redirige vers la page membre

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 sept. 2012, 20:45

met le en commentaire

le header ne peu fonctionner s'il y a affichage avant.

sinon c'est que ton niveau de report d'erreur n'est pas bon

@+
Il en faut peu pour être heureux ......