Page 1 sur 1

Parse error: syntax error, unexpected T_IF on line 76

Posté : 19 mars 2019, 02:42
par azertyu
Bonjour
Je suis débutante en php et je cherche à récupérer les valeurs d'une checkbox à partir d'une base de données, le but étant de donner un nom suivant les cases cochées dans cette checkbox.
J'ai une erreur ci-dessus unexpected T_IF et impossible de la corriger. Pouvez-vous m'aider?

<? php
if
(isset($_POST['DIFFUSION'],$_POST['ALIMENTAIRE']) AND count($_POST['DIFFUSION'],$_POST['ALIMENTAIRE']) > 0)
{
array_map('mysql_real_escape_string',
$_POST['DIFFUSION'],$_POST['ALIMENTAIRE']);
}
$sql .= ' WHERE ';


foreach($_POST['DIFFUSION'],$_POST['ALIMENTAIRE'] AS $case);
$sql .= $case.=1 AND $case.=2 ;


$sql = rtrim($sql, ' AND '' ;
mysql_query($sql);
echo"$[NAME]<br>";

Avant ce code j'ai la connexion à la bdd et un tableau checkbox. Merci pour votre aide

Re: Parse error: syntax error, unexpected T_IF on line 76

Posté : 19 mars 2019, 09:00
par Spols
je pense que cela vient de l'espace que tu as mis entre <? et php en première ligne

vérifie aussi la fin
$sql = rtrim($sql, ' AND '' ;
il y a un nombre impaire de quote et pas de parenthèse fermante

PS
Mysql_* est déprécié il vaut mieux utiliser mysqli_* ou PDO

Re: Parse error: syntax error, unexpected T_IF on line 76

Posté : 19 mars 2019, 18:52
par azertyu
Bonjour
Merci pour votre réponse rapide. J'avais effectivement le problème de l'espace avant php. Pour le AND c'est marqué qu'il en faut un de moins que le nombre de variables puisque AND fait le lien entre 2 variables. J'ai toujours une erreur
Parse error: syntax error, unexpected ',' in /mnt/109/sdb on line 68 (ligne du foreach).
J'utilise le service bdd de free qui ne connait pas le PDO. ils proposent aussi PostgreSQL que je n'ai pas encore essayé.

<?php

if
(isset($_POST['DIFFUSION'],$_POST['ALIMENTAIRE']) AND count($_POST['DIFFUSION'],$_POST['ALIMENTAIRE'])>0)
{
array_map('mysql_real_escape_string',$_POST['DIFFUSION'],$_POST['ALIMENTAIRE']);
}
$sql .= ' WHERE ';

foreach($_POST['DIFFUSION'],$_POST['ALIMENTAIRE'] AS $case);
$sql .= $case.=1 AND $case.=2;

$sql=rtrim($sql, 'AND');
mysql_query($sql);

echo"$[NAME]<br>";

Le but est de lister tous les NAME qui ont tous un id en clef suivant une sélection des champs entre [ ].
Merci pour votre aide

Re: Parse error: syntax error, unexpected T_IF on line 76

Posté : 19 mars 2019, 20:05
par Spols
je ne sais pas ce qu'il y a dans $_POST['DIFFUSION'] et $_POST['ALIMENTAIRE'] mais tu ne peux pas les assembler avec ta virgule, c'est ce que php te dit il ne s'attends pas à avoir une virgule à cet endroit là.

soit tu fais 2 foreach soit tu merge tes valeurs avant.
foreach(array_merge($_POST['DIFFUSION'],$_POST['ALIMENTAIRE']) AS $case) {
$sql .= $case.'=1 AND '.$case.'=2';
}

ensuite ton : après le foreach te fera aussi une erreur, il faut entouré les instruction de ta boucle par {}
et ta concatènation de tes clauses n'est pas bonne non plus.
j'ai corrigé plus haut

Re: Parse error: syntax error, unexpected T_IF on line 76

Posté : 20 mars 2019, 21:28
par azertyu
J'ai abordé mon problème autrement avec ce code
//--Connexion au serveur
$link = mysql_connect(SERVEUR,NOM,PASSE);

if(!$link) {echo"Impossible de se connecter au serveur".mysql_error();exit;}

//--Connexion à la base
mysql_select_db(BASE,$link);
?>

<div class="container">
<div class="row text-center">
<br>
<div>
<fieldset>
<legend>Votre choix</legend>

<input type="checkbox" name="case[0]" id="col[0]"/>Massages

<input type="checkbox" name="case[1]" id="col[1]"/>Diffusion

<?php
$var=$_POST['case'];
$col[]=$_POST['id'];

//ON qd case cochée, base ACTION booleen (col). pour relier case cochée ON de la checkbox avec envoi vers champs sélectionné de la bdd
WHEN $var='on' SELECT $id=1;


FOR ($i=0;$i<=20;$i++)
{
if (isset($var[$i]))

{

$requete= "SELECT 'NAME' FROM ACTION WHERE '$id'=1";
//select dans le champ id les lignes correspondant au booleen 1

$result=mysql_query($requete, $link) or die("Echec de lecture".mysql_error());


while($r=mysql_fetch_array($result, MYSQL_ASSOC))

Foreach $id {echo $NAME;}
}
}
?>
</fieldset>
</div>

J'ai utilisé les checkbox autrement. J'ai commencé à avoir un pb quand j'ai voulu passer du "on" quand la checkbox est validée, à la sélection de la colonne adéquate dans la base de données. Ma base de données comportent des champs id, nom, et des colonnes en booléens. Suivant les choix faits dans la checkbox, les valeurs 0 ou 1 qui vont être ainsi validées font ressortir en résultat un ou plusieurs name. Je ne fais ici des essais que sur 2 colonnes de choix.
Actuellement j'ai une Parse error: syntax error, unexpected T_VARIABLE on line 63 (au rajout de ma variable $col?)
Pouvez me donner la clé de ce parse error?
Merci pour votre aide

Re: Parse error: syntax error, unexpected T_IF on line 76

Posté : 21 mars 2019, 09:59
par Spols
met ton code dans des balise [ php][ /php] sur le forum le code sera plus clair
//--Connexion au serveur
$link = mysql_connect(SERVEUR,NOM,PASSE);

if(!$link) {echo"Impossible de se connecter au serveur".mysql_error();exit;}

//--Connexion à la base
mysql_select_db(BASE,$link);
?>

<div class="container">
<div class="row text-center">
<br>
<div>
<fieldset>
<legend>Votre choix</legend>

<input type="checkbox" name="case[0]" id="col[0]"/>Massages

<input type="checkbox" name="case[1]" id="col[1]"/>Diffusion

<?php
$var=$_POST['case'];
$col[]=$_POST['id']; 

//ON qd case cochée, base ACTION booleen (col). pour relier case cochée ON de la checkbox avec envoi vers champs sélectionné de la bdd 
WHEN $var='on' SELECT $id=1;


FOR ($i=0;$i<=20;$i++)
{
if (isset($var[$i]))

{

$requete= "SELECT 'NAME' FROM ACTION WHERE '$id'=1";
//select dans le champ id les lignes correspondant au booleen 1

$result=mysql_query($requete, $link) or die("Echec de lecture".mysql_error());


while($r=mysql_fetch_array($result, MYSQL_ASSOC))

Foreach $id {echo $NAME;} 
}
}
ca te permettra de voir grâce à la coloration syntaxique que ton WHEN ... n'a rien à faire là

tu cherche à récupéré des id qui ne sont pas dans ton formulaire
d'ailleur tu n'a pas de formulaire.
ton foreach $id n'a pâs la bonne syntaxe
$NAME n'est pas défini
et j'en passe, il y a quasi que des erreurs dans ce code.