fout in mysqli query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Louis Deconinck

Louis Deconinck

18/05/2014 15:14:46
Quote Anchor link
hallo iedereen,

Om een of andere reden wordt mijn database niet aangepast, nadat het form is gesubmit, wat doe ik verkeerd en hoe kan ik het oplossen?

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
<?php
$link
=mysqli_connect("****");

if(isset($_POST['winner'])){
$winner=$_POST["winner"];
$loser=$_POST["loser"];
$result4 = mysqli_query($link, "SELECT * FROM main WHERE fbid in ($winner)");
$result5 = mysqli_query($link, "SELECT * FROM main WHERE fbid in ($loser)");
$row3 = mysqli_fetch_assoc($result4);
$row4 = mysqli_fetch_assoc($result5);
$ratingwinner=$row3['rating'];
$ratingloser=$row4['rating'];
$points=($ratingwinner/$ratingloser)*20;
$newratingwinner=$ratingwinner+$points;
$newratingloser=$ratingloser-$points;
$result6 = mysqli_query($link, "UPDATE rating FROM main WHERE fbid in ($winner) SET rating='$newratingwinner'");
$result7 = mysqli_query($link, "UPDATE rating FROM main WHERE fbid in ($loser) SET rating='$newratingloser'");
}

?>


<form id="form1" method="post" action=""><input type="hidden" name="winner" value="<?=$fbid1?>"><input type="hidden" name="loser" value="<?=$fbid2?>"></form>

<a href="#" onclick="form1.submit()"><img src="http://graph.facebook.com/<?=$fbid1?>/picture?width=250&height=250" /></a>
Gewijzigd op 18/05/2014 15:15:11 door Louis Deconinck
 
PHP hulp

PHP hulp

19/04/2024 07:30:43
 
Obelix Idefix

Obelix Idefix

18/05/2014 15:39:59
Quote Anchor link
Welke query gaat fout?
Waar is de foutafhandeling van je query's?
 
Louis Deconinck

Louis Deconinck

18/05/2014 15:47:59
Quote Anchor link
Welke query er precies fout gaat weet ik niet, ik weet wel dat de rating in de database niet veranderd, terwijl dit wel zou moeten gebeuren op regel 16 en 17.
 
Obelix Idefix

Obelix Idefix

18/05/2014 16:02:17
Quote Anchor link
Louis Deconinck op 18/05/2014 15:47:59:
Welke query er precies fout gaat weet ik niet,

Dan moet je daar achter zien te komen....

Ga eens debuggen. Controleer of de informatie die het script laat zien (variabelen) overeenkomt met hetgeen je verwacht.
Bouw foutafhandeling in.
Zet error-reporting aan.
 
Louis Deconinck

Louis Deconinck

18/05/2014 16:24:16
Quote Anchor link
Error reporting staat aan en krijg er geen. De post values kloppen. De fout(en) zitten tussen regel 4 en 17.
 
Obelix Idefix

Obelix Idefix

18/05/2014 16:50:38
Quote Anchor link
Louis Deconinck op 18/05/2014 16:24:16:
De fout(en) zitten tussen regel 4 en 17.


Dat is zo'n beetje het hele script en dat de fout tussen regel 4 en 17 zit was natuurlijk al vrij waarschijnlijk, omdat daar de verwerking plaatsvindt....

Obelix en Idefix op 18/05/2014 16:02:17:
Ga eens debuggen. Controleer of de informatie die het script laat zien (variabelen) overeenkomt met hetgeen je verwacht.
Bouw foutafhandeling in.
Zet error-reporting aan.
Gewijzigd op 18/05/2014 16:52:12 door Obelix Idefix
 
- SanThe -

- SanThe -

18/05/2014 17:09:58
Quote Anchor link
Louis Deconinck op 18/05/2014 16:24:16:
Error reporting staat aan...


Dan zou je een melding krijgen op $fbid1.
 
Ivo P

Ivo P

18/05/2014 17:14:10
Quote Anchor link
zo maar een idee:

wat als je eerst de update query's draait en pas daarna de select-query's?

Ik heb het idee dat je naar de situatie net voor de update zit te kijken
 
Louis Deconinck

Louis Deconinck

18/05/2014 17:24:58
Quote Anchor link
Het vorige script was slechts een deeltje uit het gehele script, hier is ie helemaal. Het idee van Ivo P ga ik straks even uitproberen. Ik heb ook enkele do while loops ingevoerd, maar daar zit het toch ook een beetje mis, want hij laad de pagina niet meer.

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php

// foutenafhandeling
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// connectie met database
$link=mysqli_connect("****");

// als men gebruikt heeft gemakt van de gender switch
if(isset($_POST['gender'])) {
if($_POST['gender']=='m') {
$m="checked";
$w="";
$gender="m";
}
else {
$m="";
$w="checked";
$gender="w";
}


// bij het laden van de pagina
} else {
$w="";
$m="checked";
$gender="w";
}


// als men op een persoon heeft geklikt
if(isset($_POST['winner'])){
$winner=$_POST["winner"];
$loser=$_POST["loser"];

// we halen de winnaar en verliezer uit de database
$result4 = mysqli_query($link, "SELECT * FROM main WHERE fbid in ($winner)");
$result5 = mysqli_query($link, "SELECT * FROM main WHERE fbid in ($loser)");
$row3 = mysqli_fetch_assoc($result4);
$row4 = mysqli_fetch_assoc($result5);

// we halen hun huidige rating op
$ratingwinner=$row3['rating'];
$ratingloser=$row4['rating'];

// we kijken hoeveel punten er verdiend en verloren worden
$points=($ratingwinner/$ratingloser)*20;
$newratingwinner=$ratingwinner+$points;
$newratingloser=$ratingloser-$points;

// we updaten de gegevens in de database
$result6 = mysqli_query($link, "UPDATE rating FROM main WHERE fbid in ($winner) SET rating='$newratingwinner'");
$result7 = mysqli_query($link, "UPDATE rating FROM main WHERE fbid in ($loser) SET rating='$newratingloser'");
}


// we kijken hoeveel mensen er in de database zitten
$result1 = mysqli_query($link, "SELECT * FROM main");
$num_rows = mysqli_num_rows($result1);

// er wordt een random persoon gekozen met het juiste geslacht
do {
$person1=rand(1, $num_rows);
$result2 = mysqli_query($link, "SELECT * FROM main WHERE id in ($person1)");
$row1 = mysqli_fetch_assoc($result2);
$fbid1=$row1['fbid'];
$gender1=$row1['gender'];
}
while ($gender1!=$gender);

// er wordt een tweede persoon gekozen met het jusite geslacht die niet hetzelfde is als de eerste persoon
do {
do {
$person2=rand(1, $num_rows);
}
while ($person2 == $person1);
$result3 = mysqli_query($link, "SELECT * FROM main WHERE id in ($person2)");
$row2 = mysqli_fetch_assoc($result3);
$fbid2=$row2['fbid'];
$gender2=$row2['gender'];
}
while ($gender2!=$gender);

?>


<!DOCTYPE html>
<html>
<head>
<title>***</title>

<style type="text/css">
***
</style>
</head>
<body>

<div class="center">

/* de schakelaar om het geslacht te kiezen */
<div id="genderswitch"><div id="ctrl"><form id="form3" method="post" action="">
  <input id="ctrl_home" type="radio" name="gender" value="m" <?=$m?> class="first-option" onchange=" document.getElementById('form3').submit();"><label for="ctrl_home">Men</label><input id="ctrl_menu" type="radio" name="gender" value="w" <?=$w?> class="second-option" onchange=" document.getElementById('form3').submit();" ><label for="ctrl_menu">Women</label></form>
</div>
</div>

/* de twee persoon die tegenover elkaar staan, bij het klikken op een persoon wordt de form gesubmit */
<form id="form1" method="post" action=""><input type="hidden" name="winner" id ="winner" value="<?=$fbid1?>"><input type="hidden" name="loser" id="loser" value="<?=$fbid2?>"></form>

<a href="#" onclick="form1.submit()"><img src="http://graph.facebook.com/<?=$fbid1?>/picture?width=250&height=250" /></a>

<div id="vs">VS</div>

<form id="form2" method="post" action=""><input type="hidden" name="winner" id="winner" value="<?=$fbid2?>"><input type="hidden" name="loser" id="loser" value="<?=$fbid1?>"></form>

<a href="#" onclick="form2.submit()"><img src="http://graph.facebook.com/<?=$fbid2?>/picture?width=250&height=250" /></a>
</div>

<div id="footer">&copy; <?php echo date("Y") ?> ***</div>

</body>
</html>
Gewijzigd op 18/05/2014 17:42:36 door Louis Deconinck
 
- Ariën  -
Beheerder

- Ariën -

18/05/2014 17:37:38
Quote Anchor link
Los van eht feit dat jan en allemaal zomaar je script kan hacken d.m.v. SQL-injection, blijft de foutafhandeling nog steeds gemist....

Bekijk eens dit voorbeeld, en probeer het eens toe te passen op je script:
https://github.com/WouterJ/sql-boilerplate/tree/master/mysql
 
Erwin H

Erwin H

18/05/2014 17:38:34
Quote Anchor link
Louis Deconinck op 18/05/2014 17:24:58:
Het idee van Ivo P ga ik straks even uitproberen.

Niet straks doen, nu doen. Dat is het enige zinvolle wat je kan doen. Je moet ALTIJD eerst de acties van de vorige pagina afhandelen, voor je een nieuwe pagina opbouwt. Anders zit je altijd naar oude data te kijken.

Fout die veel beginners maken en dat heeft niets met programmeren te maken, maar gewoon met logisch nadenken.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/05/2014 17:42:24
Quote Anchor link
Even voor je vertaald van php.net:

Return Values

Voor SELECT, SHOW, DESCRIBE, EXPLAIN en andere statements die een resultset teruggeven geeft mysql_query() een resource als de query goed uitgevoerd kan worden en een FALSE bij een fout.

Voor alle andere typen SQL statements zoals INSERT, UPDATE, DELETE, DROP, etc geeft mysql_query() een TRUE als de query goed verlopen is en een FALSE bij een fout.

Dus.. ga $result6 en $result7 testen! In geval van een foutmelding kun je de functie mysql_error() gebruiken om een foutmelding op je scherm te tonen.
 
- Ariën  -
Beheerder

- Ariën -

18/05/2014 17:45:18
Quote Anchor link
Verder is $result6 en $result7 een belabberde naamgeving. Zeer verwarrend......
 
Louis Deconinck

Louis Deconinck

18/05/2014 17:45:42
Quote Anchor link
Maar ik moet toch eerst de gegevens selecteren en aanpassen voor ik ze kan updaten in de database?
Resultaat 6 en 7 zou ik graag testen, het probleem is dat ik waarschijnlijk om één of andere reden in een eeuwige while loop zit, aangezien hij de pagina blijft laden, wat zou het probleem daar kunnen zijn?
Ik weet dat de website niet beveilgd is tegen hacken, maar eerst wil ik het aan de praat krijgen voordat ik verder ga. Die github snap ik wel niet helemaal ...

P.S. Ik heb even comments toegevoegd om het wat duidelijker te maken.
 
Ivo P

Ivo P

18/05/2014 17:51:33
Quote Anchor link
ah ik snap wat je (omslachtig) doet.

Maar de syntax van een update query luidt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
UPDATE tabel
SET kolom = value,
    kolom1 = value
WHERE voorwaarde

in die volgorde
 
- SanThe -

- SanThe -

18/05/2014 17:52:00
Quote Anchor link
Vaag script.

Wat zou er gaan gebeuren als de database nog leeg is?
Dan wordt $person1=rand(1, $num_rows); dus rand(1, 0) en dat gaat niet werken.
 
Ivo P

Ivo P

18/05/2014 17:56:14
Quote Anchor link
je kunt beter gericht op zoek naar iemand van het juiste geslacht en de db random laten sorteren

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT *
FROM zinnigetabelnaam
WHERE id != $persoon
  AND gender = $genderpersoon
ORDER BY RAND()
LIMIT 1
 
Louis Deconinck

Louis Deconinck

18/05/2014 17:56:44
Quote Anchor link
Verandereing van Ivo P doorgevoerd, alleen blijft hij nog steeds laden, dus moet er nog een fout zitten tussen regel 59 en 76.

De rand functie werkt, er zitten namelijk 2 testpersonen in de database.
De database bestaat uit 1 table, main met daarin een kolom: id, fbid, rating en gender. De twee testpersonen hebben alletwee gender m.
 
Ivo P

Ivo P

18/05/2014 17:58:28
Quote Anchor link
$person1=rand(1, 2);

in theorie kan dit 10.000 x achterelkaar 1 opleveren....
 
Louis Deconinck

Louis Deconinck

18/05/2014 18:05:05
Quote Anchor link
Ik heb regel 59 tot 76 nu hierdoor vervangen, dus de dowhiles en rands zijn weg, nu krijg ik echter een blanco pagina ...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$result1
= mysqli_query($link, "SELECT * FROM main WHERE gender='$gender' ORDER BY RAND() LIMIT1");
$row1 = mysqli_fetch_assoc($result1);
$fbid1=$row1['fbid'];
$id1=$row1['id'];

$result2 = mysqli_query($link, "SELECT * FROM main WHERE id != '$id1' AND gender='$gender' ORDER BY RAND() LIMIT1");
$row2 = mysqli_fetch_assoc($result2);
$fbid2=$row2['fbid'];
?>


Toevoeging op 18/05/2014 18:08:25:

Was enkele haakjes vergeten, nu krijg ik het volgende: Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in
Gewijzigd op 18/05/2014 18:06:29 door Louis Deconinck
 
- Ariën  -
Beheerder

- Ariën -

18/05/2014 18:10:14
Quote Anchor link
Dat roepen we al een hele tijd: Voeg eens foutafhandeling toe.
 

Pagina: 1 2 volgende »



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.