Pauze tussen query's
Er wordt een emailadres opgeslagen en direct erachter aan wordt het emailadres weer gebruikt voor een volgende query.
Nu gaat dit soms goed, maar soms ook niet. het lijkt of het te maken heeft met 2 query's de te snel achter elkaar iets moeten uitvoeren.
Dus het emailadres is nog niet verwerkt (dus er is ook nog geen id beschikbaar) en dan wordt hij weer gebruikt waardoor hij als uitkomst 0 geeft ipv het echte id.
stukje code
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
$emailcode = urlencode($_POST['email']); //gecodeerde email zoeken in de database
$sql = mysql_query("SELECT * FROM email WHERE email='".$emailcode."'")or die(mysql_error());
$mailid = mysql_fetch_assoc($sql);
#hier wordt een query uitgevoerd, het email adres wordt opgeslagen
mysql_query("INSERT INTO email (emid,email) VALUES ('','".$emailcode."')")or die(
mysql_error());
foreach($_POST['cats'] as $key => $categorie) {
#hier wordt het emailadres weer gebruikt
mysql_query("INSERT INTO Koppel_mcat_em(ecid,mcid,emid) VALUES('','".$categorie.
"','".$mailid['emid']."')") OR die(mysql_error());
}
?>
$emailcode = urlencode($_POST['email']); //gecodeerde email zoeken in de database
$sql = mysql_query("SELECT * FROM email WHERE email='".$emailcode."'")or die(mysql_error());
$mailid = mysql_fetch_assoc($sql);
#hier wordt een query uitgevoerd, het email adres wordt opgeslagen
mysql_query("INSERT INTO email (emid,email) VALUES ('','".$emailcode."')")or die(
mysql_error());
foreach($_POST['cats'] as $key => $categorie) {
#hier wordt het emailadres weer gebruikt
mysql_query("INSERT INTO Koppel_mcat_em(ecid,mcid,emid) VALUES('','".$categorie.
"','".$mailid['emid']."')") OR die(mysql_error());
}
?>
Als je het email-adres hebt toegevoegd, ga je in de volgende query het emid gebruiken. Maar hoe kom je daaraan? Het lijkt er namelijk op dat de databasedat met een autonumber bepaalt.
Je zult dus eerst met mysql_insert_id() moeten opvragen wat het nieuwe emid is geworden; daarna zou je dat meteen moeten kunnen gebruiken.
Graag zou ik nog wel willen weten hoe je evt op een andere manier een pauze kan inbouwen.
bedankt alvast
Op de oude manier ging het soms wel goed en soms niet.
De manier die ik nu gebruik werkt wel. wacht. ik post de code even zoals ik hem nu heb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
mysql_query("INSERT INTO email (emid,email) VALUES ('','".$emailcode."')")or die(
mysql_error());
$sql1 = mysql_query("SELECT * FROM email WHERE email='".$emailcode."'")or
die(mysql_error());
$mailid1 = mysql_fetch_assoc($sql1); //dit is de query voor alles zoeken
//van het emailadres in de database.
foreach($_POST['cats'] as $key => $categorie) {
mysql_query("INSERT INTO Koppel_mcat_em(ecid,mcid,emid) VALUES('','".$categorie.
"','".$mailid1['emid']."')") OR die(mysql_error());
}
?>
mysql_query("INSERT INTO email (emid,email) VALUES ('','".$emailcode."')")or die(
mysql_error());
$sql1 = mysql_query("SELECT * FROM email WHERE email='".$emailcode."'")or
die(mysql_error());
$mailid1 = mysql_fetch_assoc($sql1); //dit is de query voor alles zoeken
//van het emailadres in de database.
foreach($_POST['cats'] as $key => $categorie) {
mysql_query("INSERT INTO Koppel_mcat_em(ecid,mcid,emid) VALUES('','".$categorie.
"','".$mailid1['emid']."')") OR die(mysql_error());
}
?>
- PHP stuurt eerst de eerste query naar de database
- wacht totdat de database roept dat de query is gelukt of mislukt
- gaat verder met de rest van het script, bv. een volgende query naar de database sturen.
Probleem is volgens mij, dat je een wat rare code hebt. Waar is bv. die SELECT-query voor nodig? Volgens mij hoort die in de prullenbak te liggen, of is de eerste INSERT-query niet goed. Het is mij namelijk niet duidelijk waarom je eerste een id wilt ophalen van een record dat het emailadres bevat en vervolgens ga je nog een keer dat emailadres in de database wegschrijven. Je krijgt dan dubbele records en je legt verbanden die er niet zijn.
Tips:
- ga terug naar de tekentafel en de boel opnieuw ontwerpen.
- Gebruik UNIQUE in de database om dubbele records te voorkomen
- met mysql_insert_id() kun je het id van de laatst uitgevoerde auto_increment opvragen.
- jouw foutafhandeling is wel erg basic en dus niet gebruikersvriendelijk. die() hoort niet in een fraai stukje code te staan.
Quote:
Probleem is volgens mij, dat je een wat rare code hebt. Waar is bv. die SELECT-query voor nodig? Volgens mij hoort die in de prullenbak te liggen, of is de eerste INSERT-query niet goed. Het is mij namelijk niet duidelijk waarom je eerste een id wilt ophalen van een record dat het emailadres bevat en vervolgens ga je nog een keer dat emailadres in de database wegschrijven. Je krijgt dan dubbele records en je legt verbanden die er niet zijn.
Er zijn 3 tabellen.
-1 tabel email
-1 tabel categoriën
-1 tabel koppeling tussen email en categoriën
de laatste tabel maakt dus een koppeling tussen de 2 id's, waardoor je dus later emailtjes kan versturen naar mensen die zich voor die bepaalde categorie hebben aangemeld.
vandaar heb je dus 2 id's nodig om te koppelen.
Quote:
Tips:
- ga terug naar de tekentafel en de boel opnieuw ontwerpen.
- Gebruik UNIQUE in de database om dubbele records te voorkomen
- met mysql_insert_id() kun je het id van de laatst uitgevoerde auto_increment opvragen.
- jouw foutafhandeling is wel erg basic en dus niet gebruikersvriendelijk. die() hoort niet in een fraai stukje code te staan.
- ga terug naar de tekentafel en de boel opnieuw ontwerpen.
- Gebruik UNIQUE in de database om dubbele records te voorkomen
- met mysql_insert_id() kun je het id van de laatst uitgevoerde auto_increment opvragen.
- jouw foutafhandeling is wel erg basic en dus niet gebruikersvriendelijk. die() hoort niet in een fraai stukje code te staan.
bedankt voor de tips
Gewijzigd op 01/01/1970 01:00:00 door Tim Groot
Tim Groot schreef op 05.01.2007 11:29:
Dat het "soms" goed ging, komt door die eerste query in je code (regel 4 in je originele post). Als het adres al bestaat, geeft die een emid terug. In je derde query (r.18) gebruik je die weer.Op de oude manier ging het soms wel goed en soms niet.
De manier die ik nu gebruik werkt wel.
De manier die ik nu gebruik werkt wel.
Als het adres niet bestaat, heeft die emid geen waarde. Omdat je hem niet opvraagt na je tweede query (r.10), gaat dus je derde query fout. Dit is (zoals hierboven al besproken) op te lossen door met mysql_insert_id het emid op te vragen na je tweede query.
Die tweede query zou ik trouwens niet uitvoeren als de eerste lukt. Je gaat dan een record invoegen wat al bestaat. Niet goed ;-)
heb even wat informatie erover verzameld.
Dan zou dat inderdaad een beter optie zijn