Mensen,

Ik heb de afgelopen tijd heel veel vragen gesteld maar ik kom tot de ontdekking het niet goed te begrijpen. Daarom back to basic. Als mensen mij willen helpen zou ik het leuk vinden anders houd het op.

Ik begin wel met een database.

Ik heb een connectie gemaakt. Daar heb ik mijn eerste vraag dan ook over:

Ik zal de code later hieronder plaatsen. De vraag is waarom krijg ik geen echo als de connectie mislukt en wel als deze lukt?


<?php
$servername = "host";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli("host","username","password","naam");
// Check connection
if (!$conn) {
    echo"connectie mislukt";
}else{
echo "Connected successfully";
}
?>

 

Oke addslashes moeten dus weg. de query voer ik toch uit met insert into?

[size=xsmall]Toevoeging op 09/03/2017 11:59:20:[/size]

Geen tut gevolgd omdat die of vreselijk oud zijn of gelijk weer met OOP en dergelijke.
Nee, je slaat nu een string met enkel een SQL-opdracht op in het geheugen, en doet er niks mee.

Verdiep je eens in mysqli_query, en heel de werking van mysqli. Waarom gebruik je niet w3schools?

Ken je de basis van PHP eigenlijk wel, en gaat dan geen lichtje branden dat een string op zichzelf niks met een database doet?
Die gebruik ik wel. Maar daar wordt niets over de verwerking van een formulier vermeld.
Als ik op MySQLi tutorial zoek vind ik toch een hoop tutorials, en die kunnen zeker niet verouderd zijn.
Dank. Ik zal uiteraard iets laten weten als ik een goede tut heb en het voor elkaar heb gekregen om gegevens in een database te stoppen.
je weet zelf al met PHP hoe je een formulier moet afhandelen? De verwerking naar een MySQL database is precies hetzelfde, alleen moet je als extraatje de boel escapen met mysqli_real_escape_string(...) [sup]1[/sup] of $mysqli->real_escape_string(....)[sup]2[/sup].

Als je gaat werken met MySQLi, bedenk dan wel of je procedureel (1) of Object Oriënted (2) gaat gebruiken. Ik raad het laatste aan. Vooral omdat je met classes meer kan doen. En je hoeft naar mijn mening dan ook niet direct te weten hoe ze werken. Maar het sluit wel mooi aan op de toekomst als je later meer met classes gaat doen. Dus richt je bij voorkeur op de toekomst.

Beiden mengen kan ook, maar dat raad ik af, al is het vanwege de afwijkende werking in enkele gevallen.
- Ariën - op 09/03/2017 13:54:44
Beiden mengen kan ook, maar dat raad ik af, al is het vanwege de afwijkende werking in enkele gevallen.

De werking (het gedrag) van de procedurele en OOP-variant is bij mijn weten altijd hetzelfde, maar de aanroep (parameters en/of de volgorde hiervan) kan nogal eens verschillen. En soms zijn bepaalde functies of methoden aliassen van iets anders. Gebruik bij voorkeur geen aliassen, want de kans is groot dat deze in de toekomst opgeschoond worden.

Neemt niet weg dat het inderdaad niet praktisch is beide varianten door elkaar te gebruiken en ik ga mee in de voorkeur voor de OOP-wijze, met name omdat MySQLi zelf enkel met objecten werkt.

Het bovenstaande lijkt mij een iets concretere onderbouwing voor de keuze voor een bepaalde variant.
Thomas van den Heuvel op 09/03/2017 01:19:08

De controle die @Frank hierboven doet levert mogelijk niet het gewenste resultaat op, omdat mysqli_connect() altijd een object retourneert, zelfs als de connectie mislukt. Dit object evalueert dus nooit tot false en daarom is !$conn dus ook geen goede check voor het slagen of mislukken van de verbinding. Dit is de afgelopen tijd al minstens 2 keer aangehaald trouwens :p.

Gebruik de functies die php.net voorstelt: connect_error().


Thomas,

Het code voorbeeldje komt rechtstreeks van php.net en ik heb even het volgende gedaan:

<?php
$conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
echo get_class($conn);
?>

En ik krijg dan deze foutmelding:

Warning: get_class() expects parameter 1 to be object, boolean given in ...


dat is dus geen object ;-)
Nu heb ik als afhandeling deze:

if(isset($_POST["submit1"]))
{
mysqli_query("insert into gebruikers values('$_POST[t1]','$_POST[t2]','$_POST[t3]','$_POST[t4]','$_POST[r1]')");
}
?>

Alleen krijg ik de melding: Warning: mysqli_query() expects at least 2 parameters, 1 given in
Terwijl ik alles netjes invul.
Nee...

Laten we even de syntax-opbouw (geen code) bekijken op http://php.net/mysqli_query

Procedural style
mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )


Dan zien we hier dat er twee parameters verplicht zijn: de verwijzing naar de connectie, en de tweede is de query zelf. Je hebt nu enkel alleen de query.

Tevens horen je variabelen buiten quotes, en raad ik een vorm van foutafhandeling aan.

Reageren