Hulp bij het afmaken van een programma (voetbal poule)

Status
Niet open voor verdere reacties.

julianmurillo

Gebruiker
Lid geworden
15 jan 2018
Berichten
41
Het programma waar ik bezig mee bent, heeft te maken met het ontwerpen van een poule. In eerste instantie, word de volgende 'landing page' getoond:


PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    
<head>
<title>Landing pagina</title>
<style>
    .competitie-schema-gespeeld, .competitie-schema-nog {
        margin: 20px auto;
    }
</style>
</head>
    
<body>

<table width="400" border="0" align="center" cellpadding="3" cellspacing="0">
<tr>
<td style="text-align:center;"><h1>COMPETITIE SCHEMA</h1></td>
</tr>
</table>
<br>

<?php

$host="localhost:8889"; // Host-naam 
$username="******"; // Mysql username 
$password="******"; // Mysql wachtwoord 
$db="dBLOI";
$db_name="dBLOI"; // Database 
$tbl_name="competitieschema"; // Tabel-naam 

// Verbinden met server en database selecteren
mysqli_connect("$host", "$username", "$password")or die('Verbinden niet mogelijk'); 
mysqli_select_db("$db_name") or die('Database is niet geselecteerd');
$sql="SELECT * FROM $tbl_name ORDER BY Speeldatum ASC";
$result=mysqli_query($sql);

?>

<h2 style="text-align:center;">Gespeelde wedstrijden</h2>
    
<?php
while ($rows=mysqli_fetch_array($result)) { 
if (($rows["Speeldatum"]) < date("Y-m-d")) {
?>
<table class="competitie-schema-gespeeld" width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC" style="text-align:center;">
<tr>
<td style="display:inline;"><table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF" style="border:1px solid black; padding: 10px; margin: 0px 0 20px 0;">
<p style="text-align:center; margin:0;">Status: Gespeeld</p>
<tr>
<td width="117">Datum</td>
<td width="14">:</td>
<td width="357"><?php echo ($rows["Speeldatum"]); ?></td>
</tr>
<tr>
<td width="117">Thuisspelend</td>
<td width="14">:</td>
<td width="357"><?php echo ($rows["Thuisspelend"]); ?></td>
</tr>
<tr>
<td>Score</td>
<td>:</td>
<td><?php echo ($rows["Score thuisspelend"]); ?></td>
</tr>
<tr>
<td valign="top">Uitspelend</td>
<td valign="top">:</td>
<td><?php echo ($rows["Uitspelend"]); ?></td>
</tr>
<tr>
<td valign="top">Score</td>
<td valign="top">:</td>
<td><?php echo ($rows["Score uitspelend"]); ?></td>
</tr>
</table></td>
</tr></table>
<?php
}
}
echo '<hr style="width:75%;">';
?>
    
<?php
mysqli_close(); //database sluiten
?>  
    

<?php

$host="localhost:8889"; // Host-naam 
$username="******"; // Mysql username 
$password="******"; // Mysql wachtwoord 
$db="dBLOI";
$db_name="dBLOI"; // Database 
$tbl_name="competitieschema"; // Tabel-naam 

// Verbinden met server en database selecteren
mysqli_connect("$host", "$username", "$password")or die('Verbinden niet mogelijk'); 
mysqli_select_db("$db_name") or die('Database is niet geselecteerd');
$sql="SELECT * FROM $tbl_name ORDER BY Speeldatum ASC";
$result=mysqli_query($sql);

?>
    
<h2 style="text-align:center;">Nog te spelen wedstrijden</h2>
    
<?php
while ($rows=mysqli_fetch_array($result)) {
if (($rows["Speeldatum"]) > date("Y-m-d")) {
?>
<table class="competitie-schema-nog" width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC" style="text-align:center;">
<tr>
<td style="display:inline;"><table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF" style="border:1px solid black; padding: 10px; margin: 0px 0 20px 0;">
<p style="text-align:center; margin:0;">Status: Nog te spelen</p>
<tr>
<td width="117">Datum</td>
<td width="14">:</td>
<td width="357"><?php echo ($rows["Speeldatum"]); ?></td>
</tr>
<tr>
<td width="117">Thuisspelend</td>
<td width="14">:</td>
<td width="357"><?php echo ($rows["Thuisspelend"]); ?></td>
</tr>
<tr>
<td>Score</td>
<td>:</td>
<td><?php echo ($rows["Score thuisspelend"]); ?></td>
</tr>
<tr>
<td valign="top">Uitspelend</td>
<td valign="top">:</td>
<td><?php echo ($rows["Uitspelend"]); ?></td>
</tr>
<tr>
<td valign="top">Score</td>
<td valign="top">:</td>
<td><?php echo ($rows["Score uitspelend"]); ?></td>
</tr>
</table></td>
</tr></table>
<?php
}
}
?> 
    
<table style="text-align:center; width:100%;">
<tr>
<td style="text-align:center; padding:20px;">
    <a href="form.php">Inloggen om de poule te bewerken</a>
</td>
</tr>
</table>
    
<?php
mysqli_close(); //database sluiten
?> 
    
</body>

</html>

De structuur van form.php is:

PHP:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Oefenopgave 19-1</title>
</head>

<body>

<?php

$host="localhost:8889"; // Host-naam 
$username="******"; // Mysql-username 
$password="******"; // Mysql-wachtwoord 
$db="dBLOI";
$db_name="dBLOI"; // Database 
$tbl_name="gebruikers"; // Tabel-naam 
    
function correct_email ($email)
{
  if (preg_match('#^[a-zA-Z]+@[a-zA-Z]+\.nl#',$email))
  {
    return TRUE;
  } else {
    return FALSE;
  }  
}

$message = "";

$link = mysqli_connect("$host", "$username", "$password")or die('Verbinden niet mogelijk');

$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];

if (isset($_POST['submit']) && $_POST['submit'] == 'Submit')
{
  if (isset($username) && $username != "" && (strlen($username) >= 3) )
  {
     if (isset($password) && $password != "" && (strlen($password) >= 8) )
     {     
            if ( (isset($email) && $email != "" && correct_email($email) ) ||
                (!isset($email)) || ($email == "")
                 )
            {
           $query = "INSERT INTO  $tbl_name (Username, Password, email)
                            VALUES ('$username',md5('$password'),'$email')";
           $result = mysqli_query($link, $query);

           if (mysqli_affected_rows($link) == 1) {
           $message = 'De user is toegevoegd';
           $username = "";
           $password = "";
           $email = "";
         } else {
            error_log(mysqli_error($link));
            $message = 'Het toevoegen van de user is mislukt';
         }
      } else {
            $message = "Vul een correct email adres in en eindigend op .nl";
         }   
       } else {
      $message = "Vul een wachtwoord in bestaande uit minimaal acht karakters";           

       } 
  } else {
     $message = "Vul een username in bestaande uit minimaal drie karakters";
  }  
}

print $message;

?>
<br />
<br />
Vul hieronder je naam, gewenste wachtwoord en emailadres in.
<br />
<br />
<form METHOD="post" ACTION="index.php">
Username: <INPUT TYPE="text" SIZE="20" NAME="username" VALUE="<?php if (isset($username)) echo $username; ?>" > <br />
Wachtwoord: <INPUT TYPE="text" SIZE="40" NAME="password" VALUE="<?php if (isset($password)) echo $password; ?>" > <br />
Email: <INPUT TYPE="text" SIZE="50" NAME="email" VALUE="<?php if (isset($email)) echo $email; ?>" > <br />
<INPUT TYPE="submit" NAME="submit" VALUE="Submit">
</form>
<br />
<br />
Al een geregistreerde user? Log dan in.
<br />
<br />
<form METHOD="post" ACTION="index.php">
Username: <INPUT TYPE="text" SIZE="20" NAME="username" VALUE="<?php if (isset($username)) echo $username; ?>" > <br />
Wachtwoord: <INPUT TYPE="text" SIZE="40" NAME="password" VALUE="<?php if (isset($password)) echo $password; ?>" > <br />
<INPUT TYPE="submit" NAME="submit" VALUE="Submit">
</form>
</body>
</html>

Kunnen jullie mij helpen met de volgende twee verzoeken?:

Er moet een STAND tabel komen (alleen te zien door geregistreerde/ingelogde mensen). In dit tabel wordt de volgende informatie per team getoond: aantal gespeelde wedstrijden, aantal gewonnen wedstrijden, het aantal gelijk gespeelde wedstrijden, het aantal verloren wedstrijden, het aantal punten (2 punten per annotatie), het aantal doelpunten, het aantal doelpunten tegen (2 punten per annotatie die tegen is gedaan) en het doelsaldo (aantal gemaakte doelpunten min het aantal doelpunten tegen).

Bij 'NOG TE SPELEN WEDSTRIJDEN', het team met beste punten moet bovenaan komen (indien meerdere teams gelijk zijn -qua punten-, het team met het beste doelsaldo komt bovenaan te staan).

Als mensen zich aanmelden/inloggen, worden ze dmv een redirect gestuurd naar de handig page waar de STAND tabel wordt getoond. Mensen kunnen zo ook per 'nog te spelen wedstrijd' het resultaat invoeren dat ze denken dat het zou worden.

De tabel voor de competitie schema ziet er zo uit: Schermafbeelding 2018-08-04 om 23.31.39.png

De tabel voor de gebruikers ziet er zo uit: Schermafbeelding 2018-08-04 om 23.32.52.png

De tabel voor de teams ziet er zo uit: Schermafbeelding 2018-08-04 om 23.37.48.pngSchermafbeelding 2018-08-04 om 23.37.48.png

Dank voor alle eventuele hulp :)
 
Laatst bewerkt door een moderator:
Waarom gebruik je mysql en mysqli door elkaar?
En ben je bewust van SQL-Injectie in je code en dat iedereen je query kan manipuleren?
Md5() is trouwens ook NOT-DONE om wachtwoorden mee te hashen. Gebruik password_hash en password_verify
 
Hi; ik heb de code aaangepast (wat mysqli betreft); dit is een academisch opgave dus het is wel goed -voor nu- om sql-injectie te gebruiken (hier zijn wij van bewust); het wachtwoord moet volgens de opgave opgeslagen worden in de tabel m.b.v. MD5. Ik kan hier niet van afwijken.
Is het dan mogelijk om hulp te krijgen voor de andere punten?
 
Laatst bewerkt:
Ja, maar je vraag komt een beetje over dat iemand jouw werk moet doen. Als je ergens op vastloopt, vertel dan waarop je vast loopt, en wat je al geprobeerd hebt.
 
Hi; ik ben van plan om bv. header('Location: http://www.example.com/'); te gebruiken voor de redirect; dit zou ik ergens moeten gebruiken om ervoor te zorgen dat er de redirect is naar de poule -na het inloggen- waar de tabel STAND te zien zou zijn.

Daarnaast zou ik een manier kunnen vinden om de informatie uit de tabel voor de teams kunnen halen, zodat ik o.a. het aantal gespeelde wedstrijden en het aantal gewonnen wedstrijden kan berekenen. Hier wil ik hints hebben. Niemand hoeft dat voor mij te doen. Een simpele voorbeeld is genoeg voor mij om als basis te gebruiken.

Ook moet er een if statement komen -denk ik- om bepaalde informatie te laten tonen voor mensen die geregistreerd zijn. Wat is een juiste statement?
 
Laatst bewerkt:
Als simpele "programmeur" (al veel teveel eer op dit gebied..): waarom stuur je de geregistreerden niet door naar de pagina waar alles staat?
Of mag dat niet.. ;)
 
Daarnaast zou ik een manier kunnen vinden om de informatie uit de tabel voor de teams kunnen halen, zodat ik o.a. het aantal gespeelde wedstrijden en het aantal gewonnen wedstrijden kan berekenen. Hier wil ik hints hebben. Niemand hoeft dat voor mij te doen. Een simpele voorbeeld is genoeg voor mij om als basis te gebruiken.
En gelijkspel?
Wellicht via SQL gegevens sorteren (tellen)?
Bijvoorbeeld voor team 'Blauw'.
Code:
--Gespeelde wedstrijden--
SELECT COUNT(*) 
FROM `competitie` 
WHERE (`Thuisspelend` = 'Blauw' OR `Uitspelend` = 'Blauw')
AND `Speeldatum` < CAST(CURRENT_TIMESTAMP AS DATE);

--Gewonnen aantal--
SELECT
(SELECT COUNT(*)  FROM `competitie` WHERE `Uitspelend` = 'Blauw' AND `Score thuisspelend` < `Score uitspelend`)+
(SELECT COUNT(*)  FROM `competitie` WHERE `Thuisspelend` = 'Blauw' AND `Score thuisspelend` > `Score uitspelend`)
AS Gewonnen;

--Gelijkspel aantal--
SELECT COUNT(*) Gelijkspel FROM `competitie` WHERE (`Uitspelend` = 'Blauw' OR `Thuisspelend` = 'Blauw')
AND `Score thuisspelend` = `Score uitspelend`
 
Laatst bewerkt:
Ik probeer bv. het aantal gespeelde wedstrijden te achterhalen voor het Oranje Team:

PHP:
$host="localhost:8889"; // Host-naam 
$username="******"; // Mysql username 
$password="******"; // Mysql wachtwoord 
$db="dBLOI";
$db_name="dBLOI"; // Database 
$tbl_name="competitieschema"; // Tabel-naam 

// Verbinden met server en database selecteren
mysql_connect("$host", "$username", "$password")or die('Verbinden niet mogelijk'); 
mysql_select_db("$db_name") or die('Database is niet geselecteerd');
$orange1sql="SELECT COUNT(Speeldatum) FROM $tbl_name WHERE Thuisspelend =Oranje AND WHERE Uitspelend =Oranje";
$resultorange1sql = mysqli_query($orange1sql);
var_dump($resultorange1sql);

het resultaat is NULL; any ideas?
Hoe de tabel eruitziet, is bijgevoegd als afbeelding

@route99 bedoel je
PHP:
header('Location: landing_page.php');
? Dat was ik van plan te plaatsen tussen lijnen 94 en 95 op form.php
 
Laatst bewerkt door een moderator:
Waarom nog verouderde MySQL-functies?
En na een location-header hoort een exit; :)
Ik raad aan om je queries ook te escapen met mysqli_real_escape_string() het beschermt ook tegen je invoer. Vul anders eens 's-Hertogenbosch in bij wijze van test.
 
Naar een volgende pagina is naar een volgende pagina. Je kiest de makkelijkste code.
Als je opties alles verder hetzelfde laat lijkt dan voor de geregistreerde gebruiker als er echt wat bij komt maar je gaat naar een andere pagina.
Tuurlijk niet netjes als het op efficiency aan komt... tis maar net waar het op beoordeeld wordt.
Een aparte pagina kun je wrs ook extra beveiligen?
 
PHP:
$host="localhost:8889"; // Host-naam 
$username="******"; // Mysql username 
$password="******"; // Mysql wachtwoord 
$db="dBLOI";
$db_name="dBLOI"; // Database 
$tbl_name="competitieschema"; // Tabel-naam 

// Verbinden met server en database selecteren
$con=mysqli_connect("$host", "$username", "$password")or die('Verbinden niet mogelijk'); 
mysqli_select_db($con,$db_name) or die('Database is niet geselecteerd');

$sqlgespeeld=mysqli_query($con,"SELECT COUNT(*) FROM 'competitieschema' WHERE 'Thuisspelend'='Oranje' OR 'Uitspelend'='Oranje'");
var_dump($sqlgespeeld);

Het resultaat is 'bool(false)'.

Weet iemand waarom? Wat ik mij kan voorstellen is dat iets wordt aangemaakt met de resultaat erin, waardoor ik geen 3 zou krijgen in het scherm te zien.

Als ik de query uitvoer in phpMyAdmin zie ik wel de volgende:

Schermafbeelding 2018-08-05 om 14.46.38.png
 
Laatst bewerkt door een moderator:
Waarom je veldnamen in je query tussen quotes?
 
Thuisspelend is geen waarde, dus die hoort NIET tussen quotes.
 
Klopt.
Indien geen quotes op tabel of kolomnaam (moeten geen quotes zijn maar mag backtick) kun je bij waarde (Oranje) enkel quotes gebruiken.
PHP:
$sqlgespeeld=mysqli_query($con,"SELECT COUNT(*) FROM competitie WHERE Thuisspelend='Oranje' OR Uitspelend='Oranje'");
// of
$sqlgespeeld=mysqli_query($con,"SELECT COUNT(*) FROM `competitie` WHERE `Thuisspelend`='Oranje' OR `Uitspelend`='Oranje'");
 
Laatst bewerkt:
En gebruik nette foutafhandeling met mysqli_error()
 
Hallo mensen :)

Het uithalen van de belangrijke info over de teams -en het weergeven daarvan in een tabel- is gered (dankjewel voor de hints!). Ik zit nu te struwelen met het aanmaken van een account en het opslaan van die gegevens in de database; heb de code licht aangepast maar nog steeds geen positief resultaat: de informatie wordt niet opgeslagen in de database. Ziet iemand onregelmatigheden in de code?

PHP:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Oefenopgave 19-1</title>
</head>

<body>

<br />
<br />
Vul hieronder je naam, gewenste wachtwoord en emailadres in.
<br />
<br />
<form method="post" action="landing_page.php">
Username: <input type="text" size="20" name="username" value="<?php if (isset($username)) echo $username; ?>" > <br />
Wachtwoord: <input type="text" size="40" name="password" value="<?php if (isset($password)) echo $password; ?>" > <br />
Email: <input type="text" size="50" name="email" value="<?php if (isset($email)) echo $email; ?>" > <br />
<input type="submit" name="submit" value="Submit">
</form>
<br />
<br />
Al een geregistreerde user? Log dan in.
<br />
<br />
<form method="post" action="landing_page.php">
Username: <input type="text" size="20" name="username" value="<?php if (isset($username)) echo $username; ?>" > <br />
Wachtwoord: <input type="text" size="40" name="password" value="<?php if (isset($password)) echo $password; ?>" > <br />
<input type="submit" name="submit" value="Submit">
</form>
    
<?php

$host="localhost:8889"; // Host-naam 
$username="******"; // Mysql-username 
$password="******"; // Mysql-wachtwoord 
$db="dBLOI";
$db_name="dBLOI"; // Database 
$tbl_name="gebruikers"; // Tabel-naam 
    
function correct_email ($email)
{
  if (preg_match('#^[a-zA-Z]+@[a-zA-Z]+\.nl#',$email))
  {
    return TRUE;
  } else {
    return FALSE;
  }  
}

$message = "";

$link = mysqli_connect("$host", "$username", "$password")or die('Verbinden niet mogelijk');

if (isset($_POST['submit']) && $_POST['submit'] == 'Submit')
{
  if (isset($_POST['username']) && $_POST['username'] != "" && (strlen($_POST['username']) >= 3) )
  {
     if (isset($_POST['password']) && $_POST['password'] != "" && (strlen($_POST['password']) >= 8) )
     {     
            if ( (isset($_POST['email']) && $_POST['email'] != "" && correct_email($_POST['email']) ) ||
                (!isset($_POST['email'])) || ($_POST['email'] == "")
                 )
            {
           $query = "INSERT INTO `gebruikers` (`Username`, `Password`, `email`) VALUES('$_POST['username']',md5('$_POST['password']'),'$_POST['email']')";
           $result = mysqli_query($link, $query);

           if (mysqli_affected_rows($link) == 1) {
           $message = 'De user is toegevoegd';
           $username = "";
           $password = "";
           $email = "";
         } else {
            error_log(mysqli_error($link));
            $message = 'Het toevoegen van de user is mislukt';
         }
      } else {
            $message = "Vul een correct email adres in en eindigend op .nl";
         }   
       } else {
      $message = "Vul een wachtwoord in bestaande uit minimaal acht karakters";           

       } 
  } else {
     $message = "Vul een username in bestaande uit minimaal drie karakters";
  }  
}

print $message;

?>

</body>
</html>
 
Laatst bewerkt door een moderator:
Waarom gebruik je nog steeds geen beveiliging tegen SQL-injection d.m.v. mysqli_real_escape_string()
Het beschermd je niet alleen tegen hackers, maar voornamelijk tegen tekens die je querie kunnen verstoren, die hackers ook gebruiken.

Wat nu als Jacques d'Ancona zich wilt aanmelden?

Verder zou ik sowieso een controle op $result doen. Als deze false is, toon dan een mysqli_error() en anders voer je de rest netjes uit. Zelf raad ik aan om de Object-georiënteerde versie van MySQLi te gebruiken, omdat die makkelijker uitbreidbaar is met een globale foutafhandeling, wat je een hoop dubbele code zal schelen. Ikzelf houd me graag vast aan de DRY-methode: Don't Repeat Yourself
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan