insert in mysql database lukt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter Van der Weijden

Peter Van der Weijden

01/10/2018 16:11:23
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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 hulp

PHP hulp

16/04/2024 12:36:45
 
Ivo P

Ivo P

01/10/2018 16:22:58
Quote Anchor link
wat, als er een ' voor $voornaam komt te staan op regel 16?

Toevoeging op 01/10/2018 16:24:54:

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.
 
Thomas van den Heuvel

Thomas van den Heuvel

01/10/2018 16:34:46
Quote Anchor link
Quote:
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?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.
 
Ward van der Put
Moderator

Ward van der Put

01/10/2018 16:47:52
Quote Anchor link
Je mist een ' in de INSERT. Haal PHP-variabelen voor de leesbaarheid buiten aanhalingstekens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$sql
= "INSERT INTO adressen (voornaam, achternaam)
        VALUES ('"
. $voornaam . "', '" . $achternaam . "')";
?>
 
Peter Van der Weijden

Peter Van der Weijden

01/10/2018 17:05:16
Quote Anchor link
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?
 
Adoptive Solution

Adoptive Solution

01/10/2018 17:27:46
Quote Anchor link
kijk eens naar regel 5 !con => !$con
kijk eens naar regel 19 !msqli_query => !mysqli_query
 
- Ariën  -
Beheerder

- Ariën -

01/10/2018 17:35:42
Quote Anchor link
Welke editor gebruik je om je code aan te passen? Een goede editor zou zulke syntax fouten al direct moeten aangeven.
 
Peter Van der Weijden

Peter Van der Weijden

01/10/2018 17:52:42
Quote Anchor link
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
 
Adoptive Solution

Adoptive Solution

01/10/2018 18:03:19
Quote Anchor link
Correctie, het is regel 18 in je voorbeeld, niet regel 19. Was regel 19 in mijn probeercode na aanpassen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (!msqli_query($con,$sql))


Dat je het niet opmerkt is wel een indicatie van je probleem.
 
- Ariën  -
Beheerder

- Ariën -

01/10/2018 18:35:30
Quote Anchor link
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.
Gewijzigd op 01/10/2018 18:36:07 door - Ariën -
 
Rob Doemaarwat

Rob Doemaarwat

01/10/2018 20:04:31
Quote Anchor link
Ward van der Put op 01/10/2018 16:47:52:
Haal PHP-variabelen voor de leesbaarheid buiten aanhalingstekens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?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).
 
- Ariën  -
Beheerder

- Ariën -

01/10/2018 20:18:02
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?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.
Gewijzigd op 01/10/2018 20:18:19 door - Ariën -
 
Rob Doemaarwat

Rob Doemaarwat

01/10/2018 22:01:29
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$sql = "
  INSERT INTO adressen (voornaam,achternaam)
  VALUES ('$voornaam','$achternaam')";

Maar meestal gewoon met bindvars, dus dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$db->insert('adressen',compact('voornaam','achternaam'));

Maar ingewikkelde queries (select met een zooi joins en een uitgebreide where) schrijf ik ook liever:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
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
 
Jan te Pas

Jan te Pas

02/10/2018 15:14:30
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    $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.
 
Thomas van den Heuvel

Thomas van den Heuvel

02/10/2018 15:53:49
Quote Anchor link
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.
 
Peter Van der Weijden

Peter Van der Weijden

02/10/2018 16:20:08
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.