Daten aus MySQL anordnen

chris47803

Grünschnabel
Hallo,

als Hobbyprogrammierer komme ich hier leider nicht weiter und hoffe auf eure Hilfe.
Die Ausgabe möchte ich wie im Anhang, nur das die Zahlen neben den Fahrern stehen sollen.

Hier mein bisheriges Gebastel:
PHP:
<?PHP
include("menue.php");
?>
<br>


<center>
<table border="0" cellspacing="1" cellpadding="1" width="70%">

<tr>
<th class="heads">Formel 1 - Gesamtergebnis von <?php echo "<H2><font color='#000000'> $_POST[jahr]</font></H2>"; ?></th>
</tr>


<form name="form1" method="post" action="formel1-ergebnis_jahr.php">



<?php
//Datei für die DB-Verbindung
include("db-abfrage.php");
$nr = 1;
echo "<select name='jahr' onchange='if(document.getElementById('mid').value != '--') location.href= 'formel1-rennen_auswahl.php' + document.getElementById('mid').value;'>";
$sql_q_1 = @mysql_query("SELECT jahr, land FROM formel1 GROUP BY jahr ORDER BY jahr DESC");
while($sql_r_1 = @mysql_fetch_array($sql_q_1)){
echo "<option value=\"".$sql_r_1['jahr']."\">".$sql_r_1['jahr']."</option>\n";
}

echo "</select>";
echo " <input name='submit' type='submit' value='anzeigen'>";

?>
<br><br><br><br>
</form>

<center><table border="0" cellspacing="1" cellpadding="1" width="100%">

<table border="1" cellspacing="0" cellpadding="0" width="100%">


<?PHP

if (@$_POST[jahr] > 0)
{



//Tabellen-Name der Datenbank
$sql = "SELECT * FROM formel1 WHERE jahr like '%$_POST[jahr]%' GROUP BY rennstrecke";
$array = mysql_query($sql,$dbi);
while($row = mysql_fetch_assoc($array))
echo '<th class="heads" ></th><th class="heads" width="28%" valign="top"><center>'.$row['land'].'</center></th>';


}

?>

<?PHP

if (@$_POST[jahr] > 0)
{



//Tabellen-Name der Datenbank
$sql2 = "SELECT * FROM formel1 WHERE jahr like '%$_POST[jahr]%' GROUP BY fahrer";
$array2 = mysql_query($sql2,$dbi);
while($row2 = mysql_fetch_assoc($array2))



{
echo '<tr class="feld" onMouseOver = this.bgColor="moccasin"; onMouseOut = this.bgColor="";>';

echo '<td width="28%" valign="top"><center><a href="formel1-alle-fahrer-einzeltitel.php?id='.$row2['id'].' & fahrer='.$row2['fahrer'].' ">&nbsp;'.$row2['fahrer'].'</a></center></td>';


}


}

echo '</tr>';
?>


<?PHP

if (@$_POST[jahr] > 0)
{



//Tabellen-Name der Datenbank
$sql3 = "SELECT * FROM formel1 WHERE jahr like '%$_POST[jahr]%' GROUP BY fahrer, land";
$array3 = mysql_query($sql3,$dbi);
while($row3 = mysql_fetch_assoc($array3))

{
echo '<tr class="feld" onMouseOver = this.bgColor="moccasin"; onMouseOut = this.bgColor="";>';
echo '<th class="heads" ></th><th class="heads" width="28%" valign="top"><center>'.$row3['platz'].'</center></th>';

}

}
echo '</tr>';
?>





</center></table>

<?PHP
include("fuss.php");
?>
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    63,1 KB · Aufrufe: 14
Zuletzt bearbeitet von einem Moderator:
Du solltest dein Code formatieren. So wie er da steht muss man Klammern zählen um zu sehen, was wo endet. Und so kann man keinen Code analysieren.

Ich hab mal schnell reingeschaut. Ich sehe keine Fahrer. Nur Jahr. VOrmuliere besser was du hast und dann was du haben willst. Ist einfacher als anhand deines Codes den Aufbau herauszufinden.

Jetzt aber zu den gaaaannnnz wichtigen Dingen:
1)
mysql_* ist veraltet und wird von den neuen PHP-Versionen nicht unterstützt. Du soltest mysqli_* verwenden
2) Niemals direkt aus $_POST oder $_GET oder $_REQUEST in ein SQL schreiben. DIese können von aussen manipuliert werden und so änderungen in deiner DB vorgenommen werden. Mindestens mit mysqli_real_escape_string() solltest du $_POST['jahr'] bearbeiten

Nicht ganz so wichtig, aber trotzdem beachtenswert
3)
SELECT * gefolgt von einem GROUP BY wird zwar leider von MySQL akzeptiert, ist aber sehr Fehleranfällig (also dass du ein komisches Verhalten hast und nicht herausfindest warum) und unschön. Keine andere Datenbank wird dir dieses Script zulassen.
4) Dasselbe gilt für $_POST[jahr]. Ohne ' geht das, solange jahr keine Konstante ist, kein geschützter Begriff etc. Du solltest dir aber angewöhnen, das so zu schreiben $_POST['jahr']
5) Die oben erwähnte Formatierung. SIe hilft beim Verstehen des Codes und auch beim Fehler finden. Es wurden schon viele Fehler gefunden als Code formatiert wurde.
 
Code:
<?PHP
include("menue.php");
?>
<br>
<center>
<table border="0" cellspacing="1" cellpadding="1" width="70%">

<tr>
<th class="heads">Formel 1 - Gesamtergebnis von <?php echo "<H2><font color='#000000'> $_POST[jahr]</font></H2>"; ?></th>
</tr>

<form name="form1" method="post" action="formel1-ergebnis_jahr.php">

<?php
//Datei für die DB-Verbindung
include("db-abfrage.php");
$nr = 1;
echo "<select name='jahr' onchange='if(document.getElementById('mid').value != '--') location.href= 'formel1-rennen_auswahl.php' + document.getElementById('mid').value;'>";
$sql_q_1 = @mysql_query("SELECT jahr, land FROM formel1 GROUP BY jahr ORDER BY jahr DESC");
    while($sql_r_1 = @mysql_fetch_array($sql_q_1))
    
    {
        echo "<option value=\"".$sql_r_1['jahr']."\">".$sql_r_1['jahr']."</option>\n";
    }

echo "</select>";
echo " <input name='submit' type='submit' value='anzeigen'>";

?>

<br><br><br><br>
</form>

<center><table border="0" cellspacing="1" cellpadding="1" width="100%">

<table border="1" cellspacing="0" cellpadding="0" width="100%">

<?PHP

if (@$_POST[jahr] > 0)
 
  {
      //Tabellen-Name der Datenbank
      $sql = "SELECT * FROM formel1 WHERE jahr like '%$_POST[jahr]%' GROUP BY rennstrecke";
      $array = mysql_query($sql,$dbi);
      while($row = mysql_fetch_assoc($array))
      echo '<th class="heads" ></th><th class="heads" width="28%" valign="top"><center>'.$row['land'].'</center></th>';
  }

?>

<?PHP

if (@$_POST[jahr] > 0)

    {
      //Tabellen-Name der Datenbank
      $sql2 = "SELECT * FROM formel1 WHERE jahr like '%$_POST[jahr]%' GROUP BY fahrer";
      $array2 = mysql_query($sql2,$dbi);
      while($row2 = mysql_fetch_assoc($array2))
      
      {
        echo '<tr class="feld" onMouseOver = this.bgColor="moccasin"; onMouseOut = this.bgColor="";>';

        echo '<td width="28%" valign="top"><center><a href="formel1-alle-fahrer-einzeltitel.php?id='.$row2['id'].' & fahrer='.$row2['fahrer'].' ">&nbsp;'.$row2['fahrer'].'</a></center></td>';
      }


    }

echo '</tr>';
?>


<?PHP

if (@$_POST[jahr] > 0)

    {
      //Tabellen-Name der Datenbank
      $sql3 = "SELECT * FROM formel1 WHERE jahr like '%$_POST[jahr]%' GROUP BY fahrer, land";
      $array3 = mysql_query($sql3,$dbi);
      while($row3 = mysql_fetch_assoc($array3))
      
      {   
        echo '<tr class="feld" onMouseOver = this.bgColor="moccasin"; onMouseOut = this.bgColor="";>';
        echo '<th class="heads" ></th><th class="heads" width="28%" valign="top"><center>'.$row3['platz'].'</center></th>';
      }

    }
echo '</tr>';
?>





</center></table>

<?PHP
include("fuss.php");
?>

Wegen der Sicherheit mache ich mir weniger Sorgen.
Das läuft nur in meinem Netz.

LG, Chris
 
Hallo,

ich habe das Script noch mal überarbeitet.
Die ausgegebenen Daten stimmen, aber die Formatierung noch nicht.
Ich vermute es liegt noch noch an den geschweiften Klammern.
Aber da bin ich mit meinem Latein leider am Ende.
Ich hoffe ihr könnt mir dabei helfen.

Code:
<?PHP
include("menue.php");
?>
<br>


<center>
<table border="0" cellspacing="1" cellpadding="1" width="70%">

<tr>
<th class="heads">Formel 1 - Gesamtergebnis von <?php echo "<H2><font color='#000000'> $_POST[jahr]</font></H2>"; ?></th>
</tr>


<form name="form1" method="post" action="formel1-ergebnis_jahr.php">



<?php
//Datei für die DB-Verbindung
include("db-abfrage.php");
$nr = 1;
echo "<select name='jahr' onchange='if(document.getElementById('mid').value != '--') location.href= 'formel1-rennen_auswahl.php' + document.getElementById('mid').value;'>";
$sql_q_1 = @mysql_query("SELECT jahr, land FROM formel1 GROUP BY jahr ORDER BY jahr DESC");
    while($sql_r_1 = @mysql_fetch_array($sql_q_1))
    
    {
        echo "<option value=\"".$sql_r_1['jahr']."\">".$sql_r_1['jahr']."</option>\n";
    }

echo "</select>";
echo " <input name='submit' type='submit' value='anzeigen'>";

?>
<br><br><br><br>
</form>

<center><table border="0" cellspacing="1" cellpadding="1" width="100%">

<table border="1" cellspacing="0" cellpadding="0" width="100%">


<?PHP

if (@$_POST[jahr] > 0)
 
  {
      //Tabellen-Name der Datenbank
      $sql = "SELECT * FROM formel1 WHERE jahr like '%$_POST[jahr]%' ";
      $array = mysql_query($sql,$dbi);
      while($row = mysql_fetch_assoc($array))
      
      {
      
      echo '<th class="heads" ></th><th class="heads" width="28%" valign="top"><center>'.$row['land'].'</center></th>';
      echo '<td width="28%" valign="top"><center><a href="formel1-alle-fahrer-einzeltitel.php?id='.$row['id'].' & fahrer='.$row['fahrer'].' ">&nbsp;'.$row['fahrer'].'</a></center></td>';       
      echo '<th class="heads" ></th><th class="heads" width="28%" valign="top"><center>'.$row['platz'].'</center></th>';       
      }
 
  }

?>



</center></table>

<?PHP
include("fuss.php");
?>
 
Wegen der Sicherheit mache ich mir weniger Sorgen.
Das läuft nur in meinem Netz.
Es geht nicht nur um Sicherheit, sondern auch, dass dein Skript einfach nicht funktioniert, wenn eines der Eingabewerte Single Quotes enthält. Und das "nur in meinem Netz"-Argument wird auch jedes Mal bei dieser Diskussion angebracht; ich vertraue darauf, dass du im Internet genug Gegenargumente finden wirst ;)
 
Du musst vom mysql_* Driver zum mysqli_* oder PDO Driver wechseln. Der Wechsel zu mysqli_* wäre vielleicht einfacher für dich, weil du bereits mysql_* einsetzt. Wohlgemerkt solltest du bei beiden Prepared Statements einsetzen, sonst hast du nicht viel gewonnen.

Für mysqli findest du viel in der PHP Doku oder im Internet.
Das Tutorial hier für PDO sieht ganz in Ordnung aus: (The only proper) PDO tutorial (keine Sorge, der erste Teil sollte reichen)
 
Du machst zum Teil aus mysql_query ein mysqli_query, aus mysql_fetch_assoc machst du mysqli_fetch_assoc etc... :)

Wie bereits @ComFreek erwähnte steht das alles auch bei php.net hinter :)
 
Zurück