[mysql/php] insert into en select statement

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • AngryAngel
  • Registratie: November 1999
  • Laatst online: 15-08 17:51

AngryAngel

Veni Vidi Vici

Topicstarter
Ik voer een student in. dit gaat goed. de studentnummer is een auto_increment en die word ook goed aangemaakt.
meteen daarna moet ook login/pass worden aangemaakt, waarin de login(username) die studentnummer moet zijn. dit doet hij niet. er gebeurd niets, ook geen fout melding. ik weet niet waar het fout zit.

ps let even niet op de variabele namen achternaam en achternaamn. heb ik maar snel gemaakt, klopt wel allemaal

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
if (empty($achternaamn)){ 
   exit(); } 
     else{
       $sql = "INSERT INTO studenten VALUES ('','$voornaamn', '$voorletter', '$tussenvoegsel', '$achternaamn', '$straatnaam', '$huisnummer', '$toevoeging', '$postcode', '$woonplaats', '$geboortedatum', '$geboorteplaats', '$nationaliteit', '$telefoonnummer', '$mobielnummer', '$emailadres' )"; 
       $sql_query = mysql_query ($sql, $connection) ; 

       $sql ="INSERT INTO login ('username','password') SELECT studentnummer, achternaam from studenten where studenten.achternaam=$achternaamn";
       $sql_query = mysql_query ($sql, $connection) ; 
       $achternaamn="";
       echo "Student toegevoegd";
                        }
          ?>

[ Voor 14% gewijzigd door AngryAngel op 22-10-2004 11:10 ]

Never argue with a fool, he'll take you down to his level and beat you with experience...


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Kijk 'ns naar de functie mysql_insert_id; hiermee kun je de laatste auto-increment waarde opvragen.

http://nl2.php.net/manual/en/function.mysql-insert-id.php

In regel 8 moet je dan het SELECT gedeelte weghalen en de waarde die deze functie teruggeeft in je tweede INSERT gebruiken.


Edit: Ik zou de .= vervangen door een enkele =. Met de punt plak je meerdere strings aan elkaar; dat lijkt me niet de bedoeling hier.

[ Voor 22% gewijzigd door Icelus op 22-10-2004 10:49 ]

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • AngryAngel
  • Registratie: November 1999
  • Laatst online: 15-08 17:51

AngryAngel

Veni Vidi Vici

Topicstarter
dus je krijgt dan dit ?
code:
1
$sql ="INSERT INTO login ('username','password') VALUES ('mysql_insert_id()','$achternaam')


btw, dit puntjes horen er ook niet in te staan, foutje bedankt :)

Never argue with a fool, he'll take you down to his level and beat you with experience...


Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 15:37

momania

iPhone 30! Bam!

AngryAngel schreef op 22 oktober 2004 @ 10:59:
dus je krijgt dan dit ?
code:
1
$sql ="INSERT INTO login ('username','password') VALUES ('mysql_insert_id()','$achternaam')
Nee, de eerste query voer je uit middels mysql_insert_id($query) ipv mysql_query($query)
Die geeft je een id terug die je in je volgende query kan gebruiken :)

Zoiets dus:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
if (empty($achternaamn)){ 
   exit(); } 
     else{
       $sql ="INSERT INTO studenten VALUES ('','$voornaamn', '$voorletter', '$tussenvoegsel', '$achternaamn', '$straatnaam', '$huisnummer', '$toevoeging', '$postcode', '$woonplaats', '$geboortedatum', '$geboorteplaats', '$nationaliteit', '$telefoonnummer', '$mobielnummer', '$emailadres' )"; 
       $id = mysql_insert_id ($sql, $connection) ; 

       $sql ="INSERT INTO login ('username','password') values '$id', '$achternaam'";
       $sql_query = mysql_query ($sql, $connection) ; 
       $achternaamn="";
       echo "Student toegevoegd";
                        }
          ?>

:)

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • AngryAngel
  • Registratie: November 1999
  • Laatst online: 15-08 17:51

AngryAngel

Veni Vidi Vici

Topicstarter
Warning: Wrong parameter count for mysql_insert_id() in c:\apache\htdocs\dnewstudent.php

en als ik
code:
1
$id = mysql_insert_id ($sql)

krijg ik:
Warning: Supplied argument is not a valid MySQL-Link resource in c:\apache\htdocs\dnewstudent.php on line 126

[ Voor 33% gewijzigd door AngryAngel op 22-10-2004 11:22 ]

Never argue with a fool, he'll take you down to his level and beat you with experience...


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Vervang regel 6 door:

code:
1
2
$sql_query = mysql_query( $sql, $connection );
$id = mysql_insert_id();

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 15:37

momania

iPhone 30! Bam!

Mm, nu zie ik het ook in de docs.. foutje van mijn kant net dus O-)

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • AngryAngel
  • Registratie: November 1999
  • Laatst online: 15-08 17:51

AngryAngel

Veni Vidi Vici

Topicstarter
ok, ik heb nu:
code:
1
2
3
4
5
6
7
8
9
10
11
12
if (empty($achternaamn)){ 
  exit(); } 
  else{
   $sql="INSERT INTO studenten VALUES ('','$voornaamn', '$voorletter', '$tussenvoegsel', '$achternaamn', '$straatnaam', '$huisnummer', '$toevoeging', '$postcode', '$woonplaats', '$geboortedatum', '$geboorteplaats', '$nationaliteit', '$telefoonnummer', '$mobielnummer', '$emailadres' )"; 
   $sql_query = mysql_query( $sql, $connection );
   $id = mysql_insert_id();
   $sql ="INSERT INTO login ('username','password') VALUES ('$id','$achternaamn')";
   $sql_query = mysql_query ($sql, $connection) ; 
   $achternaamn="";
   echo "Student toegevoegd";
                }
          ?>


ik krijg nu 2 nieuwe records in tabel studenten en in tabel login wordt nog steeds geen records gecreerd. ik zie het echt niet wat ik nu fout do

[ Voor 19% gewijzigd door AngryAngel op 22-10-2004 11:39 ]

Never argue with a fool, he'll take you down to his level and beat you with experience...


Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 15:37

momania

iPhone 30! Bam!

Je zou eens kunnen beginnen met achter elke mysql_query een "or die (mysql_error());" te zetten, dan kan je zien wat er fout gaat aan je query ;)

En wat data echo'en zoals die $id en eventueel $achternaam, zodat je kan zien wat voor data je hebt :)

[ Voor 3% gewijzigd door momania op 22-10-2004 11:46 ]

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Volgens mij is het fout om kolomnamen met ' te omsluiten. Dus niet 'username', maar username of desnoods `username` (voor mysql en voor anderen "username" of [username])

[ Voor 4% gewijzigd door ACM op 22-10-2004 11:55 ]


Acties:
  • 0 Henk 'm!

  • AngryAngel
  • Registratie: November 1999
  • Laatst online: 15-08 17:51

AngryAngel

Veni Vidi Vici

Topicstarter
de login insert into werkt nu wel... heb het veranders in
code:
1
$sql ="INSERT INTO login VALUES ('$id','$achternaamn')";

dat werkt

maar een echo van de $id geeft aan dat als ik de php refreshed dan voert hij de inserts uit. terwijl dit afgevangen zou moeten worden door:
code:
1
if (empty($achternaamn))

en
code:
1
$achternaamn = "";


maar hij blijft de script uitvoeren bij een refresh van de pagina.

Never argue with a fool, he'll take you down to his level and beat you with experience...


Acties:
  • 0 Henk 'm!

  • erkje
  • Registratie: Oktober 2001
  • Laatst online: 12-06-2024
Uiteraard. Telkens als je de pagina refresht, komt hij bij dat stuk code terecht. Hij heeft immers dezelfde invoerparameters? En het studentnummer wordt automatisch aangemaakt, dus je krijgt honderden keren dezelfde user als je doorgaat.

misschien moet je een controle doen of je username al bestaat, dan kun je de tweede keer zeggen: Hey, de username bestaat al!

Of je doet een redirect naar zichzelf (zonder parameters) of een andere pagina ofzo nadat je de queries uitgevoerd hebt. Dan roep je met F5 niet meer dit onheil op je af. (dat is tenminste hoe ik de meeste queries oplos)

edit:

je hebt zo te zien geen username... misschien uniek op emailadres maken?

[ Voor 8% gewijzigd door erkje op 22-10-2004 13:17 ]

taste and see that the Lord is good


Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 15:37

momania

iPhone 30! Bam!

AngryAngel schreef op 22 oktober 2004 @ 12:30:
de login insert into werkt nu wel... heb het veranders in
code:
1
$sql ="INSERT INTO login VALUES ('$id','$achternaamn')";

dat werkt

maar een echo van de $id geeft aan dat als ik de php refreshed dan voert hij de inserts uit. terwijl dit afgevangen zou moeten worden door:
code:
1
if (empty($achternaamn))

en
code:
1
$achternaamn = "";


maar hij blijft de script uitvoeren bij een refresh van de pagina.
Dat komt omdat je met een refresh het hele request herhaalt en die $achternaam gewoon gevuld is in je orginele request ;)

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • AngryAngel
  • Registratie: November 1999
  • Laatst online: 15-08 17:51

AngryAngel

Veni Vidi Vici

Topicstarter
de invoerparameters komen van een form af: o.a.
code:
1
$achternaamn = $_POST['achternaamn'];

maar ik zou toch denken als hij hem refreshed dat alles leeg is, dan moet hij die code niet runnen, want die if statement zegt dat hij exit(). of maak ik ergens een denk fout

Never argue with a fool, he'll take you down to his level and beat you with experience...


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Waarom een aparte login en student tabel? Je kunt toch ook gewoon het wachtwoord in de studententabel zetten?

Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 15:37

momania

iPhone 30! Bam!

AngryAngel schreef op 22 oktober 2004 @ 13:18:
of maak ik ergens een denk fout
ja ;)

Wat is zeg: door te refreshen herhaal je de orginele request. Je form met alle ingevulde data zit daar ook nog steeds in.

Dus je moet of je query's in en aparte php doen en daarna redirecten naar een resultaat pagina, of je moet naar jezelf redirecten.
De redirect zorgt ervoor dat er een nieuw request wordt gemaakt en pas dan ben je dus die form informatie kwijt :)

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • AngryAngel
  • Registratie: November 1999
  • Laatst online: 15-08 17:51

AngryAngel

Veni Vidi Vici

Topicstarter
Noork schreef op 22 oktober 2004 @ 13:19:
Waarom een aparte login en student tabel? Je kunt toch ook gewoon het wachtwoord in de studententabel zetten?
omdat in de login tabel niet alleen studenten wachtwoorden komen. ik wil de docenten wachtwoorden er ook in doen

Never argue with a fool, he'll take you down to his level and beat you with experience...


Acties:
  • 0 Henk 'm!

  • AngryAngel
  • Registratie: November 1999
  • Laatst online: 15-08 17:51

AngryAngel

Veni Vidi Vici

Topicstarter
het zit me vandaag niet mee.
code:
1
header("Location: dnewstudent.php");
wilde ik gebruiken voor redirect
ik krijg deze error:
Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\db.php:23) in c:\apache\htdocs\dnewstudent.php on line 139

lijn 139 staat de header("Location: dnewstudent.php");

en in db.php, die included is staat dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$dbhost = 'localhost';
$dbusername = '';
$dbpasswd = '';
$database_name = 'studiegids';
$sitepath = "http://localhost/"; $sitename = "Studiegids";
$adminemail = "";
$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd")
    or die ("Couldn't connect to server.");

$db = mysql_select_db("$database_name", $connection)
    or die("Couldn't select database.");




?>


ik kan er ook niet achter komen waarom hij die fout melding geeft

[ Voor 14% gewijzigd door AngryAngel op 22-10-2004 14:34 ]

Never argue with a fool, he'll take you down to his level and beat you with experience...


Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 15:37

momania

iPhone 30! Bam!

AngryAngel schreef op 22 oktober 2004 @ 14:33:
het zit me vandaag niet mee.
[code]
Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\db.php:23) in c:\apache\htdocs\dnewstudent.php on line 139
Daar gaat het om, zodra je ook maar iets echo'ed of print, dan wordt de header afgesloten en kan je die dus ook niet meer wijzigen. ;)

Als je dus wilt opslaan en redirecten op de manier die jij wilt, zul je het opslaan in een aparte php moeten doen, waarin je verder niks naar het scherm print (behalve als er wat fout gaat natuurlijk).
Zolang je dus nog niks geprint heb, kan je na je php code om die queries uit te voeren gewoon ook die redirect maken :)

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • AngryAngel
  • Registratie: November 1999
  • Laatst online: 15-08 17:51

AngryAngel

Veni Vidi Vici

Topicstarter
ik heb het gelijk in een apart php gezet, de form on submit naar die php gelinkt.
daarin met de header teru geredirect naar de php met de form, maar ik krijg nog steeds dezelfde fout.

ik zal even de gehele code posten. trouwens bedankt voor alle hulp alvast :)
code:
1
<form name="form1" method="post" action="submitnewstudent.php">

submitnewstudent.php:
code:
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
<?       include 'db.php';
          $voornaamn = $_POST['voornaamn'];
          $voorletter = $_POST['voorletter'];
          $tussenvoegsel = $_POST['tussenvoegsel'];
          $achternaamn = $_POST['achternaamn'];
          $straatnaam = $_POST['straatnaam'];
          $huisnummer = $_POST['huisnummer'];
          $toevoeging = $_POST['toevoeging'];
          $postcode = $_POST['postcode'];
          $woonplaats = $_POST['woonplaats'];
          $geboortedatum = $_POST['geboortedatum'];
          $geboorteplaats = $_POST['geboorteplaats'];
          $nationaliteit = $_POST['nationaliteit'];
          $telefoonnummer = $_POST['telefoonnummer'];
          $mobielnummer = $_POST['mobielnummer'];
          $emailadres = $_POST['emailadres'];
          if (empty($achternaamn)){ 
          exit(); } else{
            $sql="INSERT INTO studenten VALUES ('','$voornaamn', '$voorletter', '$tussenvoegsel', '$achternaamn', '$straatnaam', '$huisnummer', '$toevoeging', '$postcode', '$woonplaats', '$geboortedatum', '$geboorteplaats', '$nationaliteit', '$telefoonnummer', '$mobielnummer', '$emailadres' )"; 
            $sql_query = mysql_query( $sql, $connection );
            $id = mysql_insert_id();
            $sql ="INSERT INTO login VALUES ('$id','$achternaamn')";
            $sql_query = mysql_query ($sql, $connection) ; 
            $achternaamn = "";
            header("Location: dnewstudent.php");
                        }
?>


ik denk dat ik ergens weer in de fout ga. maar ja, paar weken geleden wist ik nog niets van php en sql kon ik alleen select from where :)

[ Voor 16% gewijzigd door AngryAngel op 22-10-2004 14:53 ]

Never argue with a fool, he'll take you down to his level and beat you with experience...


Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 15:37

momania

iPhone 30! Bam!

output started at c:\apache\htdocs\db.php:23
Wat staat er in die db.php op regel 23 ? (Je liet 'm hier maar deels zien volgens mij, of die file is na je laatste %> niet echt leeg)

offtopic:
En probeer ipv [code] even [code=php] te gebruiken, dan leest het wat makkelijker voor ons ;)

[ Voor 22% gewijzigd door momania op 22-10-2004 15:04 ]

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • AngryAngel
  • Registratie: November 1999
  • Laatst online: 15-08 17:51

AngryAngel

Veni Vidi Vici

Topicstarter
inderdaad er zat een spatie achter/
het werkt nu helemaal

kei bedankt!
* AngryAngel gaat nu weer verder ontwikkelen/leren :)

Never argue with a fool, he'll take you down to his level and beat you with experience...

Pagina: 1