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.
wat, als er een ' voor $voornaam komt te staan op regel 16?

[size=xsmall]Toevoeging op 01/10/2018 16:24:54:[/size]

Los daarvan, is het wel een heel simpele manier om query's uit te voeren.


Lees ook eens iets over SQL-injectie, en dan met name het stuk over escapen. Want wat nu als er een ' in de naam stond?

Naast mysqli_real_escape_string kun je ook naar prepared statements" zoeken.
De echo "niet ingevoerd" of de echo "ingevoerd" komt niet in beeld

Dit is een indicatie dat er het e.e.a. fout gaat, maar de foutmeldingen mogelijk niet getoond worden.

De structuur van de code laat ook nogal wat te wensen over. Immers, als een bewerking fout gaat, waar je netjes op controleert (bijvoorbeeld bij het maken van een verbinding), ga je vervolgens wel door met de volgende stap, of de vorige stap nu goed of fout was. Dat heeft eigenlijk niet zoveel zin.

Waar het waarschijnlijk misgaat is regel 7, de tweede parameter van mysqli_select_db() -stichtin15_project- staat niet tussen (enkele) quotes. Daarnaast is deze bewerking helemaal niet nodig, omdat je bij het maken van de connectie al een database selecteert middels de 4e parameter van mysqli_connect() - $dbname.

De volgende snippet kan handig zijn voor bij de ontwikkeling van code, dit zort ervoor dat meldingen worden gemeld + weergegeven op het scherm, zet daartoe de volgende code aan het begin van elk script:
<?php
error_reporting(E_ALL);
ini_set('display_startup_errors', true);
ini_set('display_errors', 'stdout');
?>


Daarbij heeft @Ivo ook een punt. En laten we ook vooral het instellen van de character encoding niet vergeten, opdat je data niet corrupt raakt en escaping ook naar behoren functioneert.
Je mist een ' in de INSERT. Haal PHP-variabelen voor de leesbaarheid buiten aanhalingstekens:


<?php
$sql = "INSERT INTO adressen (voornaam, achternaam) 
        VALUES ('" . $voornaam . "', '" . $achternaam . "')";
?>
Ik heb het stukje van ward gekopieerd. Geen succes
De snippet van Thomas staat er nu in. Geen foutmeldingen meer maar ook geen insert

Een $voornaam van Ivo geeft geen opheldering.
Kan het zijn dat de database ergens schrijfbeveiligd is?
kijk eens naar regel 5 !con => !$con
kijk eens naar regel 19 !msqli_query => !mysqli_query
Welke editor gebruik je om je code aan te passen? Een goede editor zou zulke syntax fouten al direct moeten aangeven.
Regel 5 is aangepast. Geen verbetering
Omdat regel 19 er alleen maar als een soort bevestiging in zat is die weggehaald. Geen verbetering

Ik gebruik Dreamwaever als editor
Correctie, het is regel 18 in je voorbeeld, niet regel 19. Was regel 19 in mijn probeercode na aanpassen.

if (!msqli_query($con,$sql))


Dat je het niet opmerkt is wel een indicatie van je probleem.
Peter Van der Weijden op 01/10/2018 17:52:42

Regel 5 is aangepast. Geen verbetering
Omdat regel 19 er alleen maar als een soort bevestiging in zat is die weggehaald. Geen verbetering

Ik gebruik Dreamwaever als editor

Dreamweaver is niet echt een PHP-editor. Ik zou het gebruik ervan eerder gezegd afraden.
Ikzelf gebruik NetBeans IDE. Ook is Eclipse of PHP Storm een goede aanrader.
Ward van der Put op 01/10/2018 16:47:52

Haal PHP-variabelen voor de leesbaarheid buiten aanhalingstekens:


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


Ik vind dit juist altijd extra onleesbaar worden, omdat je dan door de brij aan aanhalingstekens ook niet meer ziet welke nou bij welke hoort ... Een goede editor (wederom) toont de variabelen in een string gewoon in een ander kleurtje, en dan zie je precies wat je aan het doen bent (alhoewel het in dit geval sowieso al not-done is ivm SQL injectie).

Reageren