attribuer une valeur à l'id d'une bd mysl avec IF

Graig083
Invité n'ayant pas de compte PHPfrance

14 mars 2012, 17:39

Bonjour à tous,
Voilà mon problème : j'aimerais intégrer des condition IF pour l'attribution de valeurs définies aux ID d'une base mySQL nourrie par un formulaire html/php.
Je m'explique...
Si le champs "x" à une valeur "1" je voudrais que l'ID soit incrémenté de façon croissante entre 1 et 50
si le champs "x" à une valeur "2", je voudrais que l'ID soit incrémenté de façon croissante entre 51 et 100
si le champs "x" à une valeur "3", je voudrais que l'ID soit incrémenté de façon croissante à partir de 101

Pouvez vous me dire ce qui ne va pas dans mon code...?

if($x == '1')
{$req =mysql_query("select max(id) from *** where id between 1 and 49");
$res =mysql_fetch_array($req);
$max = $res[0];
if(mysql_nums_rows($req) == 0)
$id =1;
else
$id =$max +1;
mysql_query("INSERT INTO *** VALUES('$id', ...)");
}
else if($x == '2')
{$req =mysql_query("select max(id) from *** where id between 51 and 99");
$res =mysql_fetch_array($req);
$max = $res[0];
if(mysql_nums_rows($req) == 0)
$id =51;
else
$id =$max +1;
mysql_query("INSERT INTO *** VALUES('$id', ...)");
}
else if($_POST['champ6'] == 'option3')
{$req =mysql_query("select max(id) from *** where id > 100");
$res =mysql_fetch_array($req);
$max = $res[0];
if(mysql_nums_rows($req) == 0)
$id =101;
else
$id =$max +1;
mysql_query("INSERT INTO *** VALUES('$id', ...)");
}

Lorsque je teste le code j'ai une syntax error, unexpected T_ELSE...

Un grand merci d'avance de votre aide

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

14 mars 2012, 17:48

Salut,

Avec le numéro de ligne c'est plus facile ;)

Le plus simple c'est d'indenter le code correctement et de mettre les accolades pour chaque if / else (même pour une ligne).

Après un IDE doit pouvoir t'indiquer la source de l'erreur (netbeans, éclipse, zend studio etc etc)


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

Graig083
Invité n'ayant pas de compte PHPfrance

14 mars 2012, 17:54

Merci pour ta réponse mais excuse moi je ne comprends pas, je suis loin de maitriser le php (à mon grand regret) et je n'ai pas compris ce que tu voulais que je fasse.
Désolé

ViPHP
xTG
ViPHP | 7331 Messages

14 mars 2012, 18:29

Nous ne valons rien de plus qu'un débutant devant un amas de code télégraphié ainsi et un message d'erreur non fourni ou incomplet.
Le message d'erreur est clair pour quelqu'un qui sait l'interpréter ou qui prend un minimum de temps à tenter de le comprendre.
Il y a dedans le numéro de ligne par exemple. ;)

T_ELSE comme l'indique moogli réfère à un problème de condition qui est généré à cause de mauvais placement d'accolade.
Accolades qu'on voit comment corriger tout de suite quand il y a un respect de l'indentation du code.

Graig083
Invité n'ayant pas de compte PHPfrance

14 mars 2012, 19:14

Toutes mes excuses, je ne suis pas habitué à ces forums, même si j'en mesure toute l'utilité aujourd'hui !!

J'ai réussi à modifier mon code pour qu'il n'y ait plus de message d'erreur mais il ne tient toujours pas compte des conditions IF que je voudrais lui allouer... :-(
Voici le code actuel si quelqu'un a une idée, j'avoue que je suis à la limite de mes compétences (et pas loin de ma patience ! :-) j'y aurai quand même passé la journée dessus...)

mysql_connect('localhost','util','mdp');
mysql_select_db('base');

// verif doublons
$sql = "SELECT id FROM *** WHERE nom='$nom' AND prenom='$prenom'";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$res = mysql_num_rows($req);

if($res!=0)
{
echo 'Entrée déjà existante';
}
else
{
if ($_POST["activité"] == 'option1')
{
$req = mysql_query("SELECT max(id) FROM *** WHERE id BETWEEN 1 AND 49");
$res = mysql_fetch_array($req);
$max = $res[0];
if (mysql_num_rows($req) == 0)
$id = 1;
else
$id =$max +1;
$sql = "INSERT INTO *** VALUES('$id','$nom'...)";
mysql_query($sql) or die('Erreur lors de la connexion à la base de donnée !'.$sql.' '.mysql_error());
}
else if ($_POST["activité"] == 'option2')
{
$req =mysql_query("SELECT max(id) FROM *** WHERE id BETWEEN 51 AND 99");
$res =mysql_fetch_array($req);
$max = $res[0];
if (mysql_num_rows($req) == 0)
$id = 51;
else
$id =$max +1;
$sql = "INSERT INTO *** VALUES('$id','$nom'...)";
mysql_query($sql) or die('Erreur lors de la connexion à la base de donnée !'.$sql.' '.mysql_error());
}
else if ($_POST["activité"] == 'option3')
{
$req =mysql_query("SELECT max(id) FROM *** WHERE id > 100");
$res =mysql_fetch_array($req);
$max = $res[0];
if(mysql_num_rows($req) == 0)
$id =101;
else
$id =$max +1;
$sql = "INSERT INTO *** VALUES('$id','$nom'...)";
mysql_query($sql) or die('Erreur lors de la connexion à la base de donnée !'.$sql.' '.mysql_error());
}
}
mysql_close();
?>

ViPHP
ViPHP | 2577 Messages

15 mars 2012, 10:07

La solution est de mettre des echo avec les valeurs testée avec le if qui ne marche pas et éventuellement de mettre un echo 'je suis dans le if' et idem dans le else pour voir ce qui se passe.

Petit nouveau ! | 4 Messages

19 mars 2012, 13:43

salut,
juste pour completer et une manière de simplifier ton code:
<?php

//dump valeurs postées
var_dump($_POST);

//req doublon

// test post activite
if (!isset($_POST['activite']) || empty($_POST['activite']) || is_null($_POST['activite']))
{
    exit('no postdata to process');
}

// DRY
$_id = 0;
$_req = '';
$print_val = '';

//switch data post
switch ($_POST['activite'])
{
    case 'options1':
        $_req = 'id BETWEEN 1 AND 49';
        $_id = 1;
        break;
    case 'options2':
        $_req = 'id BETWEEN 51 AND 99';
        $_id = 51;
        break;
    case 'options3':
        $_req = 'id >100';
        $_id = 101;
        break;
}

//
if ($_id === 0)
{
    exit('Unable to continue');
}

//option choisie
$print_val = 'Valeur $_id: ' . $_id . ' (' . $_POST['activite'] . ')' . ' | ';

//req max id
$req = mysql_query("SELECT max(id) FROM *** WHERE " . $_req);
$res = mysql_fetch_array($req);
$max = $res[0];
$print_val .= 'Valeur max:' . $max . ' | ';

//attribution de l id
$id = mysql_num_rows($req) === 0 ? $_id : $max++;
$print_val .= 'Valeur $id: ' . $id;

//req insertion
$sql = "INSERT INTO *** VALUES('$id','$nom'...)";

//debug val
echo $print_val;