Top 10 php mysql commando’s

Nu je het begin te pakken hebt met php/mysql maak ik het even makkelijk voor wie het allemaal niet meer overziet.

In deze tekst:

  • commando’s voor verbinden met de database -> db.php
  • commando’s voor een lijst opvragen -> list_employees.php
  • commando’s voor een insert (nieuw item) -> insert.php

Verbinden met de database

Het handigste maak je een file db.php en die include je telkens in elke pagina. De verbinding zelf maak je met mysqli_connect. Er komt een variable uit, $db en die heb je verderop telkens nodig.

db.php

<?php
/* db.php include this file every time 
*/

 $host    = "localhost";    
 $user    = "yournick";            
 $pass    = "********";          
 $dbname  = "yournick";             
    
 $db = mysqli_connect($host, $user, $pass)
    or die('Could not connect: ' . mysqli_error($db));
  mysqli_select_db($db,$dbname) or die('Could not select database');
        

Lijst opvragen

Bouw een lijst van de employees die nu in de tabel employees zitten.

Oplossing. Include de database connectie. Daarna:

  • querystring opbouwen met $q= en dan een stukje SQL. Je kunt in adminer spieken. Verder is het vooral proberen. We kunnen hier een aparte opdrachtenserie over doen. Maar nu niet.
  • We runnen de query met mysqli_query. Geef de connectie en de query zelf als parameter.
  • mysqli_error. Altijd lekker om de fout eruit te halen als die zometeen optreedt. Hier is de parameter de database connectie. Als er bij de laatste query een fout was, geeft ie true. En met een print zie je de fout.
  • mysql_num_rows. Zo weet je gelijk hoeveel results je query heeft opgeleverd. Als er niks in zit, ga via adminer met de hand eerst 2 of 3 records (items) toevoegen.
  • mysql_fetch_array. Hier is het om te doen. Nu haal je in 1x een hele rij waardes op uit de database en die worden in een array gestopt. In de regels erna lees ik de array uit en stop ze in andere variabelen. Voor de extra.

list_employees.php

<?php
/* list page example
*/ 
    include "db.php";
    $sql = "select emp_no, first_name, last_name from employees";
    $q   = mysqli_query($db,$sql);
    if (mysqli_error($db)) {         
      echo "Error" . mysqli_error($db);
    }
    if (mysqli_num_rows($q) == 0 ) {
      echo "no results";
    } else  {
        echo "<ul>";
        while ($res = mysqli_fetch_array($q)) {
            $eno = $res[0];
            $efn = $res[1];
            $eln = $res[2];
            echo "<li>$eno $efn $eln </li>";
        }
        echo "</ul>";
   }

Resultaat checken

Op https://blub.airybubbles7.nl/~eloqarch/mysqli-top10/list.php zie je het resultaat, momenteel

Verbeteringen

  • Jij maakt m met je mini app Juichen
  • In plaats van bullits met ul en li maak je een tabel
  • Je drukt niet de namen alleen af, maar je maakt links naar detail.php?empno=$empno zodat je kunt klikken voor meer details. Op die volgende pagina moet je dan $_GET uitlezen i.p.v. $_POST.

Insert Query

De insert doen we met een formulier dat als titel “Nieuwe Employee” heeft. Zoals in https://blub.airybubbles7.nl/~eloqarch/mysqli-top10/insert.php

  • weer een verbinding maken via je include file
  • if !empty ($_POST) ofwel, als het POST formulier is gepost. In het andere geval dan show je het formulier.
  • Dan gaan we de $_POST array veld voor veld uitlezen.
  • Ik zet ze in handige variabele-namen, zodat ik er geen fouten mee maak.
  • De invoer uit het formulier beveiligen we tegen aanvallen van hackers met mysqli_real_escape_string. De techniek van de hackers heet sql-injection en komt veel voor. Oh wacht: real_escape_string is alweer uit de tijd. Dat had prepared statements moeten zijn. https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection
  • $sql = dan bouw ik de sql INSERT query op.
  • De query geeft ofwel een error en anders heb ik een mysqli_insert_id(). Dat is het nummer dat automatisch is ingevoerd doordat ik een auto_increment tabel heb gebouwd in adminer. Handig foefje.
  • Dan onderaan het formulier in geval je niet had gepost.

insert.php

    <?php
   include "db.php";
    if (!empty($_POST)) {
        $efn = $_POST['first_name'];
        $efn = mysqli_real_escape_string($db,$efn);
        $eln = $_POST['last_name'];
        $eln = mysqli_real_escape_string($db,$eln);
        $sql="insert into employees (first_name, last_name)
            values ('$efn','$eln')";
        $q   = mysqli_query($db,$sql);
        if (mysqli_error($db)) {
             echo "Error" . mysqli_error($db);
        }  else {
        $i = mysqli_insert_id($db);
        echo "Okay, record $i inserted, nu naar de 
              <a href=list_employees.php>lijst</a>";
        }
    }       
    else {  
        echo '<form action=insert.php name=insertform method=post>';
        echo "<input type=text name=first_name value=Voornaam>";
        echo "<input type=text name=last_name value=Achternaam>";
        echo "<input type=submit value=Opslaan></form>";
     }
        

Eloquent Architect 161

Eloquent Architect 161