• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Brauche Hilfe bei Ausgabe von variablen

Sacul

Neues Mitglied
Ich möchte mehrere div Tabellen die einer weiteren untergeordnet sind mit verschieden variablen Inhalten füllen. Mann kann sich das Vorstellen wie eine Zeile, die sich immer wiederholt und durch die variablen verschiedene Inhalte bei dieser Ausgabe bekommt. Das klappt auch alles (siehe code). Ich möchte jedoch die variable i nur ausgeben wenn man auf den button mehr klickt. bei meinen bisherigen versuchen haben ich dann alle i Inhalte hinzugefügt. ich möchte aber immer nur das i der zugehörigen Zeile aufrufen. wenn ich eine Zeile drunter mehr klicke soll das i dieser zeile angezeigt werden (in firmen_inhalt jeweils) unddas andere nicht mehr. Ich brauch echt dringend Hilfe würde mich freuen wenn ich schnell antworten bekäme.


PHP:
  $kommando->bind_result($index, $bereich, $firmenname, $ort, $plz, $strasse, $strasse, $hausnummer, $telefon, $i, $j, $k);


    while ($kommando->fetch()) {
    






echo'<div id="firmen">

				<div id="firmen_daten">

							<div id="firmen_name">
							<p>'.$firmenname.'</p>
							</div>

							<div id="firmen_mehr">
							<input type="submit" name="submit" value="mehr..." />
							</div>

							<div id="firmen_stadt">
							<p>'.$plz.' - '.$ort.'test</p>
							</div>

							<div id="firmen_strasse">
							<p>'.$strasse.' '.$hausnummer.'</p>
							</div>

							<div id="firmen_telefon">
							<p>'.$telefon.'</p>
							</div>



				</div>

				<div id="$firmen_inhalt">
                                '.$i.'
                                </div>

                                </div>';
}



    $db->close();


?>
 
Werbung:
Ich möchte mehrere div Tabellen die einer weiteren untergeordnet sind mit verschieden variablen Inhalten füllen. Mann kann sich das Vorstellen wie eine Zeile, die sich immer wiederholt und durch die variablen verschiedene Inhalte bei dieser Ausgabe bekommt. Das klappt auch alles (siehe code). Ich möchte jedoch die variable i nur ausgeben wenn man auf den button mehr klickt.

Das hier verstehe ich glaube ich noch, den Rest leider nicht mehr.

Du möchtest also eine Anzahl Datensätze ausgeben und bei jedem Datensatz einen Button "mehr" haben, der beim Klick ohne Seitenreload weitere Informationen zum Datensatz "ausklappt"? Das ginge mit JavaScript. Aber ich bin mir nicht sicher, dass du das meinst.
 
jap das meine ich! ich kann auch verstehen, dass dieser [mehr...] button außerhalb der schleife sein muss, ich weiß aber nicht wie am besten?!

ach und bevor ichs vergesse mir wärs lieber es ginge irgendwie mit php, es muss auch nicht animiert sein aber wen das zu komplex ist dann meinetwegen auch nen Tipp für java. Danke schonmal!
 
Werbung:
Mit JavaScript/jQuery ginge es zum Beispiel so. (Das verlinkte jQuery-Script sollte auf der eigenen Domain liegen.) Die foreach-Schleife kannst du natürlich wieder in deine MySQLi(?)-Schleife umändern. Ich hatte die DB-Daten nicht zum Testen. Ist JS deaktiviert, werden standardmäßig alle Daten angezeigt.

Code:
<?php

function sanitize($s)
{
    return htmlspecialchars(trim($s));
}

#$kommando->bind_result($index, $bereich, $firmenname, $ort, $plz, $strasse,
#                       $strasse, $hausnummer, $telefon, $i, $j, $k);

#while ($kommando->fetch()) {

$data = array(
    array(
        'id'         => '4',
        'firmenname' => 'ABC Firma',
        'plz'        => '1234',
        'ort'        => 'Berlin',
        'strasse'    => 'Elchweg',
        'hausnummer' => '2',
        'telefon'    => '+49 1234 12345'
    ),
    array(
        'id'         => '12',
        'firmenname' => 'Torfabrik Seilmeyer & Söhne',
        'plz'        => '45632',
        'ort'        => 'Siegen',
        'strasse'    => 'Strubbelstraße',
        'hausnummer' => '48',
        'telefon'    => '+49 3434 34565'
    ),
    array(
        'id'         => '36',
        'firmenname' => 'Städtischer Zoo',
        'plz'        => '89435',
        'ort'        => 'Kulmswinkel',
        'strasse'    => 'Am Rübenberg',
        'hausnummer' => '1-12',
        'telefon'    => '+49 4654 973290'
    )
);

?>

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>

<script type="text/javascript">

$(document).ready(function () {
    $('.additional').each(function (i, val) {
        var tmp = document.createElement('p');

        $(tmp).addClass('toggle');

        $(tmp).toggle(function () {
            $(val).addClass('hidden');
            $(this).html('mehr')
        },
        function () {
            $(val).removeClass('hidden');
            $(this).html('weniger')
        }).click();

        $(val).before(tmp);
    });
});


</script>

<style type="text/css">

.hidden {
    display: none;
}

.toggle {
    cursor: pointer;
    background: #eee;
}

.additional {
    border: 1px solid #eee;
}

</style>

<?php foreach ($data as $d): extract($d); ?>

<div style="border-bottom: 1px solid #ccc;">
    <p><?php echo sanitize($firmenname); ?></p>
    <p><?php echo sanitize($plz) . ' - ' . sanitize($ort); ?></p>
    <p><?php echo sanitize($strasse) . ' ' . sanitize($hausnummer); ?></p>
    <p><?php echo sanitize($telefon); ?></p>
    <div class="additional">
        <p>ID: <?php echo sanitize($id); ?></p>
    </div>
</div>

<?php endforeach; ?>

PS: Mit PHP (und Pagereload) ginge es natürlich auch, aber dazu ist mir die Problembeschreibung irgendwie noch zu ungenau.
 
Total nett, dass ich so schnell Hilfe bekommen habe, jedoch ist es noch nicht ganz das was ich suche, ich müsste das ganze schon in php haben. Ich versuche mein Problem nochmals deutlich zu machen! Also um es zu vereinfachen nehme ich jetzt mal 2 <div> Tabellen die erste ist meinetwegen 400px breit und 100px hoch! In dieser soll ein Name eine Telefonnummer und eine Anschrift stehen, diese Informationen möchte ich aus einer db abfragen. Die 400px breite und 100px hohe div tabelle soll sich dabei immer wiederholen, deswegen habe ich sie mit in die while schleife geschrieben und die daten darin ausgeben lassen. Das klappt ja auch alles. Nun möchte ich aber in einer zweiten div Tabelle der selben breite aber beliebiger höhe, einen kurzen text ausgeben, der aber nur ausgegeben wird wenn der Anwender auf mehr.. klickt. Dieser Text und die div Tabelle dazu, sollen immer unter dem feld ausgegeben werden, zu welchen Datensätzen die gehören. Klicke ich auf ein anderes mehr... einer anderen 400px breiten und 100px hohen div tabelle, so soll sich die bereits offene schließen und sich die neue öffnen. Ich weiß das ist schwär aber ich möchte es umbedingt in php hinbekommen! sitze schon Stunden dran bitte helft mir! :)
 
Werbung:
Etwa so?

PHP:
<?php

function sanitize($s)
{
    return htmlspecialchars(trim($s));
}

#$kommando->bind_result($index, $bereich, $firmenname, $ort, $plz, $strasse,
#                       $strasse, $hausnummer, $telefon, $i, $j, $k);

#while ($kommando->fetch()) {

$data = array(
    array(
        'id'         => '4',
        'firmenname' => 'ABC Firma',
        'plz'        => '1234',
        'ort'        => 'Berlin',
        'strasse'    => 'Elchweg',
        'hausnummer' => '2',
        'telefon'    => '+49 1234 12345',
        'info'       => 'ABC Firma ist eine Beispielfirma, die ich mir ausgedacht habe.'
    ),
    array(
        'id'         => '12',
        'firmenname' => 'Torfabrik Seilmeyer & Söhne',
        'plz'        => '45632',
        'ort'        => 'Siegen',
        'strasse'    => 'Strubbelstraße',
        'hausnummer' => '48',
        'telefon'    => '+49 3434 34565',
        'info'       => 'Tore sind wichtig für Fußball.'
    ),
    array(
        'id'         => '36',
        'firmenname' => 'Städtischer Zoo',
        'plz'        => '89435',
        'ort'        => 'Kulmswinkel',
        'strasse'    => 'Am Rübenberg',
        'hausnummer' => '1-12',
        'telefon'    => '+49 4654 973290',
        'info'       => 'Braucht immer viele Rüben.'
    )
);

header('Content-Type: text/html; charset=UTF-8');

?>

<style type="text/css">

.entry {
    width: 390px;
    padding: 4px;
    border: 1px solid #ccc;
    margin-bottom: 10px;
}

.info {
    margin-left: 80px;
}

</style>

<?php foreach ($data as $d): extract($d); ?>

    <div class="entry">
        <p><?php echo sanitize($firmenname); ?></p>
        <p><?php echo sanitize($plz) . ' - ' . sanitize($ort); ?></p>
        <p><?php echo sanitize($strasse) . ' ' . sanitize($hausnummer); ?></p>
        <p><?php echo sanitize($telefon); ?></p>
        <?php if ($id != $_GET['more']): ?>
            <p><a href="?more=<?php echo sanitize($id); ?>">Mehr</a></p>
        <?php endif; ?>
    </div>

    <?php if ($id == $_GET['more']): ?>
    <div class="entry info">
        <p><?php echo sanitize($info); ?></p>
    </div>
    <?php endif; ?>

<?php endforeach; ?>
 
noch eine nervige frage sorry^^ich hab das jetzt so auskomentiert und geändert warum geht es jetzt nicht mehr was habe ich vergessen?

PHP:
<?php

function sanitize($s)
{
    return htmlspecialchars(trim($s));
}

$kommando->bind_result($index, $bereich, $firmenname, $ort, $plz, $strasse,
                       $strasse, $hausnummer, $telefon, $i, $j, $k);

while ($kommando->fetch()) {

/*$data = array(
    array(
        'id'         => '4',
        'firmenname' => 'ABC Firma',
        'plz'        => '1234',
        'ort'        => 'Berlin',
        'strasse'    => 'Elchweg',
        'hausnummer' => '2',
        'telefon'    => '+49 1234 12345',
        'info'       => 'ABC Firma ist eine Beispielfirma, die ich mir ausgedacht habe.'
    ),
    array(
        'id'         => '12',
        'firmenname' => 'Torfabrik Seilmeyer & Söhne',
        'plz'        => '45632',
        'ort'        => 'Siegen',
        'strasse'    => 'Strubbelstraße',
        'hausnummer' => '48',
        'telefon'    => '+49 3434 34565',
        'info'       => 'Tore sind wichtig für Fußball.'
    ),
    array(
        'id'         => '36',
        'firmenname' => 'Städtischer Zoo',
        'plz'        => '89435',
        'ort'        => 'Kulmswinkel',
        'strasse'    => 'Am Rübenberg',
        'hausnummer' => '1-12',
        'telefon'    => '+49 4654 973290',
        'info'       => 'Braucht immer viele Rüben.'
    )
);*/

header('Content-Type: text/html; charset=UTF-8');

?>

<style type="text/css">

.entry {
    width: 390px;
    padding: 4px;
    border: 1px solid #ccc;
    margin-bottom: 10px;
}

.info {
    margin-left: 80px;
}

</style>

<?php foreach ($data as $d): extract($d); ?>

    <div class="entry">
        <p><?php echo sanitize($firmenname); ?></p>
        <p><?php echo sanitize($plz) . ' - ' . sanitize($ort); ?></p>
        <p><?php echo sanitize($strasse) . ' ' . sanitize($hausnummer); ?></p>
        <p><?php echo sanitize($telefon); ?></p>
        <?php if ($id != $_GET['more']): ?>
            <p><a href="?more=<?php echo sanitize($id); ?>">Mehr</a></p>
        <?php endif; ?>
    </div>

    <?php if ($id == $_GET['more']): ?>
    <div class="entry info">
        <p><?php echo sanitize($info); ?></p>
    </div>
    <?php endif; ?>

<?php endforeach; ?>

ich bekomme eine fehlermeldung für die zeile
PHP:
<?php endforeach; ?>

ah ok hab noch nen fehler gefunden, ich muss die while schleife beenden aber dann beschwert er sich trotztdem hab das jetzt einfach so gemeacht:
PHP:
<?php endforeach; ?>}

was ist noch falsch? nun sagt er fehler in der zeile:

PHP:
$kommando->bind_result($index, $bereich, $firmenname, $ort, $plz, $strasse,
                       $strasse, $hausnummer, $telefon, $i, $j, $k);>
 
Werbung:
Deine while-Schleife ist nicht geschlossen ("}") und die foreach-Schleife kann insgesamt raus (die gehört zu meinem Beispiel) und die Variablennamen müsstest du wahrscheinlich noch teilweise anpassen.

Edit: Das "}" muss zwischen PHP-Tags stehen (<?php ... ?>).
 
Danke hab meinen fehler schon gefunden hatte nichts mit deinem code zu tun - hätte ich auch nicht glauben können - du bist echt klaasse - danke
PS: ich hoffe ich darf den code frei verwenden ?!
 
Werbung:
wie mache ich das denn jetzt, wenn ich nach 20 dieser ausgaben einen weiter link haben möchte, so dass ich wenn ich den dann klicke auf die nächste seite komme und meine ausgabe da bis 20 wieder weitergeht? und wie kann ich die ausgabe dann nach den einzelnen variablen sortiern, so dass auch die auf der dann nächsten seite berücksichtigt werden. ich hätte dann z.B. gerne eine ausgabe aller datensätze, die irgend eine bestimmte plz haben?! Es soll aber halt trotzdem immer nach zwanzig ausgaben einen umbruch auf die nächste seite geben.
 
Zuletzt bearbeitet:
Ich denke, am einfachsten ist es mir zwei Datenbankqueries (die müssten dann eigentlich innerhalb einer Transaktion abgeschickt werden).

1. Query: "SELECT COUNT(*) FROM `table` WHERE ...", um die Maximalzahl der darzustellenden Einträge zu ermitteln.

2. Query: "SELECT `col1`, `col2` FROM `table` WHERE ... ORDER BY ... LIMIT $x,$y", um die darzustellenden Einträge für eine Seite zu ermitteln.
$y = Anzahl der Einträge pro Seite,
$x = (Index der aktuellen Seite minus 1) * $y.

Die Aktuelle Seitenzahl bestimmst du über einen GET-Parameter:

PHP:
$config['entries_per_page'] = 5;

// ...

// $count = Anzahl der darzustellenden Datensätze, Ergebnis von Query #1

$maxPage = ceil($count / $config['entries_per_page']);

if (!isset($_GET['page'])) {
    $_GET['page'] = 1;
} else {
    $_GET['page'] = (int) $_GET['page'];
}

if ($_GET['page'] > $maxPage) {
    $_GET['page'] = $maxPage;
} else if ($_GET['page'] < 1) {
    $_GET['page'] = 1;
}

$_GET['page'] hat jetzt den Wert der aktuellen Seite.

PHP:
// Query #2 mit $y = $config['entries_per_page'], $x = ($_GET['page'] - 1) * $y;

Navigation für "Zurück", "Weiter":

PHP:
<?php if ($_GET['page'] > 1): ?>
    <a href="?page=<?php echo ($_GET['page'] - 1); ?>">Zurück</a>
<?php endif; ?>

<?php echo $_GET['page'] . '/' . $maxPage; ?>

<?php if ($_GET['page'] < $maxPage): ?>
    <a href="?page=<?php echo ($_GET['page'] + 1); ?>">Weiter</a>
<?php endif; ?>

Bei den ?more-Links muss der page-Parameter auch mit übergeben werden:

PHP:
<p><a href="?more=<?php echo sanitize($id); ?>&amp;page=<?php echo $_GET['page']; ?>">Mehr</a></p>

Die Schleife zur Ausgabe der Daten bleibt im Grunde so, sie arbeitet nur auf den durch LIMIT variierten Query-Daten.

Die Angaben hier lassen etwas außer Acht, dass sich der Datenbankinhalt zwischen zwei Reloads der Seite verändern kann und deshalb ein bestimmter ?more-Link vielleicht nicht mehr auf Seite 3, sondern auf Seite 4 zeigen müsste. Das wäre zu beheben, indem zum Beispiel die Datenbankabfrage gecachet wird. Aber ich denke, so wesentlich ist das erstmal nicht.
 
Sorry es funzt nicht so ganz wenn ich wieder meinen code hier habe:
PHP:
<?php



    $db = new MySQLi('localhost', 'root', '', 'test');
    $sql =" SELECT * FROM firmen WHERE bereich LIKE 'Schwalm-Eder-Kreis'";
    $kommando = $db->prepare($sql);
    $kommando->execute();

$kommando->bind_result($id, $bereich, $firmenname, $ort, $plz, $strasse,
                        $hausnummer, $h, $telefon, $info, $j, $k);


while ($kommando->fetch()) {



?>

<style type="text/css">

.entry {
    width: 570px;
    padding: 4px;
    border: 1px solid #ccc;
    margin-bottom: 10px;
    float: left;
}

.entry_inhalt {
    width: 500px;
    float: left;
    padding: 4px;
    border: 0px;
    margin-bottom: 0px;
}
.entry_mehr {
    width: 70px;
    float: right;
    padding: 4px;
    border: 0px;
    margin-bottom: 0px;
}

.info {
    width: 530px;
    margin-left: 40px;
    float: left;
}

</style>



    <div class="entry">
        <div class="entry_inhalt">
        <p><?php echo sanitize($firmenname); ?></p>
        <p><?php echo sanitize($plz) . ' - ' . sanitize($ort); ?></p>
        <p><?php echo sanitize($strasse) . ' ' . sanitize($hausnummer); ?></p>
        <p><?php echo sanitize($telefon); ?></p>
        </div>
        <?php if ($id != $_GET['more']): ?>
            <p><a href="?more=<?php echo sanitize($id); ?>">Mehr...</a></p>
        <?php endif; ?>
    </div>

    <?php if ($id == $_GET['more']): ?>
    <div class="entry info">
        <p><?php echo sanitize($info); ?></p>
    </div>
    <?php endif;



}
    $db->close();

    ?>

Wo füge ich dann was ein? Sorry ich bin noch nicht so drin, ich verstehe zwar was du meinst aber ichweiß halt noch nicht ganz wie?! sorry
 
Werbung:
Zurück
Oben