Syntaxe PHP erreur “unexpected $end”
J'ai 3 fichiers
1) show_createtable.html
2) do_showfielddef.php
3) do_showtble.php
1) Premier fichier est pour la création d'une nouvelle table de base de données, c'est un fom avec 2 entrées, Nom de la Table et le Nombre de Champs. CELA FONCTIONNE TRÈS BIEN!
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<h1>Step 1: Name and Number</h1>
<form method="post" action="do_showfielddef.php" />
<p><strong>Table Name:</strong><br />
<input type="text" name="table_name" size="30" /></p>
<p><strong>Number of fields:</strong><br />
<input type="text" name="num_fields" size="30" /></p>
<p><input type="submit" name="submit" value="go to step2" /></p>
</form>
</body>
</html>
2) ce script valide les champs et créer un autre formulaire pour la saisie de toutes les lignes de la table.
Ce pour FONCTIONNE aussi très bien!
<?php
//validate important input
if ((!$_POST[table_name]) || (!$_POST[num_fields])) {
header( "location: show_createtable.html");
exit;
}
//begin creating form for display
$form_block = "
<form action=\"do_createtable.php\" method=\"post\">
<input name=\"table_name\" type=\"hidden\" value=\"$_POST[table_name]\">
<table cellspacing=\"5\" cellpadding=\"5\">
<tr>
<th>Field Name</th><th>Field Type</th><th>Table Length</th>
</tr>";
//count from 0 until you reach the number fo fields
for ($i = 0; $i <$_POST[num_fields]; $i++) {
$form_block .="
<tr>
<td align=center><input type=\"texr\" name=\"field name[]\"
size=\"30\"></td>
<td align=center>
<select name=\"field_type[]\">
<option value=\"char\">char</option>
<option value=\"date\">date</option>
<option value=\"float\">float</option>
<option value=\"int\">int</option>
<option value=\"text\">text</option>
<option value=\"varchar\">varchar</option>
</select>
</td>
<td align=center><input type=\"text\" name=\"field_length[]\" size=\"5\">
</td>
</tr>";
}
//finish up the form
$form_block .= "
<tr>
<td align=center colspan=3><input type =\"submit\" value=\"create table\">
</td>
</tr>
</table>
</form>";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Create a database table: Step 2</title>
</head>
<body>
<h1>defnie fields for <? echo "$_POST[table_name]"; ?>
</h1>
<? echo "$form_block"; ?>
</body>
</html>
Problème est ici
3) cette forme crée les tables et n'entre dans la base de données.
J'obtiens une erreur à la ligne 37 "Parse error: syntax error, unexpected $end in /home/admin/domains/domaina.com.au/public_html/do_createtable.php sur la ligne 37"
<?
$db_name = "testDB";
$connection = @mysql_connect("localhost", "admin_user", "pass")
or die(mysql_error());
$db = @mysql_select_db($db_name, $connection)
or die(mysql_error());
$sql = "CREATE TABLE $_POST[table_name](";
for ($i = 0; $i < count($_POST[field_name]); $i++) {
$sql .= $_POST[field_name][$i]." ".$_POST[field_type][$i];
if ($_POST[field_length][$i] !="") {
$sql .=" (".$_POST[field_length][$i]."),";
} else {
$sql .=",";
}
$sql = substr($sql, 0, -1);
$sql .= ")";
$result = mysql_query($sql, $connection) or die(mysql_error());
if ($result) {
$msg = "<p>" .$_POST[table_name]." has been created!</p>";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Create A Database Table: Step 3</title>
</head>
<body>
<h1>Adding table to <? echo "$db_name"; ?>...</h1>
<? echo "$msg"; ?>
</body>
</html>
- Juste une note de côté (comme @Gumbo déjà répondu à votre question), pour faire écho juste une variable il n'est pas nécessaire de l'entourer avec ": echo "$db_name"; <=> echo $db_name; Et il est plus efficace 😉
Vous devez vous connecter pour publier un commentaire.
vous manque un
}
dans votre dernière instruction if, et votre boucle for est manquant un}
tropCe message d'erreur signifie qu'une structure de contrôle de bloc n'est pas fermé correctement. Dans votre cas, la clôture
}
de certains de vos structures de contrôle comme lefor
de la boucle ou de la dernièreif
sont manquants.Vous devez utiliser la bonne indentation et d'un éditeur qui met en évidence support de paires d'avoir une aide visuelle pour éviter de telles erreurs.
Vous devez fermer l'expression de bloc:
Votre
for
boucle n'est pas terminée. Il vous manque un}
for ($i = 0; $i < count($_POST[field_name]); $i++) {
$sql .= $_POST[field_name][$i]." ".$_POST[field_type][$i];
}
Et comme indiqué par d'autres, il y a aussi un manque
}
pour la dernièreif
déclaration:if ($result) {
$msg = "< p>" .$_POST[table_name]." has been created!< /p>";
}
dans votre
php.ini
(configuration de php) modification :vous avez ouvert balise php peu de temps à la ligne 1
il suffit de trouver et de remplacer tous les <? avec <?php
Stylistique astuce: Utilisez HEREDOCs à assigner des blocs de texte à une variable, au lieu de l'horrible et multi-ligne-avec-tonnes-de-sortir-barres obliques inverses des constructions que vous utilisez. Ils sont beaucoup plus facile à lire et moins sujette aux erreurs si/lorsque vous arrive d'oublier une \ quelque part et de briser le script avec une erreur d'analyse.
Je viens de résoudre cette erreur, après vérification de mon code, je n'avais pas ouvert tags/accolades.
Pour moi, j'ai eu cette erreur lors du déplacement vers un serveur amazon.
Il s'avère que j'nécessaires pour permettre
short_open_tag = On
dans monphp.ini
.Cela a résolu cette erreur pour moi.