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

dynamische Anzahl von Variablen anlegen

  • Ersteller Ersteller Fishmasta
  • Erstellt am Erstellt am
F

Fishmasta

Guest
Hallo Leute,
ich habe folgendes Problem:

Sitze jetzt schon seit 2 Tagen an dem Problem,
dass ich ein Skript schreiben muss, welches die Anzahl der Einträge einer Tabelle in einer MySQL-Datenbank ermittelt
PHP:
<?php

    /*
    Session starten / wieder aufnehmen
    */

    session_start();
    
    /*
    Verbindung zum MySQL Server herstellen
    */
    
    $link = mysql_connect('localhost', 'root', '');
    if(!$link) {
        die('keine Verbindung möglich: ' .mysql_error());
    }
    
    /*
    Verbindung zur Datenbank herstellen
    */

    $db_selected = mysql_select_db('berufsinteressencheck', $link);
    if(!$db_selected) {
        die('Verbindung zu berufsinteressencheck konnte nicht hergestellt werden' . mysql_error());
    }

    /*
    Verbindung zur Tabelle herstellen
    */
    
    $result = mysql_query('SELECT Frage FROM interessen');
    if(!$result) {
        die('Ungültige Abfrage: ' . mysql_error());
    }

    /*
    Anzahl der Tabelleneinträge bestimmen
    */

    $anz_rows = mysql_num_rows($result);

    
?>

und mir dann $anz_rows verschiedene Variablen anlegt.

Habe schon einge Menge versucht, hat auch alles teilweise funktioniert aber nichts funktioniert 100%ig:
- Mit Arrays habe ich es nicht hinbekommen
- Die Einträge aus der DB als Variablenname hat auch nicht geklappt (auch nach einigen Modifikationen nicht)
- und dann noch ein paar Sachen die Google ausgespuckt hat

Ich hoffe ihr könnt mir helfen.
THX!
 
edit: jetzt kapiert was du willst. Warum sollte ein Array anlegen nicht funktionieren, wie hastes probiert?
 
Also wenn du nur die Anzahl brauchst geht das mit
Code:
 SELECT COUNT(frage) FROM interessen;

Aber wonach mir das aussieht was du machst ist eine Datenbank Abfrage in folgendes Array umzuwandeln

$array[rownumber]['nameDesFeldes'] . Kann das sein?

Wenn ja. Hier ist ein netter Code

PHP:
$query = mysql_query("SELECT * FROM tabelle");      
$arrayAusgabe = array();     
while($row = @mysql_fetch_array($query, MYSQL_ASSOC)) { 
       $arrayAusgabe[] = $row;     
 }
 
So wie ich das verstehe will er x Variablen haben, jenachdem wie viele Zeilen das SQL Statement zurückliefert.. aber was da rein soll kapier ich auch nicht,
 
Ich habe jetzt nochmal ein bischen rumprobiert, aber es noch nicht hinbekommen.
Deshalb hole ich jetzt mal was weiter aus.

Ich habe in einer DB eine variierende Anzahl von Einträgen.
Diese Einträge sind Fragen. Die beantwortert werden sollen.

Also brauche ich bei x Fragen eine Anzahl von x Variablen in denen der Wert des ausgewählten Radio-Buttons gespeicher wird.

So in etwa habe ich mir das gedacht:

PHP:
$result = mysql_query('SELECT Frage FROM interessen');
    if(!$result) {
        die('Ungültige Abfrage: ' . mysql_error());
    }
    
    /*
    Formular erzeugen
    Aufruf nach Bearbeitung: auswertung_interesen.php
    */
    
    echo'
        <form action="auswertung.php" method="post">
    ';
    
    /*
    Tabelle erzeugen
    */
    
    echo'
        <div class="fragen">
        <table width="100%">
            <tr>
                <td width="50%">
                    Es würde mir Spaß machen ...
                </td>
                <td>
                    &nbsp;
                </td>
            </tr>
    ';
    
    /*
    Datensätze aus der Tabelle abrufen
    */
    
    while($row = mysql_fetch_array($result, MYSQL_BOTH)) {

        //Irgendwie muss irgendwo für jeden Eintrag eine Variable erzeugt werden
        
        echo'
            <tr>
                <td>
                    <br />';
        /*
        Datensatz in die erste Spalte der Tabelle schreiben
        */
        
        printf("... %s.", $row[0]);
        
        /*
        Antwortmöglichkeiten in der zweiten Spalte ausgeben
        */
        
        echo'
            <br />
                </td>
                <td>
                    //Hier muss dann die Antwort in die Variable gespeichert werden
                    <input type="radio" name="variable" value="a" /> Trifft voll zu <br />
                    <input type="radio" name="variable" value="b" /> Trifft eher zu <br />
                    <input type="radio" name="variable" value="c" /> Trifft eher nicht zu <br />
                    <input type="radio" name="variable" value="d" /> Trifft überhaupt nicht zu <br />
                </td>
            </tr>
        ';
        
    }
    
    /*
    Tabelle schließen
    */
    
    echo'
        </table>
        </div>
    ';
        
    /*
    Speicher wieder freigeben
    */
    
    mysql_free_result($result);
    
    /*
    Button zum nächsten Fragenblock
    */
    
    echo'
        <br />
        <br />
        <input type="submit" name="Submit" value="zu den nächsten Fragen" />
    ';
    
    /*
    Formular schließen
    */
    
    echo'
        </form>
    ';

Ich hoffe ihr wisst was ich möchte.
Ansonsten einfach fragen :D
 
Also funktionieren tut das ganze jetzt,
aber ich denke mal das sich da noch einiges optimieren lässt.

Hier erstmal der Code:

PHP:
/*
    db_connect.php aufrufen:
    Verbindung zum MySQL Server und zur Datenbank herstellen
    */
    
    include('db_connect.php');
    
    /*
    Für jede Frage eine Variable erzeugen
    */
    
    $query = "select count(*) from interessen";
    $result = mysql_query($query);
    if(!result) {
        die('Ungültige Abfrage: ' . mysql_error());
    }
    $anzahldbeintraege = mysql_result($result,0);
    
    for($i = 0; $i < $anzahldbeintraege; $i++){
        $ans[$i] = $i;
        echo"$ans[$i]";
    }
    
    /*
    Verbindung zur Tabelle des Fragenblocks Interessen herstellen
    */
    
    $result = mysql_query('SELECT Frage FROM interessen');
    if(!$result) {
        die('Ungültige Abfrage: ' . mysql_error());
    }
    
    /*
    Formular erzeugen
    Aufruf nach Bearbeitung: auswertung_interesen.php
    */
    
    echo'
        <form action="pages/test.php" method="post">
    ';
    
    /*
    Tabelle erzeugen
    */
    
    echo'
        <div class="fragen">
        <table width="100%">
            <tr>
                <td width="50%">
                    Es würde mir Spaß machen ...
                </td>
                <td>
                    &nbsp;
                </td>
            </tr>
    ';
    
    /*
    Datensätze aus der Tabelle abrufen
    */
    
    $tmp = 0;
    
    while($row = mysql_fetch_array($result, MYSQL_BOTH)) {
        
        echo'
            <tr>
                <td>
                    <br />';
        /*
        Datensatz in die erste Spalte der Tabelle schreiben
        */
        
        printf("... %s.", $row[0]);
        
        /*
        Antwortmöglichkeiten in der zweiten Spalte ausgeben
        */
        
        echo"
            <br />
                </td>
                <td>
                    <input type=\"radio\" name=\"$ans[$tmp]\" value=\"a\" /> Trifft voll zu <br />
                    <input type=\"radio\" name=\"$ans[$tmp]\" value=\"b\" /> Trifft eher zu <br />
                    <input type=\"radio\" name=\"$ans[$tmp]\" value=\"c\" /> Trifft eher nicht zu <br />
                    <input type=\"radio\" name=\"$ans[$tmp]\" value=\"d\" /> Trifft überhaupt nicht zu <br />
                </td>
            </tr>
        ";
        
        $tmp++;
        
    }
    
    /*
    Tabelle schließen
    */
    
    echo'
        </table>
        </div>
    ';
        
    /*
    Speicher wieder freigeben
    */
    
    mysql_free_result($result);
    
    /*
    Button zum nächsten Fragenblock
    */
    
    echo'
        <br />
        <br />
        <input type="submit" name="Submit" value="zu den nächsten Fragen" />
    ';
    
    /*
    Formular schließen
    */
    
    echo'
        </form>
    ';
    
    /*
    Verbindung zum MySQL Server beenden
    */
    
    mysql_close($link);

Der Code von test.php:
PHP:
<?php
    
    error_reporting(E_ALL);
    ini_set('display_errors',true);
    
    include('db_connect.php');
    
    print_r($_POST);
        
?>

Die Ausgabe von test.php:
Array ( [0] => a [1] => b [2] => c [Submit] => zu den nächsten Fragen )

Folgendes könnte ich mir vorstellen, was zu optimieren wäre:
- Die deklaration und das erhöhen von $tmp um 1 kann man bestimmt eleganter gestalten
- Folgendes Codesegment habe ich 2 mal drin:
PHP:
$result = mysql_query('SELECT Frage FROM interessen');
    if(!$result) {
        die('Ungültige Abfrage: ' . mysql_error());
    }

Einmal um die Einträge in der Tabelle zu zählen und dementsprechend viele Variablen zu erzeugen und einmal um die Einträge der Tabelle auszugeben.

Kann man den Code evtl. so abändern, dass diese Abfrage nur noch einmal gemacht werden muss?
Wenn das nicht geht, wäre es sinnvoll den Code in ein eigenes .php-Dokument zu schreiben und dieses über include einzubinden?

Wenn ihr sonst noch was ändern würdet, immer her mit den Vorschlägen!

DANKE!!!
 
Wenn du nicht irgend etwas anderes bei stehen hast sollte dieser Code das gleiche bewirken :)

PHP:
<?php
  /*
    db_connect.php aufrufen:
    Verbindung zum MySQL Server und zur Datenbank herstellen
    */
    
    include('db_connect.php');
    
    /*
    Für jede Frage eine Variable erzeugen
    */
    
    /* WOZU?
    $query = "select count(*) from interessen";
    $result = mysql_query($query);
    if(!result) {
        die('Ungültige Abfrage: ' . mysql_error());
    }
    $anzahldbeintraege = mysql_result($result,0);
    
    for($i = 0; $i < $anzahldbeintraege; $i++){
        $ans[$i] = $i;
        echo"$ans[$i]";
    }
    
    */
    
    /*
    Verbindung zur Tabelle des Fragenblocks Interessen herstellen
    */
    
    $result = mysql_query('SELECT Frage FROM interessen');
    if(!$result) {
        die('Ungültige Abfrage: ' . mysql_error());
    }
    
    /*
    Formular erzeugen
    Aufruf nach Bearbeitung: auswertung_interesen.php
    */
    
    echo'
        <form action="pages/test.php" method="post">
    ';
    
    /*
    Tabelle erzeugen
    */
    
    echo'
        <div class="fragen">
        <table width="100%">
            <tr>
                <td width="50%">
                    Es würde mir Spaß machen ...
                </td>
                <td>
                    &nbsp;
                </td>
            </tr>
    ';
    
    /*
    Datensätze aus der Tabelle abrufen
    */
    
    $tmp = 0;
    
    while($row = mysql_fetch_array($result, MYSQL_BOTH)) {
        
        echo'
            <tr>
                <td>
                    <br />';
        /*
        Datensatz in die erste Spalte der Tabelle schreiben
        */
        
        printf("... %s.", $row[0]);
        
        /*
        Antwortmöglichkeiten in der zweiten Spalte ausgeben
        */
        
        echo"
            <br />
                </td>
                <td>
                    <input type=\"radio\" name=\"$tmp\" value=\"a\" /> Trifft voll zu <br />
                    <input type=\"radio\" name=\"$tmp\" value=\"b\" /> Trifft eher zu <br />
                    <input type=\"radio\" name=\"$tmp\" value=\"c\" /> Trifft eher nicht zu <br />
                    <input type=\"radio\" name=\"$tmp\" value=\"d\" /> Trifft überhaupt nicht zu <br />
                </td>
            </tr>
        ";
        
        $tmp++;
        
    }
    
    /*
    Tabelle schließen
    */
    
    echo'
        </table>
        </div>
    ';
        
    /*
    Speicher wieder freigeben
    */
    
    mysql_free_result($result);
    
    /*
    Button zum nächsten Fragenblock
    */
    
    echo'
        <br />
        <br />
        <input type="submit" name="Submit" value="zu den nächsten Fragen" />
    ';
    
    /*
    Formular schließen
    */
    
    echo'
        </form>
    ';
    
    /*
    Verbindung zum MySQL Server beenden
    */
    
    mysql_close($link);  
?>
 
So nun funzt die Übertragung per POST, habe aber gleich das nächste Problem :(

Bekomme folgendes Array übergeben:
Array ( [0] => a [1] => b [2] => c [Submit] => zu den nächsten Fragen )

Aber wie greife ich jetzt auf die einzelnen Elemente im Array zu um Sie z.B. in deiner lokalen Variable zu speichern oder in einer if-Abfrage zu überprüfen?

$tmp[0]->0

echo"$tmp[0]"


for ($x = 0; $x < sizeof($tmp); ++$x) { echo "key: ".key($tmp)."<br>value: ".current($tmp)."<br>"; next($tmp); }

hat alles nicht funktioniert -.-
($tmp) ist mein array
 
Du willst durch die POST Variable iterieren? Denke das solltest du nicht.
Vor allem wenn es um nur eine Frage geht hättest du es dir viel leichter machen können.

HTML:
  <form action="pages/test.php" method="post">
     <p>Frage: Ist das gut?</p>
    <input type="radio" name="frage[0]" value="a"> Trifft zu
    <input type="radio" name="frage[0]" value="b"> Trifft fast zu
    <input type="radio" name="frage[0]" value="c"> Trifft nicht zu

    <p>Frage: Ist das auch gut?</p>
    <input type="radio" name="frage[1]" value="a"> Trifft zu
    <input type="radio" name="frage[1]" value="b"> Trifft fast zu
    <input type="radio" name="frage[1]" value="c"> Trifft nicht zu

    <input type="submit" value="OK"> 
  </form>

Nach dem Absenden würdest du in der POST Variable eine Variable haben mit dem Namen: frage. Diese wäre ein Array. Mit den gegeben Antworten. Hier ein Beispiel wie deine Post Variable aussähe.

Code:
array(1) {   ["frage"]=>   array(2) {     [0]=>     string(1) "a"     [1]=>     string(1) "c"   } }

Ich hab bei der ersten Frage a gewählt und bei der zweiten c.

Nun machst du auf deiner PHP-Seite folgendes:

PHP:
<?php
  $fragen = $_POST['frage'];
  for($i=0; $i < sizeof($fragen); $i++) {
    echo "Frage Nr. ".($i+1)." wurde mit ".$fragen[$i]." beantwortet<br/>";
  }

?>

Falls du was anderes machen willst sei bitte etwas präziser mit deinen Fragen :) Dann kann dir besser geholfen werden.
 
Zuletzt bearbeitet:
Das ganze brauche ich nicht für eine Frage sondern für eine variable Anzahl von Fragen abhängig von der Anzahl der Datenbankeinträge.
Deshalb ja auch das ganze Theater mit einer variablen Anzahl von Variablen.

So wird das Formular generiert:
PHP:
/*
    db_connect.php aufrufen:
    Verbindung zum MySQL Server und zur Datenbank herstellen
    */
    
    include('db_connect.php');
    
    /*
    Verbindung zur Tabelle des Fragenblocks Interessen herstellen
    */
    
    $result = mysql_query('SELECT Frage FROM interessen');
    if(!$result) {
        die('Ungültige Abfrage: ' . mysql_error());
    }
    
    /*
    Formular erzeugen
    Aufruf nach Bearbeitung: auswertung_interessen.php
    // hier noch zur Erklärung: auswertung_interessen.php wird in index.php?section=faehigkeiten included
    */
    
    echo'
        <form action="index.php?section=faehigkeiten" method="post">
    ';
    
    /*
    Tabelle erzeugen
    */
    
    echo'
        <div class="fragen">
        <table width="100%">
            <tr>
                <td width="50%">
                    Es würde mir Spaß machen ...
                </td>
                <td>
                    &nbsp;
                </td>
            </tr>
    ';
    
    /*
    Datensätze aus der Tabelle abrufen
    und Variable für jede Frage anlegen
    */
    
    $tmp = 0;
    
    while($row = mysql_fetch_array($result, MYSQL_BOTH)) {
        
        echo'
            <tr>
                <td>
                    <br />';
        /*
        Datensatz in die erste Spalte der Tabelle schreiben
        */
        
        printf("... %s.", $row[0]);
        
        /*
        Antwortmöglichkeiten in der zweiten Spalte ausgeben
        */
        
        echo"
            <br />
                </td>
                <td>
                    <input type=\"radio\" name=\"$tmp\" value=\"a\" /> Trifft voll zu <br />
                    <input type=\"radio\" name=\"$tmp\" value=\"b\" /> Trifft eher zu <br />
                    <input type=\"radio\" name=\"$tmp\" value=\"c\" /> Trifft eher nicht zu <br />
                    <input type=\"radio\" name=\"$tmp\" value=\"d\" /> Trifft überhaupt nicht zu <br />
                </td>
            </tr>
        ";
        
        $tmp++;
        
    }
    
    /*
    Tabelle schließen
    */
    
    echo'
        </table>
        </div>
    ';
        
    /*
    Speicher wieder freigeben
    */
    
    mysql_free_result($result);
    
    /*
    Button zum nächsten Fragenblock
    */
    
    echo'
        <br />
        <br />
        <input type="submit" name="Submit" value="zu den nächsten Fragen" />
    ';
    
    /*
    Formular schließen
    */
    
    echo'
        </form>
    ';
    
    /*
    Verbindung zum MySQL Server beenden
    */
    
    mysql_close($link);

Anhand von
PHP:
print_r($_POST);
lasse ich mir die übergebenen POST-Variablen ausgeben.

Ausgabe:
Code:
Array (     [0] => a     [1] => b     [2] => c     [Submit] => zu den nächsten Fragen )
Daraus lese ich:
tmp[0] = a
tmp[1] = b
tmp[2] = c

Soweit ist noch alles korrekt.

Jetzt müsst ich allerdigns irgendetwas coden,
damit ich mit den Variablen arbeiten kann.

Also in etwa so:
PHP:
if($_POST['tmp[0]'] == a) {
     // führe Aktion 1 aus
} else {
     // führe Aktion 2 aus
}

Ich bekomm aber wie o.g. keinen Zugriff auf die POST-Variablen hin :(
 
Wieso du keinen zugriff auf die $_POST Variable hast kann ich dir nicht sagen, aber schau dir bitte mal meinen Code an. Wenn du den mit dynamischen Inhalten umsetzt, passt das doch.
Denn deine Variante gibt dir keine Garantie wieviele Fragen eigentlich beantwortet worden sind. Denn du hast zum Beispiel auch den Submit dabei und eventuell noch andere Formular Daten.

Edit:
Ich nehms zurück. Wie kommst du auf $_POST['tmp[0]'] ?
Im Formular hast du später nur den Wert von temp stehen. Was dementsprechen 0, 1, 2 usw wäre.
Somit wäre der Zugriff $_POST['0'];
Du lässt dir doch schon die $_POST Variable über print_r ausgeben. Da steht ja auch nichts von tmp drin :)
Wie schon vorher erwähnt. Bitte schau dir mal meine Code-Schnipsel an die ich gepostet habe.
Wenn du garnicht klar kommst, kann ich dir auch gerne heute abend per Teamviewer oder so helfen. Weil bei dir hat sich ein merkwürdiger Denkfehler eingeschlichen :)
 
Zurück
Oben