Data toevoegen in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Yannick

Yannick

15/04/2009 18:38:00
Quote Anchor link
Hallo iedereen ik heb hier wat query's maar het wilt maar niet lukken wat doe ik fout?

Bij voorbaat dank!

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
<?php

if ($_POST['submit']){

$categorie=strip_tags($_POST['categorie']);
$naam=strip_tags($_POST['naam']);
$foto=strip_tags($_POST['foto']);
$beschrijving=strip_tags($_POST['beschrijving']);
$prijs=strip_tags($_POST['prijs']);

mysql_query("INSERT INTO `levens` ( `id` , `categorie` , `foto` , `naam` , `beschrijving` , `prijs` )
VALUES ('', '$categorie', '$foto', '$naam', '$beschrijving', '$prijs')"
);

echo "Update has been added";
}

?>


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
<form method="post" action="levens.php">
      <table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
          <td bgcolor="#669900" colspan="3"><div align="center"><strong>LEVEN TOEVOEGEN </strong></div></td>
        </tr>
        <tr>
          <td bgcolor="#99CC00">&nbsp;</td>
          <td bgcolor="#99CC00"><div align="left"><strong>Categorie</strong></div></td>
          <td bgcolor="#99CC00"><select name="categorie" id="categorie">
            <option value="Acteurs">Acteurs/Actrices</option>
            <option value="Politici">Politici</option>
            <option value="Popstars">Popstars</option>
            <option value="Topsporters">Topsporters</option>
            <option value="Zwervers">Zwervers</option>
          </select></td>
        </tr>
        <tr>
          <td bgcolor="#99CC00">&nbsp;</td>
          <td bgcolor="#99CC00"><div align="left"><strong>Naam</strong></div></td>
          <td bgcolor="#99CC00"><input type="text" name="naam" id="naam"/></td>
        </tr>
        <tr>
          <td bgcolor="#99CC00">&nbsp;</td>
          <td bgcolor="#99CC00" valign="top"><div align="left"><strong>Foto</strong></div></td>
          <td bgcolor="#99CC00"><input type="text" name="foto" id="foto"/>
          <br />
          (Vb: http://www.url.com/image.jpg) </td>
        </tr>
        <tr>
          <td bgcolor="#99CC00">&nbsp;</td>
          <td bgcolor="#99CC00" valign="top"><div align="left"><strong>Beschrijving</strong></div></td>
          <td bgcolor="#99CC00"><textarea name="beschrijving" cols="30" name="beschrijving"></textarea></td>
        </tr>
        <tr>
          <td bgcolor="#99CC00">&nbsp;</td>
          <td bgcolor="#99CC00"><div align="left"><strong>Prijs</strong></div></td>
          <td bgcolor="#99CC00"><input type="text" name="prijs" />
          (zonder $-teken) </td>
        </tr>
        <tr>
          <td bgcolor="#99CC00">&nbsp;</td>
          <td bgcolor="#99CC00"><div align="left"></div></td>
          <td bgcolor="#99CC00">
            <div align="left">
              <input type="submit" name="submit" value="Toevoegen" /><input type="Reset" value="Herstel">
          </div></td>
        </tr>
      </table></form>
 
PHP hulp

PHP hulp

27/04/2024 04:39:46
 
Douwe

Douwe

15/04/2009 19:02:00
Quote Anchor link
Wat voor fout krijg je?
En gebruik nooit backticks in je query, krijg je alleen maar problemen van. En haal variabelen uit de string met puntjes, in plaats van ze gewoon in de string te zetten.
 
Yannick

Yannick

15/04/2009 19:05:00
Quote Anchor link
Ik krijg geen foutmelding de echo wordt gewoon uitgevoerd, maar de data komt niet in de database
 
Douwe

Douwe

15/04/2009 19:06:00
Quote Anchor link
Wat zegt mysql_error()?
 
Yannick

Yannick

15/04/2009 19:09:00
Quote Anchor link
Ik krijg geen foutmelding als ik mysql_error() in me source plaats

EDIT:
Ik heb je de link gestuurd
Gewijzigd op 01/01/1970 01:00:00 door Yannick
 
Mr.Ark

Mr.Ark

15/04/2009 19:09:00
Quote Anchor link
Beste Yannick,

Zoals je aan de code kleuren kan zien doe je iets fout.

Denk om de volgende dingen.

- Sql Injection (mysql_real_escape_string)
- Gebruik if($_SERVER['REQUEST_METHOD'] == 'POST') { inplaats van if ($_POST['submit']){
- Waar is jouw fouten afhandeling?

Ik zal eens een opzetje voor je maken.

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
<?PHP

/* errors. */
error_reporting(E_ALL);

/* Kijken of er iets wordt gepost. */
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    /* Veld controle. */
    if(isset($_POST['Veld']) && $_POST['Veld'] != '')
    {

        /* Veld is niet leeg Variable aanmaken. */
        $Veld = $_POST['Veld'];
    }

    else
    {
        /* Veld is niet ingevuld. */
        echo 'U heeft het veld "Veld" niet ingevuld.';
    }

    
    /* Query uitvoeren. */
    $aQuery =
    "
        INSERT INTO
            tabel
            (
                Veld
            )
        VALUES
            (
                Veld = '"
.mysql_real_escape_string($Veld)."'
            )
    "
;
    
    /* Resultaat van de query. */
    $aResultaat = mysql_query($aQuery);
    
    /* Kijken of de query is gelukt. */
    if(!$aResultaat)
    {

        /* Query is niet gelukt. */
        echo 'Er is een fout met de query. Query: '.$aQuery.'';
    }

    else
    {
        /* Query is succesvol gelukt. */
        echo 'Query is succesvol gelukt.';
    }
}


?>


Nu mag jij het verder afmaken.
 
Douwe

Douwe

15/04/2009 19:09:00
Quote Anchor link
En als je de mysql_error() echot? ;-)
 
Yannick

Yannick

15/04/2009 19:13:00
Quote Anchor link
@ ark
Bedankt voor je opzet, de site waar ik mee bezig ben is heel simpel omdat het maar voor een klein project is op mijn school (al geef je me wel goeie tips voor als ik het serieus wil aanpakken)

@ Douwe
ook bedankt voor je hulp alvast, ik heb zojuist geprobeerd het in een echo te zetten, maar krijg nog steeds niks door, heb ook de variabelen uit de strings gehaalt en de backticks
 
Douwe

Douwe

15/04/2009 19:14:00
Quote Anchor link
Ook voor kleine projectjes is goede scripting belangrijk ;-)

En wat is de source die je nu hebt?
 
Mr.Ark

Mr.Ark

15/04/2009 19:15:00
Quote Anchor link
@ Yannick

Ga maar verder met mijn voorbeeld in te vullen. Je zal geheid een onvoldoende krijgen als je met jouw code op school aankomt. Tenzij je leraar ook niet slim is. Heb vaker gehoord dat ze op scholen PHP4 aan leerlingen leren.

/* Edit */

Quote:
Ook voor kleine projectjes is goede scripting belangrijk ;-)


That's the spirit ! ^-^
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
 
Yannick

Yannick

15/04/2009 19:17:00
Quote Anchor link
@ ark
Die man kan er zelf helemaal niks van ik vroeg aan hem wat er fout was en hij liep gelijk weg, helaas maar waar

@ Douwe

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
<?php

if ($_POST['submit']){

$categorie=strip_tags($_POST['categorie']);
$naam=strip_tags($_POST['naam']);
$foto=strip_tags($_POST['foto']);
$beschrijving=strip_tags($_POST['beschrijving']);
$prijs=strip_tags($_POST['prijs']);
echo mysql_error();
mysql_query("INSERT INTO 'levens' ( 'id' , 'categorie' , 'foto' , 'naam' , 'beschrijving' , 'prijs' )
VALUES ('', $categorie, $foto, $naam, $beschrijving, $prijs)"
);

echo "Update has been added";
}

?>

 
Douwe

Douwe

15/04/2009 19:18:00
Quote Anchor link
Na het uitvoeren van de query kunnen er pas errors optreden he ;-) Plaats regel 10 dus op regel 13.

En je variabelen zitten nog steeds in je string? Ik zie sowieso al waar het probleem ligt, maar dat zie je zo met de mysql_error() ook wel ;-)
 
Frank -

Frank -

15/04/2009 19:20:00
Quote Anchor link
Waar heb jij SQL geleerd? Tabel- en kolomnamen mag je, en kun je, niet tussen quotes zetten. Het is dat een of andere idioot jou het gebruik van die vieze vuile gore backticks ` heeft aangeleerd, maar leer dat maar weer heel snel af. Tabel- en kolomnamen staan niet tussen rommel, die staan gewoon zo open en bloot in een query.

Een string hoort tussen quotes te staan, dat is een heel ander verhaal. En haal je variabelen buiten quotes, de PHP lijkt helemaal nergens op.

En foutafhandeling doe je ná het uitvoeren van de query en niet vóór het uitvoeren van de query. Vooraf gaat er niks fout...

Tip: Gooi die zooi weg en ga verder met het voorbeeld van Ark. Dat is al minstens 100x beter.
 
Mr.Ark

Mr.Ark

15/04/2009 19:22:00
Quote Anchor link
Quote:
Die man kan er zelf helemaal niks van ik vroeg aan hem wat er fout was en hij liep gelijk weg, helaas maar waar


Tja, Dat het zo gaat hier in nederland, Te erg voor woorden.

Graag wil ik je hier op wijzen: http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php

Neem nou maar van ons aan dat je het goed moet doen.

@ Douwe

Je gaat me nu niet vertellen dat je Yannick gaat uitleggen hoe die slechte code aan het werk moet krijgen?
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
 
Douwe

Douwe

15/04/2009 19:23:00
Quote Anchor link
@ark;
Je gebruikt de variabele $aQuery, maar de data is niet de query (een query is namelijk de string met 'opdrachten'), maar een resource, en al helemaal geen array...
Gewijzigd op 01/01/1970 01:00:00 door Douwe
 
Yannick

Yannick

15/04/2009 19:24:00
Quote Anchor link
Ja ik krijg nu de foutmelding:
Unknown column 'Acteurs' in 'field list'
 
Douwe

Douwe

15/04/2009 19:25:00
Quote Anchor link
Luister eens naar ome Frank :-)

ark;
Het spijt me (A)
 
Frank -

Frank -

15/04/2009 19:26:00
Quote Anchor link
Offtopic: $Veld = $_POST['Veld'];
Dat is dom, heel erg dom. In dit kleine scriptje kun je nog zien dat $Veld een volkomen onbetrouwbaar gegeven is uit een post-formulier, maar zodra het script ook maar iets uitgebreider wordt, vergeet je dit. En voor je het weet, slinger je een variabele zonder enige beveiliging de database is... SQL injection is dan een feit.

Toch al jammer dat er niet met prepared statements wordt gewerkt, MySQLi ondersteunt dit, dat zou de boel een stuk veiliger en bruikbaarder maken.

$aQuery is voor mij een bijzondere naam, er is geen array te bekennen. De a kan ik dan ook even niet plaatsen.
 
Mr.Ark

Mr.Ark

15/04/2009 19:26:00
Quote Anchor link
@ Douwe

Hoe kom je in godsnaam bij een array?

Je mag gerust dat voorbeeld eens proberen hoor. Je zal er versteld van staan hoe goed hij werkt.

Iedereen heeft z'n eigen manier, En als mijn manier ietsjes anders is dan die van jouw maar toch veilig is, Dan is er toch niks aan de hand?

/* Edit */

@ pgFrank

Je kan $aQuery ook zien als $1Query, Ik ben gewend om $aQuery te typen, Je zou ook gewoon $Query kunnen doen.

Ontopic:

Ik laat dit over aan pgFrank, Yannick ik zou het advies maar onthouden wat frank verteld, Je zult er veel van opsteken.

/* Edit (2) */

Quote:
ark; Het spijt me


Geen probleem :-), Menings verschillen kunnen voorkomen & Discuseren moet kunnen toch.
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
 
Yannick

Yannick

15/04/2009 19:27:00
Quote Anchor link
Bedankt Frank voor je commentaar al gaat het me petje toch echt wat te boven
 
Douwe

Douwe

15/04/2009 20:34:00
Quote Anchor link
Ik gebruik de eerste letter van een variabele altijd om aan te geven welk datatype het is. 'a' is dan een array, 's' een string, 'i' een integer, etc. 'r' is een resource, wat mysql_query() teruggeeft.
 



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.