Antworten auf deine Fragen:
Neues Thema erstellen

Bundesliga Tippspiel

redbull2906

Nicht mehr ganz neu hier

Hallo Leute,

ich würde gern ein Bundesliga-Tippspiel mit PHP und MySql realisieren.
Hätte ihr vllt. ein paar Anregungen bezgl. Tabellenstruktur usw.?

Es soll so werden das sich die einzelnen Tipper einloggen können um jeweils die Spieltage zu tippen. Für richtig getippte Ergebnisse werden 3 Pkt vergeben, für die Tendenz 1 PKT und sonst 0.

Desweiteren möchte ich dann gerne das sich automatsich die akt. Mannschaftstabelle bildet. Quasi so das ich am Schluss nur noch die Ergebnisse eintrage und Sql rechnet alles automatisch aus.

Habt ihr da evtl. Ideen wie man so was realisieren könnte? Bin leider noch net zu fit im PHP/Sql-Bereich.
 

lion67

Heaven Is Hell

AW: Bundesliga Tippspiel

Meinst du sowas in der Art:



Mit dieser Infusion (für php-fusion cms) kannst du BL tippen, aber auch Turniere wie WM usw. ... mit Communitys, mit Live Ticker und und ...
 

andro15

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

Tja, also ich würde denken du solltest es langsam angehen, wenn du noch nicht so fit bist. Mache erstmal die Erstellung der Bundesliga-Tabelle und dann nach und nach das Tippspiel an sich. Du solltest dir das meiste selbst erarbeiten, damit du auch was lernst ("Wie mein Vater immer früher sagte: Abschreiben bringt nix, du willst es ja verstehen!").

Ich denke aber mal, dass die Idee ein Bundesliga-Tippspiel zu programmieren ein gutes Startprojekt ist, wenn du zumindest schon ein bisschen PHP programmiert hast. Danach solltest du eigentlich alles bringen ;)

Als Website zum lernen kann ich dir noch http://www.selfphp.de wärmstens empfehlen. Dort hab ich es gelernt...

Mfg androphinx
 

gp812

Newbster

AW: Bundesliga Tippspiel

Ich hab sowas vor Jahren gemacht.
Habe damals zuerst eine Tabelle mit allen Mannschaften erstellt.
Dann eine Tabelle mit Spielen (Spiel_Id :: Datum :: Id_Heim_Mannschaft :: Id_Gast_Mannschaft :: Tore_1 :: Tore_2).
User-Tabelle ( Id :: Name :: Punkte ).
Tipp-Tabelle ( Spiel_Id :: User_Id :: Tore_1 :: Tore_2 :: Ausgewertet).

Das war's dann.
Nur noch Mannschaften eintragen, Spiele setzten.
Bei einem Tipp wird in der Tipp-Tabelle gespeichert, mit Auswerten = 'n',
wenn du als Admin dann richtigen Ergebnis einträgst, muss man dann halt Punkte ausrechnen und Auswerten auf 'j' setzten.
Bei mir konnte man noch seine Tipps bis zum Spiel-Datum ändern.
Und ich hatte 3-2-1-0 Punkte System:
3- richtig
2- Tendenz + Tordifferenz
1- Tendenz

War interessant :)
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

@gp812
Hast du dann die Tabellen irgendwie verknüpft miteinander? z.B. hast du ja eine User Tabelle angelegt mit der jeweiligen id und dann hast du noch eine tabelle mit den tipps wo auch user_id steht. haste diese id dann neu vergeben oder mit der user tabelle verknüpft? wenn ja, wie gehten so was?
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

Hab jetzt mal in meiner DB drei Mannschaften mit folgenden Zeilen in der Tabelle

Mannschaft :: Siege :: Niederlagen :: Verloren :: Tore :: Gegentore :: Diff :: Punkte

Gibt es die Möglichkeit in der Spalte "Diff" automatsich die differenz der Tore von Sql rechnen zu lasssen?
 

Chickenshooter

Alter Mann

AW: Bundesliga Tippspiel

Ja.

Mit SQL kann man rechnen.

und zwar in jeder Hinsicht.

die Berechnung findet im SLECT Statement statt.

so zB.

SELECT (3*4+10) AS ergebnis;

das "ergenis" ist.... 22.

wenn du attribute (sprich spalten zusammen zählen willst)

musst du mit GROUP BY arbeiten und solchen Sachen wie COUNT()

oder SUM(), MAX()....

guck unter MySQL.com in der Documentation.

Da werden Sie geholfen!
MfG Chick
 

arite

Aktives Mitglied

AW: Bundesliga Tippspiel

hab es seit jahren im einsatz, falls dich das script und code interessiert:
läuft direkt auf dem server ohne mysql und ist sehr vielseitig konfigurierbar.
 

redbull2906

Nicht mehr ganz neu hier

Bundesligatippspiel - Tipppunkte

Hallo Leute,

ich mal wieder :D

Bin zur zeit am Aufbau eines Bundesliga-Tippspiels mit mysql anbindung.
Im Moment hänge ich aber am Ausrechnen der Userpunkte.

Am Ende soll folgendes herraus kommen:

Richtig getippt - 3 PKT
Tendenz - 1 PKT
Falsch - 0 PKT

Mit dem folgenden Script (nur zum Test erst mal mit einem Inputfeld) bekommen ich bei richtig und/oder falsch getippten Ergebnis meine richtige PKT berechnung.
Geht das Spiel jedoch unentschieden aus gibt er mir trotzdem 1 pkt aus obwohl ja auf Sieg getippt wurde. Was er dann ja nicht machen dürfte.

Könnt ihr mir mal an denk anstoss geben wo mein fehler liegt?

Hier mal der Script auszug

PHP:
$tipph=3;
$tippg=1;
if($_POST['send'])
{
    if($_POST['heim']==$tipph AND $_POST['gast']==$tippg)
    {
    $tipppkt=3;
    }
        else if($_POST['heim']-$_POST['gast']==0 AND $tipph-$tippg==0)
        {
        $tipppkt=1;
        }
            else if($_POST['heim']-$_POST['gast']==$tipph-$tippg)
            {
            $tipppkt=1;
            }
                else if($_POST['heim']-$_POST['gast']>=0 AND $tipph-$tippg>=0)
                {
                $tipppkt=1;
                }
                    else if($_POST['heim']-$_POST['gast']<=0 AND $tipph-$tippg<=0)
                    {
                    $tipppkt=1;
                    }    
    else
    {
    $tipppkt=0;
    }
}
echo 'Deine Punkte'.$tipppkt.'';
 

Duddle

Posting-Frequenz: 14µHz

AW: Bundesligatippspiel - Tipppunkte

Ich hab mich jetzt nicht wirklich in deine Lösung eingearbeitet (bissl unübersichtlich mit den vielen POSTs) und sehe auch nicht sofort den Fehler in deiner Lösung, meine funktioniert aber (zumindest nach ein paar Tests):

PHP:
<?php
$tippHeim=3;
$tippGast=1;
$getippt = $tippHeim - $tippGast;

if(isset($_POST['send']))
{
	$realHeim = $_POST['heim'];
	$realGast = $_POST['gast'];
	$real = $realHeim - $realGast;

	// Tipp genau richtig
	if($realHeim == $tippHeim && $realGast == $tippGast) $punkte = 3;
	// unentschieden gespielt, unentschieden getippt
	elseif($realHeim == $realGast && $tippHeim == $tippGast) $punkte = 1;
	// Tendenz gleich
	elseif($real > 0 && $getippt > 0 || $real < 0 && $getippt < 0) $punkte = 1;
	// garnichts richtig
	else $punkte = 0;

	echo 'Deine Punkte: '.$punkte.''; 
}
?>


Duddle
 

redbull2906

Nicht mehr ganz neu hier

Bundesliga Übersicht der Tipp-Ergebnisse

Hallo Leute,

ich schon wieder - und immer noch wegen meinem Tippspiel.
Folgendes Problem:
Ich hätte gerne eine Üersicht pro Spieltag aller Tippspieler und deren Tipps.
Die Daten dafür kommen aus ner Sql-DB und programmiert wird fleißig mit php.

Ich für mal meinen bist dato gedachtes Script bei aber - logischer weise - kann dat so net funzeln.

Am Ende soll alles über ne HTML-Tabelle so aussehen:

In der erste Zeile sollen die Paarungen stehen - Heim : Gast (<tr><td>heim</td><td>gast</td>usw....(9 mal pro Spieltag)</tr>).
Ab der zweiten Zeile will ich alle user mit ihren jeweiligen Tipps auslesen - sprich für jeden user eine Zeile und das pro Paarung getippte ergebnis.
(<tr><td>user</td><td>tippheim</td><td>tippgast</td><td>tippheim2</td><td>tippgast2</td>usw....(auch 9 mal pro spieltag - aber ihr kennt ja die Bundesliga-Reglen ;))...</tr>)


Hier mal mein akt. Script
PHP:
<?
$spieltag=1; //kommt später über GET da vom Nutzer über Link auswählbar
$abfrage="SELECT * FROM spieltag WHERE spieltag = $spieltag"; 
$ergebnis=mysql_query($abfrage);
echo '<table><tr>';
$id=array();
while($row=mysql_fetch_array($ergebnis))
{
echo '<td>'.$row['heim'].'</td><td>'.$row['gast'].'</td>';
$id[]=$row['spiel_id'];
}
echo '</tr>';
$abfrage="SELECT user.name, tipps.tipph, tipps.tippg FROM tipps JOIN user ON tipps.tipper_id = user.id WHERE tipps.spiel_id IN (";
$anzahl=count($id);
for ($i=0;$i<$anzahl;$i++)
{
    $abfrage .="'";
    $abfrage .=''.$id[$i].'';
        $abfrage .="'";
        if($i>=8)
        {

        }
        else
        {
        $abfrage .=',';
        }
}
$abfrage .=')';
echo $abfrage;
$ergebnis=mysql_query($abfrage);
$i=0;
while($row=mysql_fetch_array($ergebnis))
{ 
    if($i==0){echo '<tr>';}
    echo '<td>'.$row['name'].'<td>'.$row['tipph'].'</td><td>'.$row['tippg'].'</td>'; 
    echo '</td>'; 
$i++; 
    if($i==9) {echo '</tr>'; $i=0;} //Mache eine neue Zeile nach dem letzte Tipp
}
echo '</table>';
?>

Problem was ich dabei habe das - logischer weise - der username immer vor den jeweiligen Tipps steht - also USER TIPPHEIM TIPPGAST -- USER TIPP...usw.

Das soll es aber nicht - muss ich user aus der schleife nehmen? ja, dachte ich mir - aber wie lese ich die user dann aus, damit der name je nur einmal aufgelistet und in der ersten Spalte meiner Tabelle erscheint?

Ist vllt. ganz einfach zu lösen aber ich blicks net mehr.

vllt. weis noch einer rat von euch!
 

netbandit

Aktives Mitglied

AW: Bundesliga Übersicht der Tipp-Ergebnisse

Sollte doch eigentlich in einer SQL-Anweisung machbar sein; hier schon mal ein Notnagel:

PHP:
<?
$spieltag=1; //kommt später über GET da vom Nutzer über Link auswählbar
$abfrage="SELECT * FROM spieltag WHERE spieltag = $spieltag";
$ergebnis=mysql_query($abfrage);
echo '<table><tr><td>&nbsp;</td>';
$id=array();
while($row=mysql_fetch_array($ergebnis))
{
echo '<td>'.$row['heim'].'</td><td>'.$row['gast'].'</td>';
$id[]=$row['spiel_id'];
}
echo '</tr>';
$abfrage="SELECT user.name, tipps.tipph, tipps.tippg FROM tipps JOIN user ON tipps.tipper_id = user.id WHERE tipps.spiel_id IN (";
$anzahl=count($id);
for ($i=0;$i<$anzahl;$i++)
{
    $abfrage .="'";
    $abfrage .=''.$id[$i].'';
        $abfrage .="'";
        if($i>=8)
        {

        }
        else
        {
        $abfrage .=',';
        }
}
$abfrage .=')';
echo $abfrage;
$ergebnis=mysql_query($abfrage);
$i=0;
while($row=mysql_fetch_array($ergebnis))
{
    if($i==0){echo '<tr><td>'.$row['name']. '</td>';}
    echo '<td>'.$row['tipph'].'</td><td>'.$row['tippg'].'</td>';
$i++;
    if($i==9) {echo '</tr>'; $i=0;} //Mache eine neue Zeile nach dem letzte Tipp
}
echo '</table>';
?>
 

Eskayp

Something

AW: Bundesliga Übersicht der Tipp-Ergebnisse

Hi redbull,

Du hättest nochmal Deinen Datenbankaufbau mitposten sollen, ich hab das mal aus dem anderen Post von neulich kopiert:
neulich schrieb:
User
ID : NAME : EMAIL

Spieltag
SPIEL_ID : SPIELTAG : HEIM : GAST : TORE_H : TORE_G

Tipps
SPIEL_ID : USER_ID : TIPP_H : TIPP_G : PUNKTE

Erstmal kurz zu dem Scriptteil, der den Query aufbaut.
Den könntest Du folgendermaßen abkürzen:
PHP:
$abfrage="SELECT user.name, tipps.tipph, tipps.tippg FROM tipps JOIN user ON tipps.tipper_id = user.id WHERE tipps.spiel_id IN (";
$anzahl=count($id);
for ($i=0; $i < min(8, $anzahl); $i++) {
  $abfrage .= ($i > 0 ? ',' : '') . "'" . $id[$i] . "'";
}
$abfrage .= ')';

Du hast doch aber auch kürzlich nach dem implode gefragt. Warum benutzt Du den hier nicht?

PHP:
$abfrage  = 'SELECT user.name, tipps.tipph, tipps.tippg';
$abfrage .= ' FROM tipps JOIN user ON tipps.tipper_id = user.id';
$abfrage .= ' WHERE tipps.spiel_id IN ("';
$abfrage .= implode('", "', $id);
$abfrage .= '")';

Oder Du lässt das gleich alles von MySQL machen:
PHP:
  SELECT `user`.`name`, `tipps`.`tipph`, `tipps`.`tippg`
  FROM `tipps`
  JOIN `user` ON `tipps`.`tipper_id` = `user`.`id`
  JOIN `spieltag` ON `tipps`.`spiel_id`= `spieltag`.`spiel_id`
  WHERE `spieltag`.`spieltag` = 1
  ORDER BY `spieltag`.`spiel_id` ASC, `spieltag`.`user_id` ASC;

Durch das ORDER BY werden die Daten so sortiert, dass die Daten eines Users immer direkt hintereinander kommen. Dann kannst Du weitere Usernamen in der Schleife unterdrücken:

PHP:
  echo '<table>';
  // ...
  echo '<tr>';
  $lastuser = '';
  while ($row = mysql_fetch_assoc($ergebnis)) {
    if ($lastuser != $row['name']) {
      if ($lastuser != '') echo '</tr><tr>';
      echo '<td>'.$row['name'].'</td>';
      $lastuser = $row['name'];
    }
    echo '<td>'.$row['tipph'].'</td><td>'.$row['tippg'].'</td>';
  }
  echo '</tr></table>';

Allerdings könnte das ganz massiv unter einen Dateninkonsistenz leiden. Wenn z.B. ein User gar nicht auf eine bestimmte Spielpaarung getippt hat. Das solltest Du nochmal überdenken.
 

Herr_D

offline

AW: Bundesliga Tippspiel

Ein Thread zu Bundesliga sollte reichen... wozu mußt du ständig was neues aufmachen? (rhetorische Frage)
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

@eskayp

Könnte ich das mit der Dateninkonsitenz mit ner abfrage auf "WHERE tipph =NULL" in den Griff bekommen? Also auch abfragen und anfügen wenn nichts - also kein tipp - für die partie(en) vorhanden ist?
 

Eskayp

Something

AW: Bundesliga Tippspiel

Nein, bei JOINS gibt es keine Null-Werte in den Bezügen. Dafür müsstest Du einen LEFT oder RIGHT JOIN machen.

Ich würde die Spalten der Tabelle mit einem eigenen Array aufbauen.

Also vom Prinzip her so:
PHP:
  // Erst die Tabellenspalten aus der Datenbank lesen
  // also: welche Spielbegegnungen gab es
  $query = 'SELECT ...';
  $cols = array();
  if ($result = mysql_query($query))
    while ($row = mysql_fetch_assoc($result))
      array_push($cols, $row);

  // Tabellenkopf ausgeben
  echo '<table><tr>';
  foreach ($cols as $col) echo '<th>'.$col['...'].'</th>';
  echo '</tr>';
  
  // Dann die Tipp-Daten aus der Datenbank lesen
  // also: wer hat was auf die Begegnungen getippt.
  // und zwar mit LEFT JOIN statt JOIN
  $query = 'SELECT ...';
  if ($result = mysql_query($query)) {
    while ($row = mysql_fetch_assoc($result)) {
      
      echo '<tr>';
      foreach ($cols as $col) {
        echo '<td>';
        // Für jede Spalte prüfen, ob es in der Zeile einen Eintrag gibt und ggf. ausgeben
        if (...) echo $row['...'];
        echo '</td>';
      }
      echo '</tr>'."\r\n";
    }
    echo '</table>';
  }
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

Hallo,

ich hab dein Code mal so eingebaut aber so bekommen ich auch in jeder Spalte den Usernamen mit ausgegeben - was mach ich falsch? Im ersten array hab ich ja die Partien soweit komm ich noch mit naja und im zweiten array hab ich doch dann meine ergebnisse oder?


PHP-Code:
<?
// Erst die Tabellenspalten aus der Datenbank lesen
// also: welche Spielbegegnungen gab es
$query = 'SELECT heim, gast FROM spieltag WHERE spieltag = 1';
$cols = array();
if (
$result = mysql_query($query))
while (
$row = mysql_fetch_assoc($result))
array_push($cols, $row);

// Tabellenkopf ausgeben
echo '<table><tr>';
foreach (
$cols as $col) echo '<th>'.$col['heim'].'</th><th>'.$col['gast'].'</th>';
echo
'</tr>';

// Dann die Tipp-Daten aus der Datenbank lesen
// also: wer hat was auf die Begegnungen getippt.
// und zwar mit LEFT JOIN statt JOIN
$query = 'SELECT `user`.`name`, `tipps`.`tipph`, `tipps`.`tippg`
FROM `tipps`
LEFT JOIN `user` ON `tipps`.`tipper_id` = `user`.`id`
LEFT JOIN `spieltag` ON `tipps`.`spiel_id`= `spieltag`.`spiel_id`
WHERE `spieltag`.`spieltag` = 1
ORDER BY `spieltag`.`spiel_id` ASC'
;
if (
$result = mysql_query($query)) {
while (
$row = mysql_fetch_assoc($result)) {

echo
'<tr>';
foreach (
$cols as $col) {
echo
'<td>';
// Für jede Spalte prüfen, ob es in der Zeile einen Eintrag gibt und ggf. ausgeben
if ($col != '') echo $row['name'];
echo
'</td>';
}
echo
'</tr>'."\r\n";
}
echo
'</table>';
}
?>
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

Hallo Leute,

also ich bin immer noch am basteln beszgl. meine Gesamtübersicht was jeder Tipper auf welche Begegnung getippt hat. Bin am verzweifeln - mach wohl ein riesen Denkfehler. Hat einer von Euch noch irgendwie ne Idee wie ich es lösen könnte?
 

r3nt5ch3r

~ Allround pG ~

AW: Bundesliga Tippspiel

Poste doch ma den kompletten Code (+ Datenbank), damit wir ihn testen können und erklär uns bitte nochmal(?) dein(e) Problem(e).
 
Zuletzt bearbeitet:

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

Also, ich möchte folgendes abfragen bzw. ich möchte folgende Überschicht generieren.

Aus meinem Bundesliga-Tippspiel möchte ich in einer Tabelle eine Übersicht der abgegeben Tipps der einzelnen Spieler zu den einzelnen Begegnungen des Spieltages anzeigen. Jeweils immer nur für 1 Spieltag - sprich der Nutzer wählt auf einer anderen Seite den Spieltag und bekommt dazu alle Tipps der Gesamtenspieler angezeigt.

Die Spieler sollen nur einmal in der äußeren linken Spalte angezeigt werden (jeder User eine Zeile - sprich vor dem username soll ein <tr> kommen) und die Tipps von jedem Spieler zur jeweiligen Partie in einzelnen Spalten dahinter. Zur Paarung passend natürlich.
( Paarung 1 Paarung 2 usw...
Name, Tipp1 heim - tipp1 gast, Tipp2 heim - tipp2 gast usw...)

(Ich schreib es mal als html-code vllt. ist es so noch etwas besser verständlich:
<table>
<tr><th></th>Name:<th>Paarung 1 - Heimmannschaft</th><th>Paarung 1 - Gastmannschaft</th> usw. </tr>
<tr><td>username</td><td>tipp 1 heim</td><td>tipp 1 gast</td> usw. </tr>
</table>)

Meine Datenbank ist so aufgebaut:
Tabellen:
- Spieltag
- user
- tipps

Insgesamt also 3 Tabellen die wie folgt mit Spalten aufgebaut sind:

-Spieltag => id, heimmannschaft (kurz heim), gastmannschaft (kurz gast)

-user => id, name

-tipps => spiel_id, user_id, tippheim, tippgast

Mein aktueller PHP-Code
PHP:
<?
  // Erst die Tabellenspalten aus der Datenbank lesen
  // also: welche Spielbegegnungen gab es
  $query = 'SELECT heim, gast FROM spieltag WHERE spieltag = 1';
  $cols = array();
  if ($result = mysql_query($query))
    while ($row = mysql_fetch_assoc($result))
      array_push($cols, $row);

  // Tabellenkopf ausgeben bzw. die Begegnungne/Paarungen ausgeben
  echo '<table><tr>';
  foreach ($cols as $col) echo '<th>'.$col['heim'].'</th><th>'.$col['gast'].'</th>';
  echo '</tr>';
  
  // Dann die Tipp-Daten aus der Datenbank lesen
  // also: wer hat was auf die Begegnungen getippt.
  // und zwar mit LEFT JOIN statt JOIN
  $query = 'SELECT user.name as name, tipph, tippg FROM tipps LEFT JOIN user ON tipps.tipper_id = user.id LEFT JOIN spieltag ON tipps.spiel_id = spieltag.spiel_id WHERE spieltag.spieltag = 1;';
  if ($result = mysql_query($query)) {
    while ($row = mysql_fetch_assoc($result)) {
      array_push($cols, $row);
      echo '<tr>';
      foreach ($cols as $col) {
        echo '<td>';
        // Für jede Spalte prüfen, ob es in der Zeile einen Eintrag gibt und ggf. ausgeben
        echo ''.$row['name'].''.$row['tipph'].''.$row['tippg'].'';
      }
      echo '</tr>'."\r\n";
    }
    echo '</table>';
  }  
 ?>
Den habe ich auf der Idee hin von Eskapy (siehe Forumseite vorher) so erstmal übernommen. Das mit den Arrays habe ich leider nicht so verstanden was er da meinte. In den Kommentare hat er mir ja hilfestellung gegeben aber wie schon gesagt ich mach nen riesigen Denkfehler wahrscheinlich.

Hoffe habe mich verständlich ausgedrückt. Danke schon mal für Eure Hilfe.
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.615
Beiträge
1.538.352
Mitglieder
67.528
Neuestes Mitglied
Links Stream es
Oben