Hallo,
ik probeer in een database gegevens in te voeren met php. Wat ik ook probeer, er komen geen gegevens in de database terecht.
Handmatig heb ik gegevens ingevoerd via phpMyAdmin.
Deze gegevens kan ik met php uitlezen. Met dezelfde connectie gegevens lukt het niet om insert aan de praat te krijgen. De database heeft 3 velden:
id (A/I), voornaam en achternaam
Dit is het programma
<?php


$con =mysqli_connect($host,$user,$password,$dbname);
if(!con)
{echo 'niet verbonden met de server';}
if (!mysqli_select_db($con,stichtin15_project))
{echo 'geendatabase geselecteerd';}


$voornaam='Peter';
$achternaam='Janssen';


$sql= "INSERT INTO adressen (voornaam,achternaam)
VALUES ($voornaam','$achternaam')";

if (!msqli_query($con,$sql))
{echo 'niet ingevoerd';}
else
{echo 'ingevoerd';}

De echo "niet ingevoerd" of de echo "ingevoerd" komt niet in beeld

Geen idee wat ik fout doe.

<?php
$sql = "INSERT INTO adressen (
			voornaam, 
			achternaam
			)
        VALUES (
		'" . $voornaam . "',
		'" . $achternaam . "'
		)";
?>

Zo beter? Of is dit code-formatting too much ;-)?
Bij grote queries bouw ik het ook altijd zo op.
Ok, klein zij-spoortje over coding style - altijd goed voor uren "onderhandelen":

Voor die ene keer dat ik 100% zeker weet dat ik variabelen niet hoef te escapen (vaste tekst, of een getal), dan zou ik:
$sql = "
  INSERT INTO adressen (voornaam,achternaam)
  VALUES ('$voornaam','$achternaam')";

Maar meestal gewoon met bindvars, dus dan:
$sql = "
  INSERT INTO adressen (voornaam,achternaam)
  VALUES (:voornaam,:achternaam)";
$args = compact('voornaam','achternaam');

Maar als het zo simpel is als dit doe ik nog liever:

$db->insert('adressen',compact('voornaam','achternaam'));

Maar ingewikkelde queries (select met een zooi joins en een uitgebreide where) schrijf ik ook liever:

select x.dit,y.dat,z.zus
from tabel x
  join andere_tabel y on y.dit = x.dat
  left join nog_een_tabel z on z.iets = y.iets and z.anders = :anders
where x.voornaam = :voornaam
  and y.voornaam = :voornaam
Ik zal een stukje code geven. Wel moet alles in het formulier opgevangen worden zodat geen injectie plaats kan vinden. Als je wachtwoorden gebruikt, dan deze versleuteld, hash, opslaan.
Stappen:
1. Maak verbinding met de database
2. Hier een voorbeeld voor toevoegen en check in tabel met als naam members

	$username=$_POST['username'];
	$email=$_POST['email'];
	$bedrijf=$_POST['bedrijf'];
	$telefoon=$_POST['telefoon'];
	$adres=$_POST['plaats'];
	$naam=$_POST['naam'];
	$wachtwoord=$_POST['wachtwoord'];
	//$active="Yes or  No, from select";
	$active=$_POST['actief'];
       // standard no privileges as administrator, no editing possible
	$admin="No";
	//maak nu hash van wachtwoord aan
	$wachtwoord=password_hash($wachtwoord, PASSWORD_BCRYPT);
	$ad="insert into members(username,password,email,naam,bedrijf,adres,telefoon,active,admin) values(?,?,?,?,?,?,?,?,?)";
	$stmt= $mysqli->prepare($ad);
	$stmt->bind_param("sssssssss",$username,$wachtwoord,$email,$naam,$bedrijf,$adres,$telefoon,$active,$admin);
	$stmt->execute();
	$newId = $stmtins->insert_id;
	$stmt->close();	   

In $newId weet je de toegevoegde regel.
Succes met het leren.
Jan te Pas op 02/10/2018 15:14:30
Wel moet alles in het formulier opgevangen worden zodat geen injectie plaats kan vinden.

Uhhh, daar zorgt de prepared statement laag juist voor...

Enne, $stmtins bestaat niet helaas.

Ik denk dat de topicstarter meer geholpen is met een fatsoenlijke editor, debugging tools (zie codesnippet) en wat basiskennis programmeer knowhow.
Dank voor alle hulp bij mijn probleem
Het probleem is inmiddels opgelost door mijn provider.
Ik denk dat daar iets niet goed was want nu gaat het wel goed.

Reageren