Как реализовать два php mysql запроса и отобразить в двух таблицах? - PullRequest
0 голосов
/ 24 февраля 2020

Я хочу запросить две таблицы и отобразить каждую таблицу на одной и той же странице html, я использую два блока php каждый для каждого запроса, когда я использую только один блок <?php...?> на странице, она отлично работает но при использовании обоих кусков я получаю HTTP ERROR 500. Мой код:

<!DOCTYPE html>
...

<?php
echo "<table style='border: solid 1px black;'>";
 echo "<tr>
    <th>R1</th>
    <th>R2</th>
    <th>R3</th>
    <th>R4</th>
    <th>R5</th>
    </tr>";

class TableRows extends RecursiveIteratorIterator {
    function __construct($it) {
        parent::__construct($it, self::LEAVES_ONLY);
    }

    function current() {
        return "<td style='width: 30px; border-bottom: 1px solid #000000;  border-right: 1px solid #000000; text-align:center;'>" . parent::current(). "</td>";
    }

    function beginChildren() {
        echo "<tr>";
    }

    function endChildren() {
        echo "</tr>" . "\n";
    }
}

$servername = "";
$username = "";
$password = "";
$dbname = "";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT R1, R2, R3, R4, R5 FROM chispazo_numeros");
    $stmt->execute();

    // set the resulting array to associative
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
        echo $v;
    }
}
catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>

<h2></h2>

<?php
echo "<table style='border: solid 1px black;'>";
 echo "<tr>
    <th>R1</th>
    <th>R2</th>
    <th>R3</th>
    <th>R4</th>
    <th>R5</th>
    <th>MEDIA</th>
    <th>PRIMOS</th>
    <th>REP</th>
    </tr>";

class TableRows extends RecursiveIteratorIterator {
    function __construct($it1) {
        parent::__construct($it1, self::LEAVES_ONLY);
    }

    function current() {
        return "<td style='width: 30px; border-bottom: 1px solid #000000;  border-right: 1px solid #000000; text-align:center;'>" . parent::current(). "</td>";
    }

    function beginChildren() {
        echo "<tr>";
    }

    function endChildren() {
        echo "</tr>" . "\n";
    }
}

$servername = "";
$username = "";
$password = "";
$dbname = "";

try {
    $conn1 = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt1 = $conn1->prepare("SELECT R1, R2, R3, R4, R5, MEDIA, N_PRIMOS, REP FROM chispazo_libres ORDER BY RAND() LIMIT 1");
    $stmt1->execute();

    // set the resulting array to associative
    $result1 = $stmt1->setFetchMode(PDO::FETCH_ASSOC);

    foreach(new TableRows(new RecursiveArrayIterator($stmt1->fetchAll())) as $k1=>$v1) {
        echo $v1;
    }
}
catch(PDOException $e1) {
    echo "Error: " . $e1->getMessage();
}
$conn1 = null;
echo "</table>";
?>

...

Я не знаю, рекомендуется ли повторять соединение, я попытался поместить два блока php в один, но он не работает.

Любой совет будет благодарен.

1 Ответ

1 голос
/ 24 февраля 2020

В одном файле php объявлено два класса TableRows. Чтобы обойти это, внесите следующие изменения:

  • Переименуйте первый TableRows класс в class FirstTableRows extends ...
  • Переименуйте второй TableRows класс в class SecondTableRows extends ...
  • В первом foreach l oop измените new TableRows(...) на new FirstTableRows(...)
  • Во втором foreach l oop измените new TableRows(...) на new SecondTableRows(...)
...