Ejercicios (con formularios) - for (3) - Tablas Soluciones

En esta página se muestran una parte de las soluciones de los ejercicios For (3), concretamente el fragmento PHP, sin el principio ni el final de la página que se pueden dejar en fragmentos HTML.

Si lo prefiere, puede descargar unas posibles soluciones completas de estos ejercicios.

For (3) 0 - Varios elementos

<?php
// Función de recogida de datos
function recoge($key, $type = "")
{
    if (!is_string($key) && !is_int($key) || $key == "") {
        trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
    } elseif ($type !== "" && $type !== []) {
        trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
    }
    $tmp = $type;
    if (isset($_REQUEST[$key])) {
        if (!is_array($_REQUEST[$key]) && !is_array($type)) {
            $tmp = trim(htmlspecialchars($_REQUEST[$key]));
        } elseif (is_array($_REQUEST[$key]) && is_array($type)) {
            $tmp = $_REQUEST[$key];
            array_walk_recursive($tmp, function (&$value) {
                $value = trim(htmlspecialchars($value));
            });
        }
    }
    return $tmp;
}

$numero = recoge("numero");

$numeroOk = false;

$numeroMinimo = 1;
$numeroMaximo = 200;

if ($numero == "") {
    print "  <p class=\"aviso\">No ha escrito el número.</p>\n";
    print "\n";
} elseif (!is_numeric($numero)) {
    print "  <p class=\"aviso\">No ha escrito un número.</p>\n";
    print "\n";
} elseif (!ctype_digit($numero)) {
    print "  <p class=\"aviso\">No ha escrito un número entero positivo.</p>\n";
    print "\n";
} elseif ($numero < $numeroMinimo || $numero > $numeroMaximo) {
    print "  <p class=\"aviso\">El número debe estar entre "
        . "$numeroMinimo y $numeroMaximo.</p>\n";
    print "\n";
} else {
    $numeroOk = true;
}

if ($numeroOk) {
    print "  <h2>Preformateado (<pre>)</h2>\n";
    print "\n";
    print "  <pre>";
    for ($i = 1; $i <= $numero; $i++) {
        print "$i ";
    }
    print "</pre>\n";
    print "\n";

    print "  <h2>Párrafos (<p>)</h2>\n";
    print "\n";
    for ($i = 1; $i <= $numero; $i++) {
        print "  <p>$i</p>\n";
        print "\n";
    }
    print "\n";

    print "  <h2>Lista sin ordenar (<ul>)</h2>\n";
    print "\n";
    print "  <ul>\n";
    for ($i = 1; $i <= $numero; $i++) {
        print "    <li>$i</li>\n";
    }
    print "  </ul>\n";
    print "\n";

    print "  <h2>Lista ordenada (<ol>)</h2>\n";
    print "\n";
    print "  <ol>\n";
    for ($i = 1; $i <= $numero; $i++) {
        print "    <li>$i</li>\n";
    }
    print "  </ol>\n";
    print "\n";
}

?>

For (3) 1 - Tabla de una fila

<?php
// Función de recogida de datos
function recoge($key, $type = "")
{
    if (!is_string($key) && !is_int($key) || $key == "") {
        trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
    } elseif ($type !== "" && $type !== []) {
        trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
    }
    $tmp = $type;
    if (isset($_REQUEST[$key])) {
        if (!is_array($_REQUEST[$key]) && !is_array($type)) {
            $tmp = trim(htmlspecialchars($_REQUEST[$key]));
        } elseif (is_array($_REQUEST[$key]) && is_array($type)) {
            $tmp = $_REQUEST[$key];
            array_walk_recursive($tmp, function (&$value) {
                $value = trim(htmlspecialchars($value));
            });
        }
    }
    return $tmp;
}

$columnas = recoge("columnas");

$columnasOk = false;

$columnasMinimo = 1;
$columnasMaximo = 200;

if ($columnas == "") {
    print "  <p class=\"aviso\">No ha escrito el número de columnas.</p>\n";
    print "\n";
} elseif (!is_numeric($columnas)) {
    print "  <p class=\"aviso\">No ha escrito el número de columnas como número.</p>\n";
    print "\n";
} elseif (!ctype_digit($columnas)) {
    print "  <p class=\"aviso\">No ha escrito el número de columnas "
        . "como número entero positivo.</p>\n";
    print "\n";
} elseif ($columnas < $columnasMinimo || $columnas > $columnasMaximo) {
    print "  <p class=\"aviso\">El número de columnas debe estar entre "
        . "$columnasMinimo y $columnasMaximo.</p>\n";
    print "\n";
} else {
    $columnasOk = true;
}

if ($columnasOk) {
    print "  <table class=\"conborde\">\n";
    print "    <tbody>\n";
    print "      <tr>\n";
    for ($i = 1; $i <= $columnas; $i++) {
        print "        <td>$i</td>\n";
    }
    print "      </tr>\n";
    print "    </tbody>\n";
    print "  </table>\n";
    print "\n";
}

?>

For (3) 2 - Tabla de una columna

<?php
// Función de recogida de datos
function recoge($key, $type = "")
{
    if (!is_string($key) && !is_int($key) || $key == "") {
        trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
    } elseif ($type !== "" && $type !== []) {
        trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
    }
    $tmp = $type;
    if (isset($_REQUEST[$key])) {
        if (!is_array($_REQUEST[$key]) && !is_array($type)) {
            $tmp = trim(htmlspecialchars($_REQUEST[$key]));
        } elseif (is_array($_REQUEST[$key]) && is_array($type)) {
            $tmp = $_REQUEST[$key];
            array_walk_recursive($tmp, function (&$value) {
                $value = trim(htmlspecialchars($value));
            });
        }
    }
    return $tmp;
}

$filas = recoge("filas");

$filasOk = false;

$filasMinimo = 1;
$filasMaximo = 200;

if ($filas == "") {
    print "  <p class=\"aviso\">No ha escrito el número de filas.</p>\n";
    print "\n";
} elseif (!is_numeric($filas)) {
    print "  <p class=\"aviso\">No ha escrito el número de filas como número.</p>\n";
    print "\n";
} elseif (!ctype_digit($filas)) {
    print "  <p class=\"aviso\">No ha escrito el número de filas "
        . "como número entero positivo.</p>\n";
    print "\n";
} elseif ($filas < $filasMinimo || $filas > $filasMaximo) {
    print "  <p class=\"aviso\">El número de filas debe estar entre "
        . "$filasMinimo y $filasMaximo.</p>\n";
    print "\n";
} else {
    $filasOk = true;
}

if ($filasOk) {
    print "  <table class=\"conborde\">\n";
    print "    <tbody>\n";
    for ($i = 1; $i <= $filas; $i++) {
        print "      <tr>\n";
        print "        <td>$i</td>\n";
        print "      </tr>\n";
    }
    print "    </tbody>\n";
    print "  </table>\n";
    print "\n";
}

?>

For (3) 3 - Tabla de multiplicar sin cabecera

<?php
// Función de recogida de datos
function recoge($key, $type = "")
{
    if (!is_string($key) && !is_int($key) || $key == "") {
        trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
    } elseif ($type !== "" && $type !== []) {
        trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
    }
    $tmp = $type;
    if (isset($_REQUEST[$key])) {
        if (!is_array($_REQUEST[$key]) && !is_array($type)) {
            $tmp = trim(htmlspecialchars($_REQUEST[$key]));
        } elseif (is_array($_REQUEST[$key]) && is_array($type)) {
            $tmp = $_REQUEST[$key];
            array_walk_recursive($tmp, function (&$value) {
                $value = trim(htmlspecialchars($value));
            });
        }
    }
    return $tmp;
}

$numero = recoge("numero");

$numeroOk = false;

$numeroMinimo = 1;
$numeroMaximo = 100;

if ($numero == "") {
    print "  <p class=\"aviso\">No ha escrito el tamaño de la tabla.</p>\n";
    print "\n";
} elseif (!is_numeric($numero)) {
    print "  <p class=\"aviso\">No ha escrito el tamaño de la tabla como número.</p>\n";
    print "\n";
} elseif (!ctype_digit($numero)) {
    print "  <p class=\"aviso\">No ha escrito el tamaño de la tabla "
        . "como número entero positivo.</p>\n";
    print "\n";
} elseif ($numero < $numeroMinimo || $numero > $numeroMaximo) {
    print "  <p class=\"aviso\">El tamaño de la tabla debe estar entre "
        . "$numeroMinimo y $numeroMaximo.</p>\n";
    print "\n";
} else {
    $numeroOk = true;
}

if ($numeroOk) {
    print "  <table class=\"conborde\">\n";
    print "    <tbody>\n";
    for ($i = 1; $i <= $numero; $i++) {
        print "      <tr>\n";
        for ($j = 1; $j <= $numero; $j++) {
            print "        <td>" . $i * $j . "</td>\n";
        }
        print "      </tr>\n";
    }
    print "    </tbody>\n";
    print "  </table>\n";
    print "\n";
}

?>

For (3) 4 - Tabla de multiplicar con cabecera

<?php
// Función de recogida de datos
function recoge($key, $type = "")
{
    if (!is_string($key) && !is_int($key) || $key == "") {
        trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
    } elseif ($type !== "" && $type !== []) {
        trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
    }
    $tmp = $type;
    if (isset($_REQUEST[$key])) {
        if (!is_array($_REQUEST[$key]) && !is_array($type)) {
            $tmp = trim(htmlspecialchars($_REQUEST[$key]));
        } elseif (is_array($_REQUEST[$key]) && is_array($type)) {
            $tmp = $_REQUEST[$key];
            array_walk_recursive($tmp, function (&$value) {
                $value = trim(htmlspecialchars($value));
            });
        }
    }
    return $tmp;
}

$numero = recoge("numero");

$numeroOk = false;

$numeroMinimo = 1;
$numeroMaximo = 100;

if ($numero == "") {
    print "  <p class=\"aviso\">No ha escrito el tamaño de la tabla.</p>\n";
    print "\n";
} elseif (!is_numeric($numero)) {
    print "  <p class=\"aviso\">No ha escrito el tamaño de la tabla como número.</p>\n";
    print "\n";
} elseif (!ctype_digit($numero)) {
    print "  <p class=\"aviso\">No ha escrito el tamaño de la tabla "
        . "como número entero positivo.</p>\n";
    print "\n";
} elseif ($numero < $numeroMinimo || $numero > $numeroMaximo) {
    print "  <p class=\"aviso\">El tamaño de la tabla debe estar entre "
        . "$numeroMinimo y $numeroMaximo.</p>\n";
    print "\n";
} else {
    $numeroOk = true;
}

if ($numeroOk) {
    print "  <table class=\"conborde\">\n";
    print "    <tbody>\n";
    print "      <tr>\n";
    print "        <th>X</th>\n";
    for ($j = 1; $j <= $numero; $j++) {
        print "        <th>$j</th>\n";
    }
    print "      </tr>\n";

    for ($i = 1; $i <= $numero; $i++) {
        print "      <tr>\n";
        print "        <th>$i</th>\n";
        for ($j = 1; $j <= $numero; $j++) {
            print "        <td>" . $i * $j . "</td>\n";
        }
        print "      </tr>\n";
    }
    print "    </tbody>\n";
    print "  </table>\n";
    print "\n";
}

?>

For (3) 5 - Tabla de multiplicar

<?php
// Función de recogida de datos
function recoge($key, $type = "")
{
    if (!is_string($key) && !is_int($key) || $key == "") {
        trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
    } elseif ($type !== "" && $type !== []) {
        trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
    }
    $tmp = $type;
    if (isset($_REQUEST[$key])) {
        if (!is_array($_REQUEST[$key]) && !is_array($type)) {
            $tmp = trim(htmlspecialchars($_REQUEST[$key]));
        } elseif (is_array($_REQUEST[$key]) && is_array($type)) {
            $tmp = $_REQUEST[$key];
            array_walk_recursive($tmp, function (&$value) {
                $value = trim(htmlspecialchars($value));
            });
        }
    }
    return $tmp;
}

$filas    = recoge("filas");
$columnas = recoge("columnas");
$altura   = recoge("altura");
$anchura  = recoge("anchura");

$filasOk = $columnasOk = $alturaOk = $anchuraOk = false;

$filasMinimo   = $columnasMinimo   = 1;
$alturaMinimo  = 30;
$anchuraMinimo = 50;
$filasMaximo   = $columnasMaximo   = $alturaMaximo   = $anchuraMaximo   = 100;

if ($filas == "") {
    print "  <p class=\"aviso\">No ha escrito el número de filas.</p>\n";
    print "\n";
} elseif (!is_numeric($filas)) {
    print "  <p class=\"aviso\">No ha escrito el número de filas como número.</p>\n";
    print "\n";
} elseif (!ctype_digit($filas)) {
    print "  <p class=\"aviso\">No ha escrito el número de filas "
        . "como número entero positivo.</p>\n";
    print "\n";
} elseif ($filas < $filasMinimo || $filas > $filasMaximo) {
    print "  <p class=\"aviso\">El número de filas debe estar entre "
        . "$filasMinimo y $filasMaximo.</p>\n";
    print "\n";
} else {
    $filasOk = true;
}

if ($columnas == "") {
    print "  <p class=\"aviso\">No ha escrito el número de columnas.</p>\n";
    print "\n";
} elseif (!is_numeric($columnas)) {
    print "  <p class=\"aviso\">No ha escrito  el número de columnas como número.</p>\n";
    print "\n";
} elseif (!ctype_digit($columnas)) {
    print "  <p class=\"aviso\">No ha escrito el número de columnas "
        . "como número entero positivo.</p>\n";
    print "\n";
} elseif ($columnas < $columnasMinimo || $columnas > $columnasMaximo) {
    print "  <p class=\"aviso\">El número de columnas debe estar entre "
        . "$columnasMinimo y $columnasMaximo.</p>\n";
    print "\n";
} else {
    $columnasOk = true;
}

if ($altura == "") {
    print "  <p class=\"aviso\">No ha escrito la altura de las filas.</p>\n";
    print "\n";
} elseif (!is_numeric($altura)) {
    print "  <p class=\"aviso\">No ha escrito la altura de las filas como número.</p>\n";
    print "\n";
} elseif (!ctype_digit($altura)) {
    print "  <p class=\"aviso\">No ha escrito la altura de las filas "
        . "como número entero positivo.</p>\n";
    print "\n";
} elseif ($altura < $alturaMinimo || $altura > $alturaMaximo) {
    print "  <p class=\"aviso\">La altura de las filas debe estar entre "
        . "$alturaMinimo y $alturaMaximo.</p>\n";
    print "\n";
} else {
    $alturaOk = true;
}

if ($anchura == "") {
    print "  <p class=\"aviso\">No ha escrito la anchura de las columnas.</p>\n";
    print "\n";
} elseif (!is_numeric($anchura)) {
    print "  <p class=\"aviso\">No ha escrito la anchura de las columnas como número.</p>\n";
    print "\n";
} elseif (!ctype_digit($anchura)) {
    print "  <p class=\"aviso\">No ha escrito la anchura de las columnas "
        . "como número entero positivo.</p>\n";
    print "\n";
} elseif ($anchura < $anchuraMinimo || $anchura > $anchuraMaximo) {
    print "  <p class=\"aviso\">La anchura de las columnas debe estar entre "
        . "$anchuraMinimo y $anchuraMaximo.</p>\n";
    print "\n";
} else {
    $anchuraOk = true;
}

if ($filasOk && $columnasOk && $alturaOk && $anchuraOk) {
    print "  <table class=\"conborde\" style=\"table-layout: fixed; border-collapse: collapse; width: " . ($anchura * ($columnas + 1)) . "px\">\n";
    print "    <tbody>\n";
    print "      <tr style=\"height: {$altura}px\">\n";
    print "        <th>X</th>\n";
    for ($j = 1; $j <= $columnas; $j++) {
        print "        <th>$j</th>\n";
    }
    print "      </tr>\n";

    for ($i = 1; $i <= $filas; $i++) {
        print "      <tr style=\"height: {$altura}px\">\n";
        print "        <th>$i</th>\n";
        for ($j = 1; $j <= $columnas; $j++) {
            print "        <td>" . $i * $j . "</td>\n";
        }
        print "      </tr>\n";
    }
    print "    </tbody>\n";
    print "  </table>\n";
    print "\n";
}

?>

For (3) 6 - Tablas de multiplicar

<?php
// Función de recogida de datos
function recoge($key, $type = "")
{
    if (!is_string($key) && !is_int($key) || $key == "") {
        trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
    } elseif ($type !== "" && $type !== []) {
        trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
    }
    $tmp = $type;
    if (isset($_REQUEST[$key])) {
        if (!is_array($_REQUEST[$key]) && !is_array($type)) {
            $tmp = trim(htmlspecialchars($_REQUEST[$key]));
        } elseif (is_array($_REQUEST[$key]) && is_array($type)) {
            $tmp = $_REQUEST[$key];
            array_walk_recursive($tmp, function (&$value) {
                $value = trim(htmlspecialchars($value));
            });
        }
    }
    return $tmp;
}

$numero = recoge("numero");

$numeroOk = false;

$numeroMinimo = 1;
$numeroMaximo = 20;

if ($numero == "") {
    print "  <p class=\"aviso\">No ha escrito el número de tablas.</p>\n";
    print "\n";
} elseif (!is_numeric($numero)) {
    print "  <p class=\"aviso\">No ha escrito  el número de tablas número.</p>\n";
    print "\n";
} elseif (!ctype_digit($numero)) {
    print "  <p class=\"aviso\">No ha escrito el número de tablas "
        . "como número entero positivo.</p>\n";
    print "\n";
} elseif ($numero < $numeroMinimo || $numero > $numeroMaximo) {
    print "  <p class=\"aviso\">El número de tablas debe estar entre "
        . "$numeroMinimo y $numeroMaximo.</p>\n";
    print "\n";
} else {
    $numeroOk = true;
}

if ($numeroOk) {
    for ($k = 1; $k <= $numero; $k++) {
        print "  <table class=\"conborde\">\n";
        print "    <caption>Tabla del $k</caption>\n";
        print "    <tbody>\n";
        print "      <tr>\n";
        print "        <th>X</th>\n";
        for ($j = 1; $j <= $k; $j++) {
            print "        <th>$j</th>\n";
        }
        print "      </tr>\n";

        for ($i = 1; $i <= $k; $i++) {
            print "      <tr>\n";
            print "        <th>$i</th>\n";
            for ($j = 1; $j <= $k; $j++) {
                print "        <td>" . $i * $j . "</td>\n";
            }
            print "      </tr>\n";
        }
        print "    </tbody>\n";
        print "  </table>\n";
        print "\n";
    }
}

?>

For (3) 7 - Tablas de colores

<?php
// Función de recogida de datos
function recoge($key, $type = "")
{
    if (!is_string($key) && !is_int($key) || $key == "") {
        trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
    } elseif ($type !== "" && $type !== []) {
        trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
    }
    $tmp = $type;
    if (isset($_REQUEST[$key])) {
        if (!is_array($_REQUEST[$key]) && !is_array($type)) {
            $tmp = trim(htmlspecialchars($_REQUEST[$key]));
        } elseif (is_array($_REQUEST[$key]) && is_array($type)) {
            $tmp = $_REQUEST[$key];
            array_walk_recursive($tmp, function (&$value) {
                $value = trim(htmlspecialchars($value));
            });
        }
    }
    return $tmp;
}

$numero = recoge("numero");

$numeroOk = false;

$numeroMinimo = 1;
$numeroMaximo = 20;

if ($numero == "") {
    print "  <p class=\"aviso\">No ha escrito el número de tablas.</p>\n";
    print "\n";
} elseif (!is_numeric($numero)) {
    print "  <p class=\"aviso\">No ha escrito el número de tablas como número.</p>\n";
    print "\n";
} elseif (!ctype_digit($numero)) {
    print "  <p class=\"aviso\">No ha escrito el número de tablas "
        . "como número entero positivo.</p>\n";
    print "\n";
} elseif ($numero < $numeroMinimo || $numero > $numeroMaximo) {
    print "  <p class=\"aviso\">El número de tablas debe estar entre "
        . "$numeroMinimo y $numeroMaximo.</p>\n";
    print "\n";
} else {
    $numeroOk = true;
}

if ($numeroOk) {
    $paso = $numero > 1 ? 255 / ($numero - 1) : 0;
    for ($k = 0; $k < $numero; $k++) {
        print "  <table class=\"conborde\">\n";
        print "    <caption>Tabla nº" . 1 + $k . "</caption>\n";
        print "    <tbody>\n";
        for ($i = 0; $i < $numero; $i++) {
            print "      <tr>\n";
            for ($j = 0; $j < $numero; $j++) {
                print "        <td style=\"background-color:rgb("
                    . round($k * $paso) . " " . round($i * $paso) . " "
                    . round($j * $paso) . ")\" title=\"R:" . round($k * $paso)
                    . " G:" . round($i * $paso) . " B:" . round($j * $paso)
                    . "\"></td>\n";
            }
            print "      </tr>\n";
        }
        print "    </tbody>\n";
        print "  </table>\n";
        print "\n";
    }
}

?>

For (3) 8 - Tabla numerada

<?php
// Función de recogida de datos
function recoge($key, $type = "")
{
    if (!is_string($key) && !is_int($key) || $key == "") {
        trigger_error("Function recoge(): Argument #1 (\$key) must be a non-empty string or an integer", E_USER_ERROR);
    } elseif ($type !== "" && $type !== []) {
        trigger_error("Function recoge(): Argument #2 (\$type) is optional, but if provided, it must be an empty array or an empty string", E_USER_ERROR);
    }
    $tmp = $type;
    if (isset($_REQUEST[$key])) {
        if (!is_array($_REQUEST[$key]) && !is_array($type)) {
            $tmp = trim(htmlspecialchars($_REQUEST[$key]));
        } elseif (is_array($_REQUEST[$key]) && is_array($type)) {
            $tmp = $_REQUEST[$key];
            array_walk_recursive($tmp, function (&$value) {
                $value = trim(htmlspecialchars($value));
            });
        }
    }
    return $tmp;
}

$numeradas = recoge("numeradas");
$columnas  = recoge("columnas");

$numeradasOk = $columnasOk = false;

$numeradasMinimo = 1;
$numeradasMaximo = 1000;
$columnasMinimo  = 1;
$columnasMaximo  = 100;

if ($numeradas == "") {
    print "  <p class=\"aviso\">No ha escrito el número de celdas numeradas.</p>\n";
    print "\n";
} elseif (!is_numeric($numeradas)) {
    print "  <p class=\"aviso\">No ha escrito el número de celdas como número.</p>\n";
    print "\n";
} elseif (!ctype_digit($numeradas)) {
    print "  <p class=\"aviso\">No ha escrito el número de celdas numeradas "
        . "como número entero.</p>\n";
    print "\n";
} elseif ($numeradas < $numeradasMinimo || $numeradas > $numeradasMaximo) {
    print "  <p class=\"aviso\">El número de celdas numeradas debe estar entre "
        . "$numeradasMinimo y $numeradasMaximo.</p>\n";
    print "\n";
} else {
    $numeradasOk = true;
}

if ($columnas == "") {
    print "  <p class=\"aviso\">No ha escrito el número de columnas.</p>\n";
    print "\n";
} elseif (!is_numeric($columnas)) {
    print "  <p class=\"aviso\">No ha escrito el número de columnas como número.</p>\n";
    print "\n";
} elseif (!ctype_digit($columnas)) {
    print "  <p class=\"aviso\">No ha escrito el número de columnas "
        . "como número entero.</p>\n";
    print "\n";
} elseif ($columnas < $columnasMinimo || $columnas > $columnasMaximo) {
    print "  <p class=\"aviso\">El número de columnas debe estar entre "
        . "$columnasMinimo y $columnasMaximo.</p>\n";
    print "\n";
} else {
    $columnasOk = true;
}

if ($numeradasOk && $columnasOk) {
    $filas = ceil($numeradas / $columnas);
    $contador = 1;
    print "  <table class=\"conborde\">\n";
    print "    <tbody>\n";
    for ($i = 1; $i <= $filas; $i++) {
        print "      <tr>\n";
        for ($j = 1; $j <= $columnas; $j++) {
            // Los paréntesis aquí son necesarios
            print "        <td>" . ($contador <= $numeradas ? $contador++ : "") . "</td>\n";
        }
        print "      </tr>\n";
    }
    print "    </tbody>\n";
    print "  </table>\n";
    print "\n";
}

?>