Mysqli_error()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C++ Developer

Functieomschrijving Ben jij als software engineer toe aan een nieuwe uitdaging? Dan zijn wij op zoek naar jou! Voor het maken van de procesbesturingsoftware gebruiken onze projectteams een in C++ en C# geschreven tool. Dit is een gedistribueerd object framework wat alle kernfuncties biedt voor een procesautomatisering. Verder zullen jouw werkzaamheden o.a. bestaan uit: Analyseren van vragen en wensen van gebruikers en deze vertalen naar een functioneel ontwerp; Ontwerpen, programmeren en testen van productaanpassingen; Implementeren van nieuwe productreleases in de projectteams; Continu toetsen van het effect van nieuwe releases op andere tools en processen; Inzichtelijk maken van voortgang omtrent softwarewerkzaamheden,

Bekijk vacature »

PHP developer (Laravel, Docker, Gitlab-CI)

Functie Het IT-team bestaat momenteel uit 4 ontwikkelaars. Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. Een groot deel van de systemen is gebouwd met behulp van het Laravel framework en PHP (minimaal 7.2), Docker voor lokaab gebruik en Gitlab-CI voor het deployen

Bekijk vacature »

Back end developer PHP

Functie Heb jij altijd al eens bij een bedrijf willen werken waar jij géén nummertje bent, die alleen maar uitvoerend werk doet? Dan zou je hier perfect passen! Tuurlijk, je werkt aan projecten voor grote of kleine bedrijven… Het enige verschil hier is, jouw mening telt hier écht. Jouw inbreng wordt gewaardeerd, serieus genomen en gebruikt. En vergeet niet, je werkt niet alleen aan deze projecten. Er werken in totaal ruim 25 developers en designers, onderverdeeld over 3 development teams. Voornamelijk bestaande uit Medior en Senior developers, die samen voor een inspirerende en ambitieuze omgeving zorgen. Hun visie is namelijk

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Java Developer

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Java developer (remote)

Functie Wat ga je doen als Java Developer? Jij als Java ontwikkelaar komt te werken in 1 van onze SCRUM teams. Momenteel werken er zo’n 30 ontwikkelaars binnen onze organisatie waarbij jij de brug slaat tussen het bouwen van verschillende functionaliteiten binnen onze applicaties en deze vervolgens te integreren in onze centrale hub. Je start je dag om 9 uur met een stand up en dan pak je jouw taken op voor de dag. Hieronder een aantal taken die jij zal uitvoeren: – Het bedenken en uitbouwen van features binnen de verschillende applicaties – Onderhouden van CI/CD pipelines – Bezighouden

Bekijk vacature »

Junior Java Developer

Dit ga je doen Je ontwikkelt innovatieve, maatschappelijk belangrijke applicaties; Je implementeert nieuwe features; Je gaat in gesprek met eindgebruikers en designers om de applicaties continu te finetunen; Je draait mee in een professionele Agile/Scrum omgeving. Hier ga je werken Onze klant is een internationale organisatie gevestigd in de omgeving van Amsterdam. Ze staan zeer goed bekend in de markt door hun innovatieve dienstverlening op IT gebied en hun gepassioneerde werknemers. Voor hun inspanningen op het gebied van IT hebben ze meerdere prijzen gewonnen! Onze klant is onderdeel van een Corporate werkgever en heeft zelf 300 mensen in dienst. Om

Bekijk vacature »

.NET developer

Functie Als .NET developer wordt jij onderdeel van ons ICT team. In dit multidisciplinaire team ben jij samen met onze senior .NET ontwikkelaar en medior .NET ontwikkelaar verantwoordelijk voor ons ERP systeem. In dit systeem (Navision) ga jij leren ontwikkelen. Wij bieden jou dan ook een gedegen opleiding aan, samen met de ondersteuning van onze Senior .NET developer. Daarnaast ga jij aan de slag met ons portaal geschreven in Sharepoint. Verder ben jij verantwoordelijk voor EDI verkeer en het ontwikkelen binnen het ERP systeem en andere toepassingen en rapportages. Van jou wordt verwacht dat jij het proces goed leert kennen

Bekijk vacature »

Senior front end developer Digital Agency Amsterda

Functie Wij werken in multidisciplinaire teams aan verschillende projecten, echter blijf je niet gebonden aan 1 team. Dit houdt in dat wij verschillende specialisten in dienst hebben en deze door middel van een roulatiesysteem in multidisciplinaire teams laten werken. Het team bestaat vaak uit Frontend developer(s), Backend Developer(s), Designer(s), Tester(s) en Mobile Developer(s). Deze teams worden afgewisseld waardoor jij de mogelijkheid krijgt om met iedereen een keer samen te werken. Als Frontend Developer ben jij ónze Specialist op dit gebied. Jij werkt mee aan verschillende projecten voor verschillende klanten. Denk bijvoorbeeld aan klanten, zoals’; BAM, IDFA en Ultimaker. Hierbij zorg

Bekijk vacature »

C++ Ontwikkelaar

Functieomschrijving Ben jij als software ontwikkelaar toe aan een nieuwe uitdaging? Dan zoeken wij jou! Voor het maken van de procesbesturingssoftware gebruiken onze projectteams een in C++ en C# geschreven tool. Dit is een gedistribueerd object framework wat alle kernfuncties biedt voor een procesautomatisering. Verder zullen jouw werkzaamheden o.a. bestaan uit: Ontwerpen, programmeren en testen van product aanpassingen; Analyseren van vragen en wensen van gebruikers en deze vertalen naar een functioneel ontwerp; Inzichtelijk maken van voortgang omtrent softwarewerkzaamheden, o.a. door middel van SCRUM; Continu toetsen van het effect van nieuwe releases op andere tools en processen; Implementeren van nieuwe product

Bekijk vacature »

Front-end (Angular) developer - remote werken

Functie Als Front-end (Angular) developer ga je aan de slag met het uitbouwen van hun webapplicatie, als één van de front-end experts ga je samen met collega’s in een devops team werken aan een nieuw front-end voor hun calculatie oplossing. Binnen de calculatiesoftware kunnen meerdere professionals tegelijk samenwerken, 3D calculaties uitvoeren en ook inzien met de benodigde specifieke details. Deze software wordt veel ingezet om projectbeschrijvingen en kosten in kaart te brengen, en tijdens de uitvoering te bewaken. Maar hiernaast liggen er in de toekomst veel meer plannen op het gebied van front-end in de andere applicaties. Genoeg te doen

Bekijk vacature »

Back-end developer

Dit ga je doen Development d.m.v. XQuery, JSON/XML en REST API's; Ontwikkelen aan een tof en complex zorgplatform; Koppelingen maken met de NoSQL database; Testen en documenteren van de ontwikkelde functionaliteiten; Samenwerking met andere front- en back-end ontwikkelaars. Hier ga je werken Voor een vooruitstrevende organisatie binnen de zorg in Den Haag zijn wij opzoek naar een Back-end Developer die ervaring heeft met o.a.XQuery en Vue.JS of daarin graag zou willen ontwikkelen. Je zal ontwikkelen aan een tof en complex zorgplatform en koppelingen maken met de NoSQL database. Ook het testen en documenteren van de ontwikkelde functionaliteiten behoort tot jouw

Bekijk vacature »

Full stack .NET developer Microsoft 365

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Full stack .NET developer Microsoft 365

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Pagina: « vorige 1 2 3

- Ariën  -
Beheerder

- Ariën -

26/10/2024 23:25:53
Quote Anchor link
Je weet toch wat een string is, en wat een query is? En ook hoe een echo werkt?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
//Controle of bij te werken waarden correct zijn.
$_POST['set'] = ''; // Dit kan een lege string zijn
// Controleer of de variabele leeg is, zo ja, gebruik NULL

$variabele_sql = empty($variabele) ? "NULL" : "'" . mysqli_real_escape_string($variabele) . "'";

$queryUpdate = "UPDATE modellen SET start_set = '".$_POST['set']."'";
echo "De SQL-query is: ".$queryUpdate;
// en dan het uitvoeren etc....
?>
Gewijzigd op 26/10/2024 23:26:20 door - Ariën -
 
PHP hulp

PHP hulp

12/12/2024 16:13:02
 
Guus Wiegerinck

Guus Wiegerinck

27/10/2024 15:47:34
Quote Anchor link
- Ariën - op 26/10/2024 23:25:53:
Je weet toch wat een string is, en wat een query is? En ook hoe een echo werkt?

Neen, tot jullie erover begonnen, had ik nog nooit van een echo van gehoord. De laatste jaren heb ik me niet meer in php verdiept, het overzicht van mijn treinmodellen was af en werkte. Dus de noodzaak ontbrak.

Toevoeging op 27/10/2024 15:59:59:

Ik heb dit in mijn script gezet, conform jouw suggestue:
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
$_POST['set'] = ''; // Dit kan een lege string zijn
// Controleer of de variabele leeg is, zo ja, gebruik NULL
$variabele_sql = empty($variabele) ? "NULL" : "'" . mysqli_real_escape_string($variabele) . "'";
//control of pagina zichzelf heeft aangeroepen via hidden field uit formulier aan eind van deze pagina

//if (!EMPTY ($_POST['set'])){$_POST['set'] = (int)$_POST['set'];}

//Controles over de aard van $_POST['set']
//echo var_dump(is_string($_POST['set']));
echo "De SQL-query is: ".$queryUpdate;

IF(isset($_POST['JA']))
   { //query samenstellen
    $queryUpdate = etc etc etc


Eerst krijg ik een waarschuwing: Undefined variable $queryUpdate in C:\wamp\www\modellenEdit.php on line
Dat klopt, is een lege string.

Voer ik de queryUPDATE uit, dan krijg ik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
De SQL-query is: Wijzigen is niet gelukt.
Incorrect integer value: '' for column 'start_set' at row 1
Query: UPDATE modellen SET merk = '10 ', artikelnummer = '37075', maatschappij = '6', soort = '20', bedrijf = '', reeks = '232TC 411', klasse = '4', asindeling = '24', lengte = '16.00', interieur = 'nee', verlichting = '10', tijdperk = '2', aantal = '1', railsysteem = '2', stroomsoort = '4', wielmerk = '10', wieldiameter = '0', wielaslengte = '0', motor = '4', gemotoriseerd = 'ja', decoder = '4', protocol = '5', adres = 'auto', consist_adres = '', bijzonderheden = '', extra_informatie = 'Oorspronkelijk Pruisisch ontwerp (T18) voor de Reichseisenbahnen in Elsa-Lothringen. Door de SNCF werden de locomotieven geregistreerd als SNCF Serie 1-232 TC met de nummers 401 t/m 427.', modelinfo = '', categorie = '3', afbeelding = '218', OVP = '2', start_set = '' WHERE id=202

Bedoelen jullie dit met de echo??? Ja, die ken ik zo langzamerhand wel. Eerder noemde ik dat de uitkomst van mysqli_error($db)


Toevoeging op 27/10/2024 16:06:09:

In mijn reactie op 25 okt gaf ik een serie testen met verschillende waarden van $_POST['set']. Mijn conclusie dat geen van allen werkten was gebaseerd op de "echo's": incorrect integer value. Alle waarden die tot nu toe uit het formulier zijn gekomen, waren strings.

Toevoeging op 27/10/2024 16:21:17:

Ozzie PHP op 26/10/2024 17:47:08:
De waarde leeglaten kan wel, maar dan moet je dus een controle doen: als de waarde leeg is, voer dan NULL in in je query. En zoals Ariën al aangaf moet NULL dan geen string zijn.

'dit is een string'

'NULL' => dit is ook een string!

NULL => dit is NULL (dus geen string) en dit moet je gebruiken in je query


Als ik in min script dit schrijf: value=null
Dat levert dat ook de echo/foutmelding op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
De SQL-query is: Wijzigen is niet gelukt.
Incorrect integer value: '' for column 'start_set' at row 1


Mijn idee is: Alles wat ik in value type en aan $_POST[] wordt toegekend is een string. Dat is niet het geval als de waarde die aan $_POST[] wordt meegegeven als integer uit de database gehaald is en aan een tijdelijke variabele is toegekend en vervolgens in het formulier als waarde wordt verzonden.
Gewijzigd op 27/10/2024 16:22:40 door Guus Wiegerinck
 
- Ariën  -
Beheerder

- Ariën -

27/10/2024 18:00:57
Quote Anchor link
Hoe ziet de query eruit waarin je NULL probeert te verbruiken? Laat die eens zien...
 
Guus Wiegerinck

Guus Wiegerinck

27/10/2024 22:28:36
Quote Anchor link
Hier de meest relevante regels uit mijn script, dus alleen die die betrekking hebben op veld "startset" = $_POST['set']. Alle andere heb ik weggelaten.

Je ziet dat ik hier NULL in de database wil zetten, i.p.v. van de 0 die er nu staat. Zie de regel met value=null.
Maar ik kan er ook 0 of '0' of "0" neerzetten. Het maakt allemaal niet uit, alleen de regel if (!EMPTY ($_POST['set'])){$_POST['set'] = (int)$_POST['set'];} maakt het verschil. Maar ook dan blijft er een 0 in de tabel staan.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
include  'inc\inc_connect_db.php';

if (!EMPTY ($_POST['set'])){$_POST['set'] = (int)$_POST['set'];}

IF(isset($_POST['JA']))
   {
//query samenstellen
    $queryUpdate =
        "UPDATE
            modellen
        SET
        start_set = '"
.$_POST['set']."'
        WHERE
            id="
.$_POST['id'];
$resultEdit = mysqli_query($db, $queryUpdate) or die("Wijzigen is niet gelukt.<br />" . mysqli_error($db) . "<br /> Query: " . $queryUpdate);
    $resultEdit  = TRUE;
    if($resultEdit === TRUE)
    {


        echo("Rij nummer".$_POST['id']." is bijgewerkt<br>\n");
        echo("<a href=\"javascript:window.close()\">Terug naar overzicht</a>");
    }
}

ELSE
{
    //indien pagina zichzelf nog nietheeft aangeroepen wijzigingsformulier op scherm zetten
$queryForm = "SELECT * FROM modellen  WHERE modellen.id LIKE '".$_GET['id']."'";
$resultForm = mysqli_query($db, $queryForm ) or die ("Er is iets fout gegaan bij het ophalen van gegevens.<br />" . mysql_error() . "<br /> Query: " . $queryForm);
?>


<html>
    <head>
        <title>Formulier wijzig beschrijving modellen</title>
        <link rel="stylesheet" type="text/css" href="css/modellen.css"/>
        <script language="javascript" type="text/javascript"  src="scripts/popup_mysqldb_adddeledit.js"></script>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    </head>
    
<?php //gegevens uit tabel ophalen en toekennen aan tijdelijke variabelen

    while($rij=mysqli_fetch_array($resultForm))
    {

        $set_id = $rij['start_set'];
        }

     //(start)sets

       if (empty ($set_id)) {$Set[] = "<option SELECTED value=null>n.v.t.</option>\n"; }
        
        // de bestaande startsets uit database halen
        $resultSet = mysqli_query($db,
        "SELECT * FROM sets ORDER BY Naam") or die ("ophalen (start)sets is niet gelukt.<br />");
        while ($set = mysqli_fetch_assoc($resultSet))
           {

                if ($set['id_set'] == $set_id)
                {

                        $Set[] = "<option SELECTED value=\"".$set['id_set']."\">".$set['Naam']."</option>\n";
                }

                else
                   {
                        $Set[] = "<option value=\"".$set['id_set']."\">".$set['Naam']."</option>\n";
                }
        }

?>


    <body>
        <h2>Wijzig deze gegevens</h2>
        <p><i>Record nr: <?php echo $_GET['id'] ?></i></p>
        
    <form action="<?php echo($_SERVER["PHP_SELF"]);?>" method="post">
       <input type="hidden" name="JA" value="1">
       <input type="hidden" name="id" value="<?php echo($_GET['id']);?>">
    <table width="100%">
         <tr>
            <td>(Start)set</td>
            <td>
                <select name="set"><?php foreach($Set AS $sets) echo $sets ?></select>
            </td>
        </tr>
</table>
        <input type="Submit" value="Wijzigingen bijwerken">
        <input type="Button" value="Nee, terug naar overzicht" onclick="javascript:self.close();">
    </form>
<?php
    //hier wordt else-blok af gesloten
}
?>

    </body>
</html>
Gewijzigd op 27/10/2024 22:37:21 door Guus Wiegerinck
 
- Ariën  -
Beheerder

- Ariën -

27/10/2024 22:45:01
Quote Anchor link
Wat Ozzie zegt, het wordt als een string behandeld. Laat de value in de option gewoon leeg, doe een check met empty, en gebruik dan NULL in je query.
 
Guus Wiegerinck

Guus Wiegerinck

28/10/2024 15:07:54
Quote Anchor link
Guus Wiegerinck op 27/10/2024 15:47:34:
- Ariën - op 26/10/2024 23:25:53:
Je weet toch wat een string is, en wat een query is? En ook hoe een echo werkt?

Neen, tot jullie erover begonnen, had ik nog nooit van een echo van gehoord. De laatste jaren heb ik me niet meer in php verdiept, het overzicht van mijn treinmodellen was af en werkte. Dus de noodzaak ontbrak.


Nog nooit van 'echo gehoord? Ik schaam me, natuurlijk ken ik 'echo'. Elke keer als ik iets op het scherm wilde zien, gebruikte ik 'echo'. Alleen in combi met mysql-query kende ik het niet.



Toevoeging op 28/10/2024 15:26:57:

- Ariën - op 27/10/2024 22:45:01:
Wat Ozzie zegt, het wordt als een string behandeld. Laat de value in de option gewoon leeg, doe een check met empty, en gebruik dan NULL in je query.


Zie hier wat ik ervan gemaakt heb

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
include  'inc\inc_connect_db.php';

if (empty($_POST['set']))
    {

        $_POST['set'] = null;
    }


else {$_POST['set'] = (int)$_POST['set'];}

echo "De SQL-query is: ".$queryUpdate;

IF(isset($_POST['JA']))
   {
//query samenstellen
    $queryUpdate =
        "UPDATE
            modellen
        SET
        start_set = '"
.$_POST['set']."'
        WHERE
            id="
.$_POST['id'];
$resultEdit = mysqli_query($db, $queryUpdate) or die("Wijzigen is niet gelukt.<br />" . mysqli_error($db) . "<br /> Query: " . $queryUpdate);
    $resultEdit  = TRUE;
    if($resultEdit === TRUE)
    {


        echo("Rij nummer".$_POST['id']." is bijgewerkt<br>\n");
        echo("<a href=\"javascript:window.close()\">Terug naar overzicht</a>");
    }
}

ELSE
{
    //indien pagina zichzelf nog nietheeft aangeroepen wijzigingsformulier op scherm zetten
$queryForm = "SELECT * FROM modellen  WHERE modellen.id LIKE '".$_GET['id']."'";
$resultForm = mysqli_query($db, $queryForm ) or die ("Er is iets fout gegaan bij het ophalen van gegevens.<br />" . mysql_error() . "<br /> Query: " . $queryForm);
?>


<html>
    <head>
        <title>Formulier wijzig beschrijving modellen</title>
        <link rel="stylesheet" type="text/css" href="css/modellen.css"/>
        <script language="javascript" type="text/javascript"  src="scripts/popup_mysqldb_adddeledit.js"></script>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    </head>
    
<?php //gegevens uit tabel ophalen en toekennen aan tijdelijke variabelen

    while($rij=mysqli_fetch_array($resultForm))
    {

        $set_id = $rij['start_set'];
        }

     //(start)sets

       if (empty ($set_id)) {$Set[] = "<option SELECTED>n.v.t.</option>\n"; }
        
        // de bestaande startsets uit database halen
        $resultSet = mysqli_query($db,
        "SELECT * FROM sets ORDER BY Naam") or die ("ophalen (start)sets is niet gelukt.<br />");
        while ($set = mysqli_fetch_assoc($resultSet))
           {

                if ($set['id_set'] == $set_id)
                {

                        $Set[] = "<option SELECTED value=\"".$set['id_set']."\">".$set['Naam']."</option>\n";
                }

                else
                   {
                        $Set[] = "<option value=\"".$set['id_set']."\">".$set['Naam']."</option>\n";
                }
        }

?>


    <body>
        <h2>Wijzig deze gegevens</h2>
        <p><i>Record nr: <?php echo $_GET['id'] ?></i></p>
        
    <form action="<?php echo($_SERVER["PHP_SELF"]);?>" method="post">
       <input type="hidden" name="JA" value="1">
       <input type="hidden" name="id" value="<?php echo($_GET['id']);?>">
    <table width="100%">
         <tr>
            <td>(Start)set</td>
            <td>
                <select name="set"><?php foreach($Set AS $sets) echo $sets ?></select>
            </td>
        </tr>
</table>
        <input type="Submit" value="Wijzigingen bijwerken">
        <input type="Button" value="Nee, terug naar overzicht" onclick="javascript:self.close();">
    </form>
<?php
    //hier wordt else-blok af gesloten
}
?>

    </body>
</html>


Ik heb hem getest en het werkt. In de tabel staat wel een 0, geen NULL.
En ik krijg een waarschuwing:
Warning: Undefined variable $queryUpdate in C:\wamp\www\modellenEdit.php on line 23
regel 23:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo "De SQL-query is: ".$queryUpdate;

Soms op de verkeerde plek in het script??? Eerder na uitvoering van de UPDATE, waar ook "or die("Wijzigen is niet gelukt.<br />" . mysqli_error($db) . "<br /> Query: " . $queryUpdate)" staat, zou ik denken.

Toevoeging op 28/10/2024 15:40:11:

ik heb
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysqli_real_escape_string($_POST['set']);

weggelaten, want hij produceerde een foutmelding: miste één van de twee benodigde argumenten.
Moest het soms
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysqli_real_escape_string($mysqli, $_POST['set']);
zijn?
Bovendien gaat het op deze plaats om integers, niet im strings.

Trouwens, als ik alles wil escapen, moet ik dat dan per $_POST[] doen? Is nogal omvangrijk.
Gewijzigd op 28/10/2024 15:47:56 door Guus Wiegerinck
 
- Ariën  -
Beheerder

- Ariën -

28/10/2024 18:39:31
Quote Anchor link
Wat is het praktisch nut van dit?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$resultEdit
  = TRUE;
?>


"Ik weet niet of het uitvoeren van de query lukt, maar ik zeg maar zelf even dat het lukt!"
Heel bijzonder, en zeer fout.... :-P


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
echo "De SQL-query is: ".$queryUpdate;

    $queryUpdate =
        "UPDATE
            modellen
        SET
        start_set = '"
.$_POST['set']."'
        WHERE
            id="
.$_POST['id'];
?>

Dit klopt ook niet. Of ben je helderziend? Want $queryUpdate is nog niet gedefinieerd, wat daaronder gebeurt, en daarvoor wil je al weten wat erin staat?

Over je mysqli_real_escape_string() vraag:
Heb je al op mysqli_real_escape_string gekeken?
Dan kan je zien dat de opbouw als volgt is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysqli_real_escape_string(mysqli $mysql, string $string): string

(dit is geen code)

Dus: Eerst moet je inderdaad de connectie benoemen in het eerste argument, en in het tweede argument je string, wat ook uit $_POST kan komen. Hierbij kan ik me indenken dat het wel behoorlijk omvangrijk kan zijn met heel veel velden (databasenormalisatie zou een goed idee kunnen zijn als je dit wilt beperken). Maar je kan ook kiezen om 'prepared statements' te gebruiken.

https://www.w3schools.com/php/php_mysql_prepared_statements.asp
Dan hoef je jij niet meer bezig te houden met het constant escapen van alles. Dan doet bind_param() wel.
Gewijzigd op 28/10/2024 18:40:16 door - Ariën -
 
Ivo P

Ivo P

29/10/2024 08:33:57
Quote Anchor link
Quote:
Bovendien gaat het op deze plaats om integers, niet im strings.


Maar jij controleert helemaal niet of het ook een integer IS.

gebruik dan op z'n minst in plaats van $_POST['set'], filter_input(INPUT_POST, 'set', FILTER_VALIDATE_INT).

Wat nu als $_POST['set'] niet "12" bevat, maar zeg

"12' , id='0"

Dan verandert hij niet alleen de kolom set naar 12, maar ook id naar 0.
Maar het wordt spannender als er ipv values ook nog met subquery's gewerkt wordt.

Ik heb dat laatst mogen oplossen voor een bedrijf waar na een pen-test dezelfde aanname "het zijn altijd getallen" een lek veroorzaakte.
Bij de pen-test werd dan als subquery een SLEEP(4) gebruikt.
Dit was tevens het bewijs: als ik de beoogde input gebruik, dan ververst de pagina in 1 seconde, met de toevoeging duurt het 5: ergo het is gevoelig voor sql-injectie.

Maar denk je eens in wat er gebeurt als de subquery updates doet in andere tabellen, records verwijdert of hele tabellen dropt.

Bobby Tables maar weer eens noemen: https://xkcd.com/327/
 
Ozzie PHP

Ozzie PHP

29/10/2024 10:39:03
Quote Anchor link
Ivo P op 29/10/2024 08:33:57:
Maar jij controleert helemaal niet of het ook een integer IS.

Er wordt op regel 9 echter wel getypecast naar een integer:

else {$_POST['set'] = (int)$_POST['set'];}

Niet de meest chique manier wellicht, maar daarmee is wel het mogelijke gevaar dat jij beschrijft ondervangen.
 
Ward van der Put
Moderator

Ward van der Put

29/10/2024 11:42:25
Quote Anchor link
-1 is ook een integer...
 
Guus Wiegerinck

Guus Wiegerinck

29/10/2024 14:18:10
Quote Anchor link
Ivo P, echt vrolijk en gerust word ik niet van welke gevaren er allemaal dreigen wanneer je de boel niet dichttimmert. Van tijd tot tijd worden we gealarmeerd als er weer eens een hack heeft plaats gevonden. Groot gelijk om voorzichtig te zijn. Het maakt natuurlijk wel verschil of je ict-werk doet voor een bedrijf of vereniging of wanneer je zoals ik puur hobbymatig voor jezelf iets in elkaar knutselt. Maar toch, ook ik zou het allesbehalve leuk vinden wanneer ik door een typefout of zo mijn hele webapplicatie in het honderd zou sturen.

Jij stelt voor een controle d.m.v. een filter_input. Dat gaat natuurlijk ook per veld, dus bij 30 velden ofwel $_POST[]'s in mijn geval is dat natuurlijk een hele klus, net als bij escapen van je input. Overigens geldt dat ook voor typecasten. Zou ik dat willen, dan zou wat Ariën suggereert nl. databasenormalisatie of 'prepared statements'een goed idee kunnen zijn.

Ik stel me een beetje gerust met:
1. De hoofdtabel bestaat uit
* velden die met een nummer verwijzen naar idnr van te koppelen tabellen;
* velden die tekst bevatten en niet verwijzen naar enige andere tabel.
2. Het veld waar het nu over gaat is een selectieveld, geen textarea. Je kunt er niks intypen of andere keuzes maken dan worden voorgelegd. Of bestaan er toch slinkse sluipwegen behalve natuurlijk na een hack rommelen in het script zelf?
3. In de textareas kan ik natuurlijk wel -1, id=0 of '12" typen, maar die zie ik dan gewoon als tekst op het scherm verschijnen. Die hebben geen invloed op de structuur van de applicatie, denk ik.
4. Werken met subqueries, daar heb ik geen kaas van gegeten. Die zal ik dus niet zo gauw toepassen, tenzij ik zoiets nodig heb om een bepaald doel te bereiken.
5. Wat ik niet heb gedaan - een vorm van "het is gemakkelijk zonder - een inlogpagina vooraf te maken, als vorm van beveiliging. Dat is denk ik toch wel belangrijk, voor het geval dat toch ... ondanks het inloggen bij Windows of zo.

Toevoeging op 29/10/2024 14:55:30:

- Ariën - op 28/10/2024 18:39:31:
Dit klopt ook niet. Of ben je helderziend? Want $queryUpdate is nog niet gedefinieerd, wat daaronder gebeurt, en daarvoor wil je al weten wat erin staat?

Deze regel verplaatst na het voltooien van de Update.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
if($resultEdit === TRUE)
    {
        echo "De SQL-query is: ".$queryUpdate."<br><br>
        Rij nummer".$_POST['id']." is bijgewerkt<br>\n
        <a href=\"javascript:window.close()\">Terug naar overzicht</a>";
    }

Resultaat:
De SQL-query is: UPDATE modellen SET merk = '10 ', artikelnummer = '37075', maatschappij = '6', soort = '20', bedrijf = '', reeks = '232TC 411', klasse = '4', asindeling = '24', lengte = '16.90', interieur = 'nee', verlichting = '10', tijdperk = '2', aantal = '1', railsysteem = '2', stroomsoort = '4', wielmerk = '10', wieldiameter = '0', wielaslengte = '0', motor = '4', gemotoriseerd = 'ja', decoder = '4', protocol = '5', adres = 'automatisch', consist_adres = '', bijzonderheden = '', extra_informatie = 'Oorspronkelijk Pruisisch ontwerp (T18) voor de Reichseisenbahnen in Elsaß-Lothringen. Door de SNCF werden de locomotieven geregistreerd als SNCF Serie 1-232 TC met de nummers 401 t/m 427.', modelinfo = '', categorie = '3', afbeelding = '218', OVP = '2', start_set = '0' WHERE id=202

Quote:
Over je mysqli_real_escape_string() vraag:

Ik heb deze als volgt aangepast
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysqli_real_escape_string($db, $_POST['set']);

Ik krijg nu geen waarschuwing/foutmelding meer. De waarde van $_POST['set'] was "leeg" (niks opgegeven als value in de option-regel) en is een 0 geworden, ondanks de $_POST['set'] = null;. Ik denk niet dat het lukt om de waarde NULL[[/u] in de database gezet te krijgen.
 
Ivo P

Ivo P

29/10/2024 15:35:59
Quote Anchor link
Het gaat er niet om wat er in jouw html-formulier ingevuld kan worden.
Iemand die kwaad wil, probeert daar niet alle waarden die jij in een pulldown plaatst, maar zet daar values naar zijn keuze in.
Dat kun je al doen door met "inspect" in de source van de pagina te rommelen.
Maar liever nog gebruikt iemand dan een speciale tool daarvoor.

Iets als Postman of Insomnia.

Voorbeeld: het ging om het als Afgehandeld markeren van een itme in een lijst. Een simpele klik op het icoontje.
Dan volgt een ajax call met een paar parameters, maar voor het gemak even 1 parameter met het id in kwestie.


Dat ene id, zeg 42, staat dan in een url, of in geval van POST in de body van de call.

https://example.com/setafgehandeld.php?id=42

Onze vriend vulde daar in zijn tool voor in:

https://example.com/afgehandeld?id=42&#32;+&#32;((SELECT&#32;FROM&#32;(SELECT&#32;SLEEP(4)))A&apos; ......)

(ter info &#32; staat voor een spatie en&apos; voor een aprostrof / quootje)

Op ..... gaat het nog even door. In elk geval gaat het om het idee: In plaats van
UPDATE tabel SET afgehandeld = 1 WHERE id = '42'
komt er nu een heel stuk extra bij, waarbij we nu alleen maar een vertraging hebben, maar ook enge dingen kunnen gebeuren.


Het vervelende is, dat je nooit meer snel dergelijke lekken kunt terugvinden: zoals hierboven cast je zelf $_POST['set'] naar een integer.
Ik ben gewend dat $_POST['set'] de onbewerkte versie is, zoals het binnenkomt.
zo behandel ik hem dan ook.

maar als je dat "altijd" zo beveiligt, dan gaat het mis als je ergens bedenkt dat ZET een betere naam is en je dat vergeet aan te passen bij het casten. Of een van de andere 10 redenen waarom dit mis zou gaan. Dan is "altijd" niet meer van toepassing.

En ook in het geval van teksten: je kunt nog zo goed aannemen dat de tekst veilig is en geen hacking kan bevatten: ook een legitieme ' in een tekst over PHP'ers kan een probleem opleveren.

En mijn voorkeur zou ook zijn om altijd prepared statements te gebruiken: het is korter en voorkomt zoektochten of iets al op een andere mnier veilig is gemaakt.
 
Guus Wiegerinck

Guus Wiegerinck

29/10/2024 15:56:17
Quote Anchor link
Ivo P op 29/10/2024 15:35:59:
En mijn voorkeur zou ook zijn om altijd prepared statements te gebruiken: het is korter en voorkomt zoektochten of iets al op een andere manier veilig is gemaakt.


Ik heb even gekeken bij prepared statements. Interessant!!!
Voor mij is dat erg "omdenken", de vertaalslag maken van hoe ik php geleerd heb in het boek 'Basiscursus' en mijn applicatie ombouwen. Ik weet niet of ik er genoeg energie voor heb en uitdaging in zie om zo'n klus op te pakken en af te maken. Naast dit werk heb ik meer taken op mijn bord die soms veel energie vragen - wat voor doet even niet terzake = en tijd vergen.
Dat de applicatie weer werkt na de kwestie "Kan geen verbinding maken met Localhost" is al heel wat.
 
- Ariën  -
Beheerder

- Ariën -

29/10/2024 20:05:58
Quote Anchor link
Hopelijk gaat het je lukken! Succes!
 

Pagina: « vorige 1 2 3



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.