fout in php function, kom er niet uit
Allereerst mijn excuses voor het plaatsen van waarschijnlijk een domme fout.. Maar ik zit er al een paar dagen in vast, en kom niet tot een oplossing..
Voor een website waar ik mee bezig ben moeten er artikelen die geschreven worden in een que geplaatst worden, hier editen de admins het artikel naar wens, en voten dan
Code (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
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
function articlequevote1() {
$target = $_GET['id'];
$votes = "SELECT votes FROM articleque WHERE id='$target'";
if ($votes==0){
$sql = "UPDATE articleque SET votes=1 WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif ($votes==1){
$sql = "UPDATE articleque SET votes=2 WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif($votes==2){
$sql = "UPDATE articleque SET votes=3 WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif ($votes==3){
$sql = "UPDATE articleque SET votes=4 WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}else{
$title = "SELECT title FROM articleque WHERE id='$target'";
$catagory = "SELECT catagory FROM articleque WHERE id='$target'";
$text = "SELECT text FROM articleque WHERE id='$target'";
$enterposter = "SELECT enterposter FROM articleque WHERE id='$target'";
$about = "SELECT about FROM articleque WHERE id='$target'";
$dag = "SELECT dag FROM articleque WHERE id='$target'";
$maand = "SELECT maand FROM articleque WHERE id='$target'";
$sql = "UPDATE: INSERT INTO article VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand', '$text', '$about')";
$res = mysql_query($sql) or die(mysql_error());
$sql = "DELETE FROM articleque WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}
}
$target = $_GET['id'];
$votes = "SELECT votes FROM articleque WHERE id='$target'";
if ($votes==0){
$sql = "UPDATE articleque SET votes=1 WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif ($votes==1){
$sql = "UPDATE articleque SET votes=2 WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif($votes==2){
$sql = "UPDATE articleque SET votes=3 WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif ($votes==3){
$sql = "UPDATE articleque SET votes=4 WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}else{
$title = "SELECT title FROM articleque WHERE id='$target'";
$catagory = "SELECT catagory FROM articleque WHERE id='$target'";
$text = "SELECT text FROM articleque WHERE id='$target'";
$enterposter = "SELECT enterposter FROM articleque WHERE id='$target'";
$about = "SELECT about FROM articleque WHERE id='$target'";
$dag = "SELECT dag FROM articleque WHERE id='$target'";
$maand = "SELECT maand FROM articleque WHERE id='$target'";
$sql = "UPDATE: INSERT INTO article VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand', '$text', '$about')";
$res = mysql_query($sql) or die(mysql_error());
$sql = "DELETE FROM articleque WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}
}
Kan iemand me helpen hiermee?
Alvast bedankt voor de reactie(s)
M.V.G.
Peter
EDIT: Ik kom er niet achter hoe ik iets als script plaats in een bericht, sorry :$
Gewijzigd op 10/06/2010 10:59:44 door Peter Lopsen
code] en [/code] tags om hier code te plaatsen.
Verder zie ik dat je zomaar een $_GET waarde in een query hebt zitten. Gebruik altijd mysql_real_escape_string, of type caste, of prepared statements.
Die eerste if kan nooit gelijk aan nul zijn.
Gebruik [Verder zie ik dat je zomaar een $_GET waarde in een query hebt zitten. Gebruik altijd mysql_real_escape_string, of type caste, of prepared statements.
Die eerste if kan nooit gelijk aan nul zijn.
EDIT: die 'id' van target word gepost in de url, i.e.:
http://website.com/articlefullque.php?id=48
dus met die $_GET haal je die id op uit de url?
En hoezo kan de eerste if geen 0 zijn? Want het artikel heeft 0 votes als het net geplaatst is?
Bedankt voor de reactie
Gewijzigd op 10/06/2010 11:02:31 door Peter Lopsen
Die eerste if is nooit gelijk aan nul omdat je een string, namelijk de string: "SELECT votes FROM articleque WHERE id='$target'" vergelijkt met nul. Het betekend dus ook dat de rest van de elseifs ook niet worden voldaan en dat je dus altijd in de else terecht komt. Verder zou het ook nog wel net zijn om je variabelen buiten quotes te halen.
je haalt voor var. $votes het aantal votes op uit de db. dus 0
dan vergelijk je 0==0 dan SET votes=1
Of is mijn logica onjuist? :$
EDIT:
Na wat korte aanpassingen werkt het nu tot de eerste if, dus als het aantal votes 0 is maakt hij er inderdaad 1 van, maar de formule gaat niet verder (dus hij update vervolgens niet naar 2,3, en 4..) WHY?? :(:
Code (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
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
function articlequevote1() {
$target = $_GET['id'];
$votes = "SELECT votes FROM `lifesenzcms`.`articleque WHERE `articleque`.`id`='$target'";
if ($votes==0){
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif ($votes==1){
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif($votes==2){
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif ($votes==3){
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
$res = mysql_query($sql) or die(mysql_error());
}else{
$title = "SELECT title FROM articleque WHERE id='$target'";
$catagory = "SELECT catagory FROM articleque WHERE id='$target'";
$text = "SELECT text FROM articleque WHERE id='$target'";
$enterposter = "SELECT enterposter FROM articleque WHERE id='$target'";
$about = "SELECT about FROM articleque WHERE id='$target'";
$dag = "SELECT dag FROM articleque WHERE id='$target'";
$maand = "SELECT maand FROM articleque WHERE id='$target'";
$sql = "UPDATE: INSERT INTO article VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand', '$text', '$about')";
$res = mysql_query($sql) or die(mysql_error());
$sql = "DELETE FROM articleque WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}
}
$target = $_GET['id'];
$votes = "SELECT votes FROM `lifesenzcms`.`articleque WHERE `articleque`.`id`='$target'";
if ($votes==0){
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif ($votes==1){
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif($votes==2){
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
$res = mysql_query($sql) or die(mysql_error());
}elseif ($votes==3){
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
$res = mysql_query($sql) or die(mysql_error());
}else{
$title = "SELECT title FROM articleque WHERE id='$target'";
$catagory = "SELECT catagory FROM articleque WHERE id='$target'";
$text = "SELECT text FROM articleque WHERE id='$target'";
$enterposter = "SELECT enterposter FROM articleque WHERE id='$target'";
$about = "SELECT about FROM articleque WHERE id='$target'";
$dag = "SELECT dag FROM articleque WHERE id='$target'";
$maand = "SELECT maand FROM articleque WHERE id='$target'";
$sql = "UPDATE: INSERT INTO article VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand', '$text', '$about')";
$res = mysql_query($sql) or die(mysql_error());
$sql = "DELETE FROM articleque WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}
}
any help?
Gewijzigd op 10/06/2010 11:21:19 door Peter Lopsen
Lees eens wat ik schrijf. Je vergelijkt de string 'Select blablanbal' met 0. Je voert nergens de query uit.
Onder regel 3 moet je dus mysql_query doen en je moet de kolom fetchen. Overigens, je voert 4 keer precies dezelfde query uit alleen je votes= is anders. Als je nou in de query de $votes gebruikt heb je al die if elses niet nodig.
edit: Je else kan ook een stuk eenvoudiger door in 1 query alle kolommen op te halen en vervolgens in een array te fetchen ($row = mysql_fetch_array($r)) De kolommen spreek je dan aan met $row['kolom']
succes
Gewijzigd op 10/06/2010 11:42:05 door Jan geen
je moet die $votes ophalen
dan zeggen:
if ($votes<4){
$sql = "UPDATE `lifesenzcms`.`articleque` SET `$votes+1` WHERE `articleque`.`id`='$target'";
$res = mysql_query($sql) or die(mysql_error());
}
else {
row van ene tabel naar andere kopieren en dan verwijderen uit de eerste tabel
}
??
en dan
Pas je code eerst maar even aan
Code (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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function articlequevote1() {
$target = $_GET['id'];
mysql_real_escape_string($target);
$sql = "SELECT * FROM articleque WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($res)) {
$votes = $row['votes'];
$votecount = $votes+1;
$title = $row['title'];
$text = $row['text'];
$enterposter = $row['enterposter'];
$about = $row['about'];
$dag = $row['dag'];
$maand = $row['maand'];
}
if ($votes==4) {
$sql = "INSERT INTO `lifesenzcms`.`article` VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand', '$text', '$about')";
$res = mysql_query($sql) or die(mysql_error());
$sql = "DELETE FROM articleque WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}else {
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '$votecount' WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}
}
$target = $_GET['id'];
mysql_real_escape_string($target);
$sql = "SELECT * FROM articleque WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($res)) {
$votes = $row['votes'];
$votecount = $votes+1;
$title = $row['title'];
$text = $row['text'];
$enterposter = $row['enterposter'];
$about = $row['about'];
$dag = $row['dag'];
$maand = $row['maand'];
}
if ($votes==4) {
$sql = "INSERT INTO `lifesenzcms`.`article` VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand', '$text', '$about')";
$res = mysql_query($sql) or die(mysql_error());
$sql = "DELETE FROM articleque WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}else {
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '$votecount' WHERE id='$target'";
$res = mysql_query($sql) or die(mysql_error());
}
}
Bedankt iedereen voor de reacties, mochten er nog fouten inzitten naar jullie insziens, please let me know :)
Gr.
Peter
- gebruik duidelijke variabelen namen; $sql en $res zie ik meerdere malen = om problemen vragen
- je INSERT is altijd eenvoudiger als je ook zegt wat je gaat invoeren, dan ontwijk je om 'null' te moeten invoeren (wat vrijwel altijd een slecht idee is, btw) INSERT INTO tabel (id, naam, ...) VALUES (id, naam, ...);
- in de laatste if/else staat 2 keer "$res = mysql_query($sql) or die(mysql_error());", een functie maak je om minder typwerk te moeten doen, die kan dus perfect uit de if/else.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
if ($votes==4) {
$sql = "INSERT INTO `lifesenzcms`.`article` VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand', '$text', '$about')";
$res = mysql_query($sql) or die(mysql_error());
$sql = "DELETE FROM articleque WHERE id='$target'";
}else {
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '$votecount' WHERE id='$target'";
}
$res = mysql_query($sql) or die(mysql_error());
$sql = "INSERT INTO `lifesenzcms`.`article` VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand', '$text', '$about')";
$res = mysql_query($sql) or die(mysql_error());
$sql = "DELETE FROM articleque WHERE id='$target'";
}else {
$sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '$votecount' WHERE id='$target'";
}
$res = mysql_query($sql) or die(mysql_error());