Fout in PHP-script of database (mysql)

Pagina: 1
Acties:
  • 1.572 views

Onderwerpen


Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
Geachte forumleden,

Ik heb een probleem met mijn website. Ik moet namelijk een opdracht maken voor school, maar hier kom ik niet helemaal uit. Het hoeft geen hoogstaande website te worden en ik heb er ook niet heel veel verstand van, dus dan weten jullie dat alvast. :9

In ieder geval is het als volgt: Ik moet een website maken voor een sportdag voor een school. Ik gebruik hiervoor PHP en databases (MySQL). De situatie is als volgt: de gebruiker voert op de website zijn persoonlijke gegevens in (naam, email, etc.) en ook de activiteit die hij wilt doen (voetbal, hockey, etc.). Vervolgens worden deze gegevens naar de database gestuurd. Handig misschien om even de opdracht te kunnen zien: http://img297.imageshack.us/img297/9553/opdrachtict.jpg
Vervolgens zijn er een aantal aspecten buiten beschouwing gelaten, dit zijn: de tijden en max/min aantal personen per activiteit. Als het nu eenmaal werkt, dan voeg ik dit later wel toe. De database ziet er als het goed is uit als aangegeven op de link. ID_naw en ID_act zijn 2 primaire keys. Ook de tabel koppeling heeft de ID_naw en ID_act , ook deze zijn 2 primaire keys. (Zoals ook aangegeven in de opdracht.) Vervolgens is de ID_naw een autoincrement. Hij moet telkens namelijk één stap verhoogt worden. Te beginnen bij 0.

De php codes die ik hiervoor gebruik zijn:

PHP:
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
<?php 
include "../sql/sql.php"; 


$con = mysql_connect("localhost","root",""); 
if (!$con) 
  { 
  die('Could not connect: ' . mysql_error()); 
  } 
mysql_select_db("sportdag", $con); 

$voornaam =  $_GET["voornaam"]; 
$tussenvoegsel = $_GET["tussenvoegsel"]; 
$achternaam = $_GET["achternaam"]; 
$to = $_GET["email"]; 
$klas = $_GET["klas"]; 
$activiteit = $_GET["activiteit"]; 


$query="INSERT INTO naw  
VALUES (ID_naw,'$voornaam','$tussenvoegsel','$achternaam','$to','$klas')";  

$query2="INSERT INTO activiteiten 
VALUES (ID_act, '$activiteit')"; 

// SELECT * FROM `naw` WHERE ID_naw= .. 

// Uitleg SELECT met een sterretje selecteerd men alle kolommen, het is ook mogelijk maar enkele kolommen te doen, door simpelweg een komma te plaatsen. 
// Uitleg FROM uit welke tabel je de gegevens wilt halen. Dit geval dus de 'naw' tabel 
// Uitleg WHERE. Bijv. " WHERE City='Sandnes' " Om Sandnes moeten aanhalingstekens geplaatst worden, rond getallen niet! 




SQL_INSERT($query); 
?> 

Bedankt voor het inschrijven voor de sportdag <?php echo $voornaam, " ", $tussenvoegsel, " ", $achternaam;?><br /> 
Er is een email verzonden naar <?php echo $to, " ", $klas, " ",$activiteit ?>  


<?php 
//Email bevestiging 
$subject = "Inschrijving sportdag"; 
$message = "Beste $voornaam $tussenvoegsel $achternaam \n Je krijgt deze e-mail omdat je hebt ingeschreven voor de Sportdag \n Je hebt je ingeschreven voor $activiteit"; 
$from = "someonelse@example.com"; 
$headers = "From: $from"; 
?>


Zoals te zien is, include hij een ander PHP script. Dat is deze:

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

function SQL_INSERT($query) 
{ 
    $result = SQL_02($query); 
    return $result; 
} 

function SQL_DELETE($query) 
{ 
    $result = SQL_02($query); 
    return $result; 
} 

function SQL_UPDATE($query) 
{ 
    $result = SQL_02($query); 
    return $result; 
} 

function SQL_SELECT($query) 
{ 
    $result = SQL_02($query); 

    $aantal = SQL_03_aantal_rijen($result); 
    echo "<BR>"."aantal rijen ".$aantal; 
    if($aantal > 0) 
    { 
        for($i = 0 ; $i < $aantal ; $i++) 
        { 
            $regel[] = SQL_04_selectie($result,$i); 
        } 
    } 
    return $regel; 
} 

function SQL_02($query) 
{ 
    $server = "localhost"; 
    $user   = "root"; 
    $password = ""; 
    $databasenaam = "sportdag"; 

    mysql_connect($server,$user,$password); 
    $db = mysql_select_db($databasenaam) or die("database $databasenaam niet bereikbaar."); 
    $result = mysql_query($query) or die("query is niet uit te voeren"); 
    return $result; 
} 

function SQL_03_aantal_rijen($result) 
{ 
    $r = mysql_num_rows($result); 
    return $r; 
} 

function SQL_04_selectie($result,$i) 
{ 
    $r = mysql_fetch_array($result); 
    return $r; 
} 

?>


Misschien is het ook handig om te zien hoe het HTML script eruit ziet (dus wat hij aangeeft op de website pagina zelf): heb hem even in PHP gezet, want de HTML tag deed het niet.

PHP:
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
<form action="php/inschrijf.php" method="get">
<table border="0">
<tr>
<td>Voornaam : </td><td><input type="text" name="voornaam" /></td><br/>
</tr>
<tr>
<td>Tussenvoegsel: </td><td><input type="text" name="tussenvoegsel" /></td><br/>
</tr>
<tr>
<td>Achtervoegsel: </td><td><input type="text" name="achternaam" /></td><br/>
</tr>
<tr>
<td>Email: </td><td><input type="text" name="email" /></td><br/>
</tr>
<tr>
<td>Klas: </td><td><input type="text" name="klas" /></td><br/>
</tr>
<tr>
<td>Activiteit: </td> 
<td><select name="Activiteit" size="1"> 
<option value="Voetbal">Voetbal</option>
<option value="Hockey">Hockey</option>
<option value="Tennis">Tennis</option>
<option value="Basketbal">Basketbal</option>
</select></td>
</tr>
</table>
<input type="submit" />
</form>


Echter nu dan uiteindelijk mijn probleem:
De gebruiker voert zijn gegevens in, de voornaam, tussenvoegsel, achternaam, email en klas worden allemaal keurig in de website ingevoerd. Echter de activiteit komt niet in de database te staan. Aangezien 'activiteit' in een andere tabel staat, moet ik volgens mij ook een nieuwe query aanmaken. Query 2 dus (toch???) (ID_naw hoeft de gebruiker uiteraard niet in te voeren, dit staat op auto incredement)

Echter dit werkt allemaal niet... Ik krijg het gewoon niet voor elkaar. Daarom hoop ik dat jullie mij zouden kunnen helpen of tips geven. Ik ben bereid er best wat moeite voor te doen. Maar ik probeer dit al zolang dat ik er een beetje hopeloos van wordt.

Ik hoop dat jullie mij zouden kunnen helpen,
Bij voorbaat dank, _/-\o_

Kevin

Acties:
  • 0 Henk 'm!

  • keejoz
  • Registratie: November 2008
  • Laatst online: 28-08 15:53

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 17:02
- Wat is je bedoeling met al die verschillende SQL_INSERT, SQL_DELETE,etc functies? Dat heeft in deze vorm namelijk niet zo heel veel zin. Sterker, ik vind het verwarrend.

- Waarom gebruik je twee keer keer een mysql_connect naar dezelfde database? Twee connecties heeft enkel zin als je twee verschillende databases wilt gebruiken, of twee verschillende database-users met verschillende rechten.

- Waar wordt query2 eigenlijk uitgevoerd? Als je 'm niet uitvoerd dan gebeurt er ook niets. :)
(ID_naw hoeft de gebruiker uiteraard niet in te voeren, dit staat op auto incredement)
- Waarom staat daar iets over in de query dan? Je moet per query ook wel de id's verzamelen voor je koppel-tabel.

Om eerlijk te zijn is je code imho een bende. Waarom heb je er voor gekozen om je code er zo uit te laten zien, met die functiedeclaraties? Zo'n php-include met verschillende functies kan erg nuttig zijn om je code te structureren, met name in gevallen waar je anders dubbele code zou schrijven, maar ook bijvoorbeeld als je in een script per handeling de procedure op een overzichtelijke manier wilt groeperen. Ik zie dat niet in jouw geval.

offtopic:
Heb je die html zo op school geleerd? Het is een beetje uit de mode om tabellen voor het indelen van formulieren te gebruiken. Ik dacht dat het gebruik van div's bij de meeste opleidingen inmiddels wel was doorgedrongen :)

[ Voor 9% gewijzigd door doeternietoe op 20-02-2010 17:34 ]


Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
doeternietoe schreef op zaterdag 20 februari 2010 @ 17:30:
- Wat is je bedoeling met al die verschillende SQL_INSERT, SQL_DELETE,etc functies? Dat heeft in deze vorm namelijk niet zo heel veel zin. Sterker, ik vind het verwarrend.

- Waarom gebruik je twee keer keer een mysql_connect naar dezelfde database? Twee connecties heeft enkel zin als je twee verschillende databases wilt gebruiken, of twee verschillende database-users met verschillende rechten.

- Waar wordt query2 eigenlijk uitgevoerd? Als je 'm niet uitvoerd dan gebeurt er ook niets. :)


[...]

- Waarom staat daar iets over in de query dan? Je moet per query ook wel de id's verzamelen voor je koppel-tabel.

Om eerlijk te zijn is je code imho een bende. Waarom heb je er voor gekozen om je code er zo uit te laten zien, met die functiedeclaraties? Zo'n php-include met verschillende functies kan erg nuttig zijn om je code te structureren, met name in gevallen waar je anders dubbele code zou schrijven, maar ook bijvoorbeeld als je in een script per handeling de procedure op een overzichtelijke manier wilt groeperen. Ik zie dat niet in jouw geval.

offtopic:
Heb je die html zo op school geleerd? Het is een beetje uit de mode om tabellen voor het indelen van formulieren te gebruiken. Ik dacht dat het gebruik van div's bij de meeste opleidingen inmiddels wel was doorgedrongen :)
Kijk de situatie is zo, ik zit VWO 6 en we leren als het ware PHP en MySQL uit een boek. En het is allemaal zelfstudie. Ik zit niet op een opleiding voor informatica. Vandaar ook dat het een bende zal zijn, ik ben er gewoon niet zo goed in. Ik had daarom een ICT student gevraagd om hulp (niet echt gekregen), want zijn deel was totaal verkeerd. Dit is namelijk hetgeen met al die DELETE en FUNCTION mySQL. Met die include. Ik zal alles wat je zegt even aflopen. Misschien wat overzichtelijker.

- Al die SQL_INSERT, SQL_DELETE werden zo naar mij toegestuurd. Volgens hem was dit de beste methode ofso. Ik weet ook niet precies wat het doet. Het spijt me.

- Ook hierin ben ik niet zo goed, het koppelen van de database met het php script vind ik ronduit slecht uitgelegd. Op internet lukt het me ook allemaal niet zo goed. (voor deze geld hetzelfde als het 1e antwoord hierboven)

- de 2e query wordt niet uitgevoerd.

Volgens mij zou dit er nog moeten komen:
PHP:
1
2
SQL_INSERT($query);
SQL_INSERT($query2);


Zoiets dergelijks denk ik?

- "- Waarom staat daar iets over in de query dan? Je moet per query ook wel de id's verzamelen voor je koppel-tabel." Zou dat betekenen dat ik een 3e query aan moet maken voor mijn koppelingstabel? (Of zou je op de een of andere manier het nummer van de ID_naw en ID_act door moeten sturen naar de koppelingstabel?)

Ik begrijp best dat je hier niet meer op wilt reageren, het is ook een bende. Maarja ik wil er ook voor zorgen dat die bende verdwijnt, en ik hoop dat dat mij gaat lukken. Want op dit moment zie ik het niet zo zitten met die website...

Gegroet, (bij voorbaat dank)

[EDIT]
Ik ga het onderdeel databases in mysql nogmaals doornemen. Ik hoop met enig resultaat...

Acties:
  • 0 Henk 'm!

  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 16-09 12:13

TXC

Ben je verplicht het hele project zelf te programmeren?

Voor iemand die niet noodzakelijk de kennis heeft om een dergelijk project op te zetten, lijkt het mij namelijk een betere oplossing om gebruikt te maken van een CMS, zoals Joomla. Als je zelf niet van plan bent in de toekomst veel te programmeren, kun je dan toch functionele websites maken. De voordelen zijn dan veilgere code, veel minder ontwikkeltijd, beter beheerbaar en onderhoudbaar en makkelijker uit te breiden.

Heb je echter als doel php leren programmeren, en niet een goede website maken, dan kun je beter de huidige koers volgen.

Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
TXC schreef op zaterdag 20 februari 2010 @ 19:47:
Ben je verplicht het hele project zelf te programmeren?

Voor iemand die niet noodzakelijk de kennis heeft om een dergelijk project op te zetten, lijkt het mij namelijk een betere oplossing om gebruikt te maken van een CMS, zoals Joomla. Als je zelf niet van plan bent in de toekomst veel te programmeren, kun je dan toch functionele websites maken. De voordelen zijn dan veilgere code, veel minder ontwikkeltijd, beter beheerbaar en onderhoudbaar en makkelijker uit te breiden.

Heb je echter als doel php leren programmeren, en niet een goede website maken, dan kun je beter de huidige koers volgen.
Jaa helaas, onze leraar informatica vind dat wij dit wel zelfstandig moeten kunnen. Waar sommige 1 jaar over doen om PHP te moeten leren, moeten wij dit in kortere tijd doen. Na het werken met PHP en databases, moet ik ook nog leren programmeren in JAVA. Ik vind het veruit te veel in slechts één jaar, en daarbij zit ik op het atheneum en niet een of andere universiteit waar ik Informatica studeer. Maar dit is helaas mijn visie. Vandaar dat ik nu een beetje (erg) wanhopig begin te worden, en jullie hulp vraag. Aangezien dadelijk de examens eraan komen en dat ook niet zomaar even geleerd is.

[ Voor 6% gewijzigd door K_E_V_I_N op 20-02-2010 19:51 ]


Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 19-09 09:07
Het eerste wat je in ieder geval moet doen is de user input escapen. Dus in plaats van
PHP:
1
$voornaam = $_GET["voornaam"];


Kun je beter dit doen
PHP:
1
$voornaam = mysql_real_escape_string ( $_GET["voornaam"] );


Ook bij de user input die op een HTML pagina word weergegeven als bevestiging, zou ik ook iets anders doen, namelijk gebruik maken van htmlspecialchars();. Het kan anders zijn dat er rare dingen gebeuren als iemand registreert onder de naam </div><b> of ziets.

Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
X_lawl_X schreef op zaterdag 20 februari 2010 @ 20:16:
Het eerste wat je in ieder geval moet doen is de user input escapen. Dus in plaats van
PHP:
1
$voornaam = $_GET["voornaam"];


Kun je beter dit doen
PHP:
1
$voornaam = mysql_real_escape_string ( $_GET["voornaam"] );


Ook bij de user input die op een HTML pagina word weergegeven als bevestiging, zou ik ook iets anders doen, namelijk gebruik maken van htmlspecialchars();. Het kan anders zijn dat er rare dingen gebeuren als iemand registreert onder de naam </div><b> of ziets.
Kan dit ook op deze manier?

PHP:
1
$voornaam = addslashes($_POST["voornaam"]);

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Nee dat is schijnveiligheid.
Op dit moment is de veiligste optie mysql_real_escape_string();

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 17:02
K_E_V_I_N schreef op zaterdag 20 februari 2010 @ 19:34:
[...]


Kijk de situatie is zo, ik zit VWO 6 en we leren als het ware PHP en MySQL uit een boek. En het is allemaal zelfstudie. Ik zit niet op een opleiding voor informatica. Vandaar ook dat het een bende zal zijn, ik ben er gewoon niet zo goed in.
Je kunt prima PHP leren zonder er een les over te krijgen. :)
Ik had daarom een ICT student gevraagd om hulp (niet echt gekregen), want zijn deel was totaal verkeerd. Dit is namelijk hetgeen met al die DELETE en FUNCTION mySQL. Met die include. Ik zal alles wat je zegt even aflopen. Misschien wat overzichtelijker.
Ik denk niet dat-i je veel heeft geholpen. 8)7 Als je het moet leren is een kant-en-klaar scriptje zonder uitleg ook niet echt behulpzaam.
- Al die SQL_INSERT, SQL_DELETE werden zo naar mij toegestuurd. Volgens hem was dit de beste methode ofso. Ik weet ook niet precies wat het doet. Het spijt me.
Waarschijnlijk heeft die student teveel gewild en uiteindelijk te weinig geïmplementeerd, maar zoals ze er nu uitzien heeft het echt geen zin. Mijn advies is om dat gehele gedoe met die functies niet te gebruiken.
- Ook hierin ben ik niet zo goed, het koppelen van de database met het php script vind ik ronduit slecht uitgelegd. Op internet lukt het me ook allemaal niet zo goed. (voor deze geld hetzelfde als het 1e antwoord hierboven)
Wordt het slecht uitgelegd in je lesmateriaal? Je zou een paar internet tutorials kunnen raadplegen, al zit daar ook veel troep tussen. Ook is er veel in het Engels.
- de 2e query wordt niet uitgevoerd.

Volgens mij zou dit er nog moeten komen:
PHP:
1
2
SQL_INSERT($query);
SQL_INSERT($query2);


Zoiets dergelijks denk ik?

- "- Waarom staat daar iets over in de query dan? Je moet per query ook wel de id's verzamelen voor je koppel-tabel." Zou dat betekenen dat ik een 3e query aan moet maken voor mijn koppelingstabel? (Of zou je op de een of andere manier het nummer van de ID_naw en ID_act door moeten sturen naar de koppelingstabel?)
Je moet inderdaad met een derde query een rij aan de koppeltabel toevoegen, die de eerdere gegevens bij elkaar voegt.
Ik begrijp best dat je hier niet meer op wilt reageren, het is ook een bende. Maarja ik wil er ook voor zorgen dat die bende verdwijnt, en ik hoop dat dat mij gaat lukken. Want op dit moment zie ik het niet zo zitten met die website...
Eigenlijk weet ik niet zo waar ik zou moeten beginnen. Op GoT willen we je best helpen, maar met de code die er nu staat is zoveel mis dat van gericht commentaar nauwelijks sprake kan zijn.
Gegroet, (bij voorbaat dank)

[EDIT]
Ik ga het onderdeel databases in mysql nogmaals doornemen. Ik hoop met enig resultaat...
Succes ermee in ieder geval.

Misschien heb je iets aan een klein (niet getest) voorzetje voor hoe ik het je zou aanraden:

PHP:
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
<?php
//De volgende regel code maakt een verbinding met de database. Deze verbinding kun je het hele verdere script blijven gebruiken.
mysql_connect( "localhost", "root", "" );

//De volgende regel geeft aan PHP door vanuit welke database je gegevens wilt ophalen.
mysql_select_db( "test" );

//Gebruik altijd de volgende functie om tekst veilig invoerbaar te maken.
//Dit geldt voor alle tekst die van externe bronnen komt. In jouw geval tekst van een invoerveld.
//Speciale tekens die mysql zouden kunnen laten verongelukken, worden aangepast, zodat ze precies zoals ingevoerd in de tabel komen.
$naam = mysql_real_escape_string( $_GET[ "naam" ] );
$email = mysql_real_escape_string( $_GET[ "email" ] );

//Gebruik altijd de volgende functie om getallen veilig invoerbaar te maken
//Letters en speciale tekens worden uit de variabele verwijdert, zodat mysql daar geen last van heeft.
$activiteitId = intval( $_GET[ "activiteitId" ] );

//Een query om iets in te voeren zou ik er altijd zoals volgt uit laten zien.
//Geef dus altijd precies aan voor welke velden de invoer bedoelt is.
//Een id dat met auto increment werkt valt hier altijd buiten!
mysql_query( "INSERT INTO naw( naam, email ) VALUES( $naam, $email )" );

//We willen weten welk id deze gebruiker heeft toegewezen gekregen, want dat id hebben we later nodig
//Deze functie geeft altijd het laatst weggegeven id met auto increment terug, binnen dit script
$gebruikerId = mysql_insert_id();

//Vervolgens koppel je aan de gebruiker een activiteit
mysql_query( "INSERT INTO koppeling( naw_id, activiteit_id ) VALUES( $gebruikerId, $activiteitId )" );

//Een hoop dingen zijn opengelaten, maar jij moet natuurlijk zelf het leren. Ik raadt je aan om alle functies die ik heb gebruikt op te zoeken op php.net. Zorg dat je snapt wat ze doen en wat de argumenten(invoer) zijn. Neem vervolgens niet het script letterlijk over, maar probeer of je het zelf kunt schrijven. Ondertussen wil je waarschijnlijk het een en ander verbeteren.
//Pagina's waar je in ieder geval even naar wilt kijken zijn deze:
// - http://nl3.php.net/manual/en/function.strip-tags.php
// - http://nl3.php.net/manual/en/function.htmlspecialchars.php
//Bedenk voor jezelf eens waarom deze functies belangrijk zijn. X_lawl_X geeft al vast een belangrijk voorzetje, maar er is meer.



Edit:
K_E_V_I_N schreef op zaterdag 20 februari 2010 @ 20:57:
[...]


Kan dit ook op deze manier?

PHP:
1
$voornaam = addslashes($_POST["voornaam"]);
In veel gevallen zal het dezelfde uitkomst hebben, toch is het niet aan te raden. De speciale mysql functie pakt meer speciale tekens aan die niet in de query horen dan addslashes() doet. Die zouden er anders doorheen glippen. Daarnaast is de mysql functie afhankelijk van de mysql versie die je gebruikt. Als er iets zou veranderen in de mysql-syntax, wordt de functie automatisch meeveranderd. Addslashes blijft hetzelfde.

[ Voor 5% gewijzigd door doeternietoe op 20-02-2010 21:23 ]


Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
doeternietoe schreef op zaterdag 20 februari 2010 @ 21:18:

In veel gevallen zal het dezelfde uitkomst hebben, toch is het niet aan te raden. De speciale mysql functie pakt meer speciale tekens aan die niet in de query horen dan addslashes() doet. Die zouden er anders doorheen glippen. Daarnaast is de mysql functie afhankelijk van de mysql versie die je gebruikt. Als er iets zou veranderen in de mysql-syntax, wordt de functie automatisch meeveranderd. Addslashes blijft hetzelfde.
Oke, hartstikke bedankt voor alle aanwijzingen op dit moment! Ik heb alles hervormd en ik zal even hier het resultaat laten zien. Ik ben nog niet klaar, heb alleen één tabel gedaan nu. Ik ga ook nog de 2e tabel eraan koppelen en dan die koppeling nog maken. Dat is echter wel het moeilijkst. Maar met jullie hulp moet het ook wel lukken.

Zo ziet het eruit wat ik tot nu toe heb:

De invoerpagina.php
// waar de gegevens worden ingevoerd door de gebruiker.
PHP:
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
<?php
print "<html>";
print "<head>";
print "<title>Toevoegen van gegevens aan de database</title>";
print "</head>";
print "<body>";
print "<h2>Gegevens toevoegen aan database</h2>";
print "<form action=\"toevoegen.php\" method=\"GET\">";
print "<table cellpadding=\"2\">";
print "<tr>";
print "<td align=\"right\">voornaam:</td>";
print "<td><input type=\"text\" name=\"voornaam\"
size=\"25\"></td>";
print "</tr>";
print "<tr>";
print "<td align=\"right\">tussenvoegsel:</td>";
print "<td><input type=\"text\" name=\"tussenvoegsel\"
size=\"25\"></td>";
print "</tr>";
print "<tr>";
print "<td align=\"right\">achternaam:</td>";
print "<td><input type=\"text\" name=\"achternaam\"
size=\"25\"></td>";
print "</tr>";
print "<tr>";
print "<td align=\"right\">email:</td>";
print "<td><input type=\"text\" name=\"email\"
size=\"25\"></td>";
print "</tr>";
print "<tr>";
print "<td align=\"right\">klas:</td>";
print "<td><input type=\"text\" name=\"klas\"
size=\"25\"></td>";
print "</tr>";
print "</tr>";
print "<tr>";
print "<td><input type=\"submit\" value=\"Voeg gegevens
toe\"></td>";
print "<td><input type=\"reset\" value=\"Wis
gegevens\"></td>";
print "</tr>";
print "</table>";
print "</form>";
print "</body>";
print "</html>";
?>


Het toevoegen.php hierin worden daadwerkelijk de gegevens in de database toegevoegd:
PHP:
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
<?php

// Connect met de database maken
include ("verbinding.php");

// Ophalen van gegevens uit het formulier
$voornaam = mysql_real_escape_string($_GET["voornaam"]);
$tussenvoegsel = mysql_real_escape_string($_GET["tussenvoegsel"]);
$achternaam = mysql_real_escape_string($_GET["achternaam"]);
$email = mysql_real_escape_string($_GET["email"]);
$klas = mysql_real_escape_string($_GET["klas"]);

// Invoegen van de gegevens in de tabel
$sql = "INSERT INTO naw (voornaam,tussenvoegsel,achternaam,email,klas)
VALUES('$voornaam','$tussenvoegsel','$achternaam','$email','$klas')";
$resultaat = mysql_query($sql);

// Welk ID heeft deze gebruiker toegewezen gekregen. Laat zien wat de laatste weggegeven waarde is van de auto increment --> nog niet volledig!
$gebruikerID = mysql_insert_id(); 

// Verbreken van de verbinding met de database
$verbreken = mysql_close($verbinding);

// Bevestigen dat de gegevens zijn opgeslagen
print "De gegevens van $voornaam zijn opgeslagen in de database.";
?>

<?php
// Format INSERT INTO query:

// $sql = "INSERT INTO naw (kol1 , kol2 , etc.) VALUES ('var1','var2',  etc.)";
// $resultaat = mysql_query($sql)
?>


En verbinding.php
// om de verbinding met de database te maken.
// deze verbinding.php worden 'included' in de toevoegen.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
$host = "localhost";
$gebruiker = "root";
$wachtwoord = "";
$database = "testversie";

$verbinding = mysql_connect("$host", "$gebruiker", "$wachtwoord")
or die("Verbinding met de server mislukt vanwege:" . mysql_error());
$db = mysql_select_db("$database",$verbinding) or die("Database
error: " . mysql_error());
?>


Mochten er op dit moment al fouten in zitten laat me het even weten. Ik ga zo verder met het toevoegen van een 2e tabel (activiteiten). En dan dus de koppeling maken. Koppeling vind ik echt veruit het moeilijkst.. hiermee kan ik wel wat hulp gebruiken :X Want dan moet ik eerst een 2e query aanmaken voor het toevoegen van de activiteit en vervolgens een 3e query aanmaken voor de koppeling en deze ook meegeven:

PHP:
1
2
3
4
5
$sql3 = "SELECT naw.ID_naw, activiteiten.ID_act
FROM 'naw' ,'activiteit'
WHERE naw.ID_naw = activiteiten.ID_act
or die ("kan query niet uitvoeren")";
$resultaat3 = mysql_query(sql3)


met hiervoor 2 andere $sql scripts, namelijk:

PHP:
1
2
3
$sql = "INSERT INTO naw (voornaam,tussenvoegsel,achternaam,email,klas)
VALUES('$voornaam','$tussenvoegsel','$achternaam','$email','$klas')";
$resultaat = mysql_query($sql);


PHP:
1
2
3
$sql2 = "INSERT INTO activiteiten (activiteit)
VALUES('$activiteit')";
$resultaat2 = mysql_query($sql2);



In ieder geval alvast bedankt

[ Voor 10% gewijzigd door K_E_V_I_N op 20-02-2010 22:32 ]


Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 19-09 09:07
Ik heb alleen maar naar het eerste blok code gekeken omdat ik te moe ben op dit moment, maar ik heb er wel commentaar op. :)

Wat jij doet met print

PHP:
1
print "<td align=\"right\">tussenvoegsel:</td>";


Is goed, alleen persoonlijk zou ik het zo doen:

PHP:
1
print '<td align="right">tussenvoegsel:</td>';


Ziet er zo een stuk netter uit. ;)

Edit: Ik heb toch even verder gekeken. Dit

PHP:
1
2
3
4
5
$sql3 = "SELECT naw.ID_naw, activiteiten.ID_act
FROM 'naw' ,'activiteit'
WHERE naw.ID_naw = activiteiten.ID_act
or die ("kan query niet uitvoeren")";
$resultaat3 = mysql_query(sql3)

Gaat natuurlijk niet werken. "Or die ("kan query niet uitvoeren")" is geen SQL, maar toch stop jij het in $sql3 en laat je het uitvoeren door Mysql_query();. :)

Bovendien heb je het laatste stuk een beetje slordig afgemaakt. Het laatste moet zijn mysql_query($sql3);

[ Voor 45% gewijzigd door X_lawl_X op 21-02-2010 00:05 ]


Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
X_lawl_X schreef op zondag 21 februari 2010 @ 00:00:
PHP:
1
2
3
4
5
$sql3 = "SELECT naw.ID_naw, activiteiten.ID_act
FROM 'naw' ,'activiteit'
WHERE naw.ID_naw = activiteiten.ID_act
or die ("kan query niet uitvoeren")";
$resultaat3 = mysql_query(sql3)

Gaat natuurlijk niet werken. "Or die ("kan query niet uitvoeren")" is geen SQL, maar toch stop jij het in $sql3 en laat je het uitvoeren door Mysql_query();. :)

Bovendien heb je het laatste stuk een beetje slordig afgemaakt. Het laatste moet zijn mysql_query($sql3);
In ieder geval bedankt dat je er dan ondanks dat je moe was toch nog even naar wilde kijken. Heb het even gewijzigd, het zou nu correct moeten zijn: Klopt dat?

PHP:
1
2
3
4
$sql3 = "SELECT naw.ID_naw, activiteiten.ID_act
FROM 'naw' ,'activiteiten'
WHERE naw.ID_naw = activiteiten.ID_act";
$resultaat3 = mysql_query($sql3);

[ Voor 5% gewijzigd door K_E_V_I_N op 21-02-2010 00:25 ]


Acties:
  • 0 Henk 'm!

  • ID-College
  • Registratie: November 2003
  • Laatst online: 18-09 18:03
K_E_V_I_N schreef op zondag 21 februari 2010 @ 00:23:
[...]


In ieder geval bedankt dat je er dan ondanks dat je moe was toch nog even naar wilde kijken. Heb het even gewijzigd, het zou nu correct moeten zijn: Klopt dat?

PHP:
1
2
3
4
$sql3 = "SELECT naw.ID_naw, activiteiten.ID_act
FROM 'naw' ,'activiteiten'
WHERE naw.ID_naw = activiteiten.ID_act";
$resultaat3 = mysql_query($sql3);
Ja, maar nu zie je niet wat er fout gaat. Beter zet je or die() er gewoon achter.

Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 19-09 09:07
Het is inderdaad beter zo ja. Wat ID-College zegt is ook waar, het is handig om die(); te gebruiken als je het goed doet. ;)

PHP:
1
$resultaat = mysql_query($sql3) or die('Error in query: ' . $sql3 . '<br />' . mysql_error());

Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
X_lawl_X schreef op zondag 21 februari 2010 @ 11:18:
Het is inderdaad beter zo ja. Wat ID-College zegt is ook waar, het is handig om die(); te gebruiken als je het goed doet. ;)

PHP:
1
$resultaat = mysql_query($sql3) or die('Error in query: ' . $sql3 . '<br />' . mysql_error());
Oke bedankt voor de info! Ik heb het nu inderdaad zo ingevoerd. Ik ga nog even verder met het werken eraan. Ik zal binnenkort nog even doorgeven wat er wel en niet lukt. Zodat jullie mij nog even wat hulp kunnen bieden :9 Maar dat komt dan nog wel even. Ik ga er zo weer even mee aan de slag, bedankt voor al jullie hulp tot nu toe.

Waarschijnlijk gaat het probleem over de 3e query, de gegevens worden namelijk nu wel goed in de database ingevoerd. Maar ik zie niet het resultaat van de 3e query in de database, deze zou namelijk toch in de koppelingstabel in de database moeten komen?? Zodat ID_naw en ID_act samengevoegd worden in één tabel? Of moet je hiervoor iets anders doen, is de 3e query dan niet genoeg? Binnenkort zal ik nog even alles posten wat ik tot nu toe heb, maar als iemand hier wat over zou kunnen vertellen. GRAAG! _/-\o_

bij voorbaat dank, Kevin

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 17:02
Waar doe je je derde insert dan?

Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
doeternietoe schreef op maandag 22 februari 2010 @ 10:18:
[...]

Waar doe je je derde insert dan?
Ow? Dat zou betekenen dat ik een 3e insert moet doen naar de tabel 'koppeling'? Wat zou ik dan erin moeten zetten het nummer van ID_naw en ID_act? En daarna kan ik deze gegevens pas opvragen ofso? Hoe zou ik deze insert dan moeten maken? Dus dat zou dan een 3e query moeten worden (en die andere 3e query de 4e query?)

[ Voor 9% gewijzigd door K_E_V_I_N op 22-02-2010 11:16 ]


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 17:02
K_E_V_I_N schreef op maandag 22 februari 2010 @ 11:15:
[...]


Ow? Dat zou betekenen dat ik een 3e insert moet doen naar de tabel 'koppeling'? Wat zou ik dan erin moeten zetten het nummer van ID_naw en ID_act? En daarna kan ik deze gegevens pas opvragen ofso? Hoe zou ik deze insert dan moeten maken? Dus dat zou dan een 3e query moeten worden (en die andere 3e query de 4e query?)
Kijk even naar regel 27-28 van mijn stuk voorbeeldcode hierboven.

Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
doeternietoe schreef op zaterdag 20 februari 2010 @ 21:18:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//Gebruik altijd de volgende functie om getallen veilig invoerbaar te maken
//Letters en speciale tekens worden uit de variabele verwijdert, zodat mysql daar geen last van heeft.
$activiteitId = intval( $_GET[ "activiteitId" ] );

//Een query om iets in te voeren zou ik er altijd zoals volgt uit laten zien.
//Geef dus altijd precies aan voor welke velden de invoer bedoelt is.
//Een id dat met auto increment werkt valt hier altijd buiten!
mysql_query( "INSERT INTO naw( naam, email ) VALUES( $naam, $email )" );

//We willen weten welk id deze gebruiker heeft toegewezen gekregen, want dat id hebben we later nodig
//Deze functie geeft altijd het laatst weggegeven id met auto increment terug, binnen dit script
$gebruikerId = mysql_insert_id();

//Vervolgens koppel je aan de gebruiker een activiteit
mysql_query( "INSERT INTO koppeling( naw_id, activiteit_id ) VALUES( $gebruikerId, $activiteitId )" );
Oke ik ga hier even mee aan de slag, ik vind het wel echt lastig... maar ik ga me best doen. Ik laat nog wel even wat van me horen en zal nog wel een script posten met hoe het eruit ziet (tot hoever ik dan kom). Bedankt voor de hulp in ieder geval. Het lukt al iets beter. Ik ga in ieder geval nu even aan de slag met de $gebruikerId = mysql_insert_id(...); en de $activiteitId = mysql_insert_id(...); al weet ik niet wat er op de puntjes moet komen te staan. Maar ik ga me best doen.. bedankt in ieder geval.

Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
Ik heb het geprobeerd, maar ik weet echt niet wat ik nu precies verkeerd doe.

De code hieronder heb ik aangepast en de tips van jullie opgevolgd. Ook heb ik tevens enkele wijzigingen toegevoegd. Maar niet geleid tot het gewenste resultaat. Na het invoeren van de gegevens krijg ik nu een foutmelding. Deze foutmelding bevindt zich op line 34 (waar dus de gegevens in de koppeling-tabel worden ingevoerd.) Ik heb het geprobeerd om een $gebruikerId en $activiteitId aan te maken. Heb tal van verschillende manieren geprobeerd. Ook in de query zelf. Dit heeft allemaal niet mogen leiden tot het gewenste resultaat, helaas. Een probleem is ook dat ik niet gewend ben te werken met de code 'mysql_insert_id' en 'intval' , dit staat ook niet in mijn informatieboek. Wel heb ik nog op internet wat opgezocht, maar heb uiteindelijk niet de oplossing kunnen vinden. ;(

De code tot nu toe:

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

// Connect met de database maken
include ("verbinding.php");

// Ophalen van gegevens uit het formulier
$voornaam = mysql_real_escape_string($_GET["voornaam"]);
$tussenvoegsel = mysql_real_escape_string($_GET["tussenvoegsel"]);
$achternaam = mysql_real_escape_string($_GET["achternaam"]);
$email = mysql_real_escape_string($_GET["email"]);
$klas = mysql_real_escape_string($_GET["klas"]);
$activiteit = mysql_real_escape_string($_GET["activiteit"]);
 

// Invoegen van de gegevens in de tabel
$sql = "INSERT INTO naw (voornaam,tussenvoegsel,achternaam,email,klas)
VALUES('$voornaam','$tussenvoegsel','$achternaam','$email','$klas')";
printf("Last inserted record has id %d\n", mysql_insert_id());
$resultaat = mysql_query($sql);

//We willen weten welk id deze gebruiker heeft toegewezen gekregen, want dat id hebben we later nodig 
//Deze functie geeft altijd het laatst weggegeven id met auto increment terug, binnen dit script 
$gebruikerId = mysql_insert_id();

$sql2 = "INSERT INTO activiteiten (activiteit)
VALUES('$activiteit')";
$resultaat2 = mysql_query($sql2);

//Gebruik altijd de volgende functie om getallen veilig invoerbaar te maken 
//Letters en speciale tekens worden uit de variabele verwijdert, zodat mysql daar geen last van heeft. 
$activiteitId = intval( $_GET[ "activiteit" ] ); 

//Vervolgens koppel je aan de gebruiker een activiteit 
$sql3 = "INSERT INTO koppeling (ID_naw, ID_act) VALUES ($gebruikerId, $activiteitId)" );

$sql4 = "SELECT naw.ID_naw, activiteiten.ID_act
FROM 'naw' ,'activiteiten'
WHERE naw.ID_naw = activiteiten.ID_act";
$resultaat4 = mysql_query($sql4) or die('Error in query: ' . $sql4 . '<br />' . mysql_error()); 


// Verbreken van de verbinding met de database
$verbreken = mysql_close($verbinding);

// Bevestigen dat de gegevens zijn opgeslagen
print "De gegevens van $voornaam zijn opgeslagen in de database.";

?>


Ik hoop dat jullie mij wat precieze hulp kunnen bieden.. Bij voorbaat alvast enorm bedankt, ik hoop dat ik er daarna uit kan komen!!! :?

MVG, Kevin

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 22:52

MueR

Admin Tweakers Discord

is niet lief

PHP:
34
$sql3 = "INSERT INTO koppeling (ID_naw, ID_act) VALUES ($gebruikerId, $activiteitId)" );

Kom op zeg. Dit kan je best zelf debuggen. Je foutmelding zegt niet "Fout op regel 34". Die zegt "Parse error: syntax error, unexpected ')' in $file on line 34". Een fatsoenlijke PHP editor gaat je duidelijk aangeven wat er mis is met deze regel. Gebruik een editor met code highlighting (Eclipse, Notepad2, Notepad++ en nog een hele bult) en dit zie je direct. Overigens is het posten van 50 regels code voor een fout op regel 34 ook een beetje overbodig.

[ Voor 11% gewijzigd door MueR op 22-02-2010 17:44 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

"Een foutmelding" is ook zo lekker zinnig wanneer je verwacht dat mensen je hulp gaan bieden. Je post een hoop tekst en een hoop code, maar de fout even copy/pasten is teveel moeite? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 23-08 23:43
Zoiets?

spoiler:
$sql3 = "INSERT INTO koppeling (ID_naw, ID_act) VALUES ($gebruikerId, $activiteitId" );


>:)

Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
Edit: even opnieuw zaten een aantal fouten in

..

Tuurlijk is het een domme fout, maar soms moet je op domme fouten gewezen worden omdat je ze anders niet ziet. Verder gebruik ik Notepad++ maar heb de fout simpelweg niet geconstateerd.

Er komt nu echter wel een nieuwe foutmelding met betrekking tot $sql4.

"Last inserted record has id 0 Error in query: SELECT naw.ID_naw, activiteiten.ID_act FROM 'naw' ,'activiteiten' WHERE naw.ID_naw = activiteiten.ID_act
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''naw' ,'activiteiten' WHERE naw.ID_naw = activiteiten.ID_act' at line 2"


PHP:
1
2
3
4
$sql4 = "SELECT naw.ID_naw, activiteiten.ID_act
FROM 'naw' ,'activiteiten'
WHERE naw.ID_naw = activiteiten.ID_act";
$resultaat4 = mysql_query($sql4) or die('Error in query: ' . $sql4 . '<br />' . mysql_error());


Ik heb voor dit stukje code min of meer de code uit het boek overgenomen. Dus ik vind het vreemd dat hier een foutmelding op zit. Maar misschien klopt het wel niet voor hetgeen bij mijn website hoort. Zou ik niet anders de koppelingstabel moeten opvragen? Dit zou alleen niet kunnen want als ik in 'phpmyadmin' naar de koppelingstabel ga dan zie ik dat er helemaal geen gegevens in opgeslagen zijn! Volgens mij betekend dit dat de 3e query toch nog niet klopt.. (voor deze test heb ik de 4e query er tijdelijk even uit het script gehaald)
De 3e query is:

PHP:
1
2
3
$sql3 = "INSERT INTO koppeling (ID_naw, ID_act) 
VALUES ($gebruikerId, $activiteitId)";
$resultaat3 = mysql_query($sql3);


Het gehele script is hieronder nog even gepost:

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

// Connect met de database maken
include ("verbinding.php");

// Ophalen van gegevens uit het formulier
$voornaam = mysql_real_escape_string($_GET["voornaam"]);
$tussenvoegsel = mysql_real_escape_string($_GET["tussenvoegsel"]);
$achternaam = mysql_real_escape_string($_GET["achternaam"]);
$email = mysql_real_escape_string($_GET["email"]);
$klas = mysql_real_escape_string($_GET["klas"]);
$activiteit = mysql_real_escape_string($_GET["activiteit"]);
 

// Invoegen van de gegevens in de tabel
$sql = "INSERT INTO naw (voornaam,tussenvoegsel,achternaam,email,klas)
VALUES('$voornaam','$tussenvoegsel','$achternaam','$email','$klas')";
printf("Last inserted record has id %d\n", mysql_insert_id());
$resultaat = mysql_query($sql);

//We willen weten welk id deze gebruiker heeft toegewezen gekregen, want dat id hebben we later nodig 
//Deze functie geeft altijd het laatst weggegeven id met auto increment terug, binnen dit script 
$gebruikerId = mysql_insert_id();

$sql2 = "INSERT INTO activiteiten (activiteit)
VALUES('$activiteit')";
$resultaat2 = mysql_query($sql2);

//Gebruik altijd de volgende functie om getallen veilig invoerbaar te maken 
//Letters en speciale tekens worden uit de variabele verwijdert, zodat mysql daar geen last van heeft. 
$activiteitId = intval( $_GET[ "activiteit" ] ); 

//Vervolgens koppel je aan de gebruiker een activiteit 
$sql3 = "INSERT INTO koppeling (ID_naw, ID_act) 
VALUES ($gebruikerId, $activiteitId)";
$resultaat3 = mysql_query($sql3);


$sql4 = "SELECT naw.ID_naw, activiteiten.ID_act
FROM 'naw' ,'activiteiten'
WHERE naw.ID_naw = activiteiten.ID_act";
$resultaat4 = mysql_query($sql4) or die('Error in query: ' . $sql4 . '<br />' . mysql_error()); 


// Verbreken van de verbinding met de database
$verbreken = mysql_close($verbinding);

// Bevestigen dat de gegevens zijn opgeslagen
print "De gegevens van $voornaam zijn opgeslagen in de database.";

?>

[ Voor 196% gewijzigd door K_E_V_I_N op 22-02-2010 18:54 ]


Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 19-09 09:07
Probeer dit is:
PHP:
1
$sql3 = "INSERT INTO koppeling (ID_naw, ID_act) VALUES ($gebruikerId, $activiteitId)";


En bedenk daarna waarom dit fout is:
PHP:
1
$sql3 = "INSERT INTO koppeling (ID_naw, ID_act) VALUES ($gebruikerId, $activiteitId" );

Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
X_lawl_X schreef op maandag 22 februari 2010 @ 18:38:
Probeer dit is:
PHP:
1
$sql3 = "INSERT INTO koppeling (ID_naw, ID_act) VALUES ($gebruikerId, $activiteitId)";


En bedenk daarna waarom dit fout is:
PHP:
1
$sql3 = "INSERT INTO koppeling (ID_naw, ID_act) VALUES ($gebruikerId, $activiteitId" );
Ja dit heb ik verbeterd, deze fout zag ik uiteindelijk. Zie mijn post hierboven aub.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Ik weet niet, maar root als gebruiker gebruiken en al helemaal zonder een wachtwoord is natuurlijk ook niet zo slim. Of de TS moet expres het wachtwoord leeg laten op het web. :)

Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
GJtje schreef op maandag 22 februari 2010 @ 18:51:
Ik weet niet, maar root als gebruiker gebruiken en al helemaal zonder een wachtwoord is natuurlijk ook niet zo slim. Of de TS moet expres het wachtwoord leeg laten op het web. :)
Dit is voor deze site niet van belang, hij hoeft niet beveiligd te zijn. Dus vandaar dat ik het ook heb leeggelaten.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

SQL:
1
FROM 'naw' ,'activiteiten' .....


Misschien moet je eens opzoeken wat strings zijn en of je daar wel of niet data uit kan selecteren. ;)

[ Voor 4% gewijzigd door NMe op 22-02-2010 18:59 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 17:02
Je moet wel een beetje leren om te debuggen. Als zo'n query mislukt wil je weten wat de exacte inhoud ervan is. In zo'n geval kun je 'm het beste printen, eventueel tussen <pre> en </pre>. Als je niet direct ziet wat er fout gaat, kun je 'm ook even kopieren naar phpmyadmin. Daar zie je soms beter wat er fout zit.

In dit geval zet je dus direct na regel 35 van de code hierboven het volgende:
PHP:
1
print $sql3;


Als je dat gelijk had gedaan zou je gezien hebben dat er een haakje ontbrak. Daarnaast is het handig om te weten of $gebruikerId en $activiteitId wel de waarde hebben die je verwacht dat ze hebben.

Een andere functie die je zeker moet gebruiken is var_dump(). Deze geeft per variabele allereerst precies aan welk type inhoud die heeft. Voor cijfers is dat int, voor kommagetallen is dat float, voor databaseverbindingen is dat resource, voor tekst is dat string, etc. Daarnaast wordt de inhoud ook afgedrukt. Iedere keer als er een opdracht in je script mislukt, kun je met behulp van deze functie controleren of de variabelen die je gebruikt wel de juiste waarde hebben.
GJtje schreef op maandag 22 februari 2010 @ 18:51:
Ik weet niet, maar root als gebruiker gebruiken en al helemaal zonder een wachtwoord is natuurlijk ook niet zo slim. Of de TS moet expres het wachtwoord leeg laten op het web. :)
Dat lijkt me in deze fase niet zo'n probleem. Als een site in productie gaat, wijzig je toch die gegevens.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

K_E_V_I_N schreef op maandag 22 februari 2010 @ 18:54:
Dit is voor deze site niet van belang, hij hoeft niet beveiligd te zijn. Dus vandaar dat ik het ook heb leeggelaten.
Leuk altijd, die koppigheid bij studenten. Leuk dat beveiliging nú niet hoeft. Ik wil je werkgever later wel horen, als hij er achter komt dat jij je root accounts geen wachtwoord geeft. Want ach, beveiliging is toch niet nodig?

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 18:43

BCC

Je weet hopelijk dat meeste aanvallen van binnenuit het bedrijf komen :)? Maar development is het idd niet zo'n probleem.

[ Voor 24% gewijzigd door BCC op 22-02-2010 19:33 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • K_E_V_I_N
  • Registratie: Februari 2010
  • Laatst online: 23-07 20:22
doeternietoe schreef op maandag 22 februari 2010 @ 19:08:
Je moet wel een beetje leren om te debuggen. Als zo'n query mislukt wil je weten wat de exacte inhoud ervan is. In zo'n geval kun je 'm het beste printen, eventueel tussen <pre> en </pre>. Als je niet direct ziet wat er fout gaat, kun je 'm ook even kopieren naar phpmyadmin. Daar zie je soms beter wat er fout zit.

In dit geval zet je dus direct na regel 35 van de code hierboven het volgende:
PHP:
1
print $sql3;


Als je dat gelijk had gedaan zou je gezien hebben dat er een haakje ontbrak. Daarnaast is het handig om te weten of $gebruikerId en $activiteitId wel de waarde hebben die je verwacht dat ze hebben.

Een andere functie die je zeker moet gebruiken is var_dump(). Deze geeft per variabele allereerst precies aan welk type inhoud die heeft. Voor cijfers is dat int, voor kommagetallen is dat float, voor databaseverbindingen is dat resource, voor tekst is dat string, etc. Daarnaast wordt de inhoud ook afgedrukt. Iedere keer als er een opdracht in je script mislukt, kun je met behulp van deze functie controleren of de variabelen die je gebruikt wel de juiste waarde hebben.
Oke dankje dat zou dus moeten betekenen dat ik deze waardes in moet voeren bij phpmyadmin. En uiteindelijk dan achter meer informatie kan komen over bijvoorbeeld de variabeles van $gebruikerId en $activiteitId. En dit zou ik dit ook eventueel kunnen printen in mijn script met <pre>?

Ik ben het ook met je eens dat ik moet leren te debuggen. Maar over dit soort dingen hebben die boeken het nooit, terwijl dit natuurlijk wel belangrijk is om inderdaad te leren te debuggen. Want je moet het immers uiteindelijk ook allemaal zelf kunnen. En dat wil ik ook proberen. Bedankt ik ga het proberen.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 22:52

MueR

Admin Tweakers Discord

is niet lief

K_E_V_I_N schreef op maandag 22 februari 2010 @ 20:17:
Oke dankje dat zou dus moeten betekenen dat ik deze waardes in moet voeren bij phpmyadmin.
Nee, hij bedoelt dat je eens moet leren om foutmeldingen te lezen. Elke fout waar je tot nu toe hulp bij hebt gevraagd zijn gewoon heel domme syntax fouten, waar het onderliggende systeem (of dat nu PHP of MySQL is) gewoon enorm hard op roept "Fout op regel zoveel in bestand dattem" of "Syntax error at 'stuk van query waar fout zit'". Zo enorm moeilijk zijn die niet te lezen of wel dan? Daarnaast is het vrij onnodig en irritant om steeds diezelfde lap code voorbij te zien komen met als begeleidende tekst weer eenzelfde verhaaltje dat het nog steeds niet goed gaat. We zijn hier geen afhaaldebugger.

Je doet dit voor school, je hebt een leraar. Je mag naar hem toe voor dit soort dingen, met de melding dat hij je niet goed heeft leren debuggen. Het is complete bullshit als hij je zegt dat alles zelfstudie is en dat mag je hem gerust vertellen, daar betaal je immers schoolgeld voor. Programmeren is geen vak, het is een kunst. Je kunt het, of je spartelt rond en doet alsof je het kan. Als ik morgen een nieuwe collega zou krijgen die zegt programmeren uit een boek te hebben geleerd, ga ik mn hart vasthouden en heel wat code nakijken. Je leraar is daar om je te begeleiden, niet om je zonder zwemles in het diepe te gooien. Als hij je niet wil helpen, moet je naar je mentor, rector of schoolbestuur stappen en zeggen dat die leraar een zak hooi is. Op deze manier kan je nooit leren programmeren, tenzij je een beetje talent en 'feeling' hebt voor het programmeren.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
$ handjehouden = off

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.