PHP SQL match-script
Ik ben een datingsite aan het programmeren.
Ik heb nu een matchingscript wat er zo uit ziet: (zie onderaan bericht).
Als ik dat uitvoer, krijg ik alleen de eerste naam uit de query, terwijl er toch echt meerdere resultaten zijn.
Vragen:
1. Weet iemand hoe ik dit moet verhelpen?
2. Ik wou dan de resultaten met een teller doen, dus voor resultaat==1 echo $resultaat[1]
totdat er geen namen meer in de array staan.
3. ik wil dan bij de <a href> een hidden value ofzo meesturen, zodat ie naar profiel gaat, en daar checkt wat er in de variabele zit, en dan het profiel van die persoon (uit de database) laadt.
Profiel.php is een standaard pagina voor profiel. Dat komt overigens later wel, als iemand eerst alleen het hidden value-ding uitlegt ofzoiets.
Alvast bedankt,
Kevin
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
<?php
session_start();
IF (!isset($_SESSION['username']))
{ header('Location: index.html'); }
$con = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());
mysql_select_db("datingsite", $con) or die('Could not find database: ' . mysql_error()) ;
$sql_check_geslacht = mysql_query ( " SELECT geslacht FROM partner WHERE username = '". $_SESSION['username'] ."' ") ;
$geslacht = mysql_result ( $sql_check_geslacht, $_SESSION['rij']);
IF ($geslacht == "Beide")
{$geslacht == ' "man" OR "vrouw" ';}
$sql_match = mysql_query ( " SELECT username FROM user WHERE geslacht = '".$geslacht."' ") ;
$resultaat = mysql_fetch_array ( $sql_match );
mysql_close($con) ;
?>
<html>
<head>
<title>Matchen - <?php echo $_SESSION['username']; ?> </title>
<link rel="icon" type="image/ico" href="favicon.ico"> </link>
</head>
<body bgcolor="#00BFFF">
<div id="loguit_scherm"> <table width="100%", border=0> <tr>
<td align="right", width="100%"><small><a href="profiel.php">PROFIEL VAN: <?php echo $_SESSION['username']; ?></a> <br />
<a href="loguit.php">UITLOGGEN</a></small>
</td> <td align="right", width="100%">
<a href="loguit.php"><img border="0" src="Forever_Alone_Dating.png" alt="Forever Alone Dating logo" width="107" height="66"></a><br />
</td> </tr> </table></div> <hr>
<b>Matching...</b><br />
U zoekt op geslacht: <?php echo $geslacht; ?> <br />
Resultaten:<br />
1: <a href="profiel.php"><?php echo $resultaat[0]; ?><br /></a>
2: <a href="profiel.php"><?php echo $resultaat[1]; ?><br /></a>
3: <a href="profiel.php"><?php echo $resultaat[2]; ?><br /></a>
<form action="" method="post">
<input type="submit" value="Match opnieuw!">
</form>
<hr>
</body>
</html>
session_start();
IF (!isset($_SESSION['username']))
{ header('Location: index.html'); }
$con = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());
mysql_select_db("datingsite", $con) or die('Could not find database: ' . mysql_error()) ;
$sql_check_geslacht = mysql_query ( " SELECT geslacht FROM partner WHERE username = '". $_SESSION['username'] ."' ") ;
$geslacht = mysql_result ( $sql_check_geslacht, $_SESSION['rij']);
IF ($geslacht == "Beide")
{$geslacht == ' "man" OR "vrouw" ';}
$sql_match = mysql_query ( " SELECT username FROM user WHERE geslacht = '".$geslacht."' ") ;
$resultaat = mysql_fetch_array ( $sql_match );
mysql_close($con) ;
?>
<html>
<head>
<title>Matchen - <?php echo $_SESSION['username']; ?> </title>
<link rel="icon" type="image/ico" href="favicon.ico"> </link>
</head>
<body bgcolor="#00BFFF">
<div id="loguit_scherm"> <table width="100%", border=0> <tr>
<td align="right", width="100%"><small><a href="profiel.php">PROFIEL VAN: <?php echo $_SESSION['username']; ?></a> <br />
<a href="loguit.php">UITLOGGEN</a></small>
</td> <td align="right", width="100%">
<a href="loguit.php"><img border="0" src="Forever_Alone_Dating.png" alt="Forever Alone Dating logo" width="107" height="66"></a><br />
</td> </tr> </table></div> <hr>
<b>Matching...</b><br />
U zoekt op geslacht: <?php echo $geslacht; ?> <br />
Resultaten:<br />
1: <a href="profiel.php"><?php echo $resultaat[0]; ?><br /></a>
2: <a href="profiel.php"><?php echo $resultaat[1]; ?><br /></a>
3: <a href="profiel.php"><?php echo $resultaat[2]; ?><br /></a>
<form action="" method="post">
<input type="submit" value="Match opnieuw!">
</form>
<hr>
</body>
</html>
Kevin Zegikniet op 11/12/2012 18:56:21:
... Ik wou dan de resultaten met een teller doen, dus voor resultaat==1 echo $resultaat[1]
totdat er geen namen meer in de array staan...
totdat er geen namen meer in de array staan...
Wat je wil, is een lus maken (een for of een while) waarin je de fetch van een record doet.
mysql_fetch_array haalt 1 rij/record uit de resource die je van mysql_query krijgt.
Zet dat dus in een lus, en je krijgt ze allemaal.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
...
$res = mysql_query ( " SELECT id, username FROM user WHERE geslacht = '".$geslacht."' ") ; // merk op: res staat voor resource of result
for ($i=0; $row = mysql_fetch_assoc($res); $i++) {
echo ($i + 1) . ': <a href="profiel.php?id=' . $row['id'] . '">' . $row['username'] . '</a><br>';
}
...
?>
...
$res = mysql_query ( " SELECT id, username FROM user WHERE geslacht = '".$geslacht."' ") ; // merk op: res staat voor resource of result
for ($i=0; $row = mysql_fetch_assoc($res); $i++) {
echo ($i + 1) . ': <a href="profiel.php?id=' . $row['id'] . '">' . $row['username'] . '</a><br>';
}
...
?>
Dat ziet er inderdaad wel zo uit als ik het wilde doen, bedankt!
Ik ga het vanavond even uittesten, aangezien ik nu geen tijd heb ivm school & sport.
Ik zal vanavond even posten hoe het gegaan is.
Nog een ding:
Wat doe je met <a href="profiel.php?id" ... en dan vooral het '?id' ?
En hoe werkt dat?
Gewijzigd op 12/12/2012 11:19:48 door Kevin Zegikniet
Dan ga je dus op basis van die id in de url het juiste profiel ophalen.
Dus op profiel.php heb je iets als:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
...
$id= isset($_GET['id']) ? (int) $_GET['id'] : 0;
$res = mysql_query ( " SELECT ... FROM user WHERE id = " . $id . " ") ; // vervang die ... door de velden die je nodig hebt
if($row = mysql_fetch_assoc($res)) { // hier heb je slechts 1 record nodig; dus geen lus, maar een if()
echo '<h2>' . $row['username'] . '</h2>' . $row['email'] ...;
}
?>
...
$id= isset($_GET['id']) ? (int) $_GET['id'] : 0;
$res = mysql_query ( " SELECT ... FROM user WHERE id = " . $id . " ") ; // vervang die ... door de velden die je nodig hebt
if($row = mysql_fetch_assoc($res)) { // hier heb je slechts 1 record nodig; dus geen lus, maar een if()
echo '<h2>' . $row['username'] . '</h2>' . $row['email'] ...;
}
?>
Gewijzigd op 12/12/2012 11:29:23 door Kris Peeters
Dankje, het matching stukje (de eerste) werkt iig wel. Hiermee heb je de eerste twee vragen opgelost.
De tweede ga ik nog bewerken, maar ik heb geen idee hoe.
Ik stuur het script wel ff mee.
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
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
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
<?php
session_start();
IF (!isset($_SESSION['username']))
{ header('Location: index.html'); }
$user = $_SESSION['username'];
$con = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());
mysql_select_db("datingsite", $con) or die('Could not find database: ' . mysql_error());
$pers_bericht = mysql_result ( mysql_query ("SELECT Profielbericht FROM profiel WHERE Username = '".$user."' "), 0);
$_SESSION['background'] = mysql_result ( mysql_query ("SELECT Background FROM profiel WHERE Username = '".$user."' "), 0);
$beroep = mysql_result ( mysql_query ("SELECT Beroep FROM user WHERE Username = '".$user."' "), 0);
$geslacht = mysql_result ( mysql_query ("SELECT Geslacht FROM user WHERE Username = '".$user."' "), 0);
$profiel = mysql_result ( mysql_query ("SELECT Username FROM user WHERE Username = '".$user."' "), 0);
$dag = mysql_result ( mysql_query ("SELECT Dag FROM user WHERE Username = '".$user."' "), 0);
$maand = mysql_result ( mysql_query ("SELECT Maand FROM user WHERE Username = '".$user."' "), 0);
$jaar = mysql_result ( mysql_query ("SELECT Jaar FROM user WHERE Username = '".$user."' "), 0);
/*
if (!file_exists("PROFILES/" . $_FILES[" '".$profiel."' "]))
{$pic = " '".$geslacht."' "; }
else
{$pic = " '".$profiel."' "; }
*/
IF ($pers_bericht == "")
{$pers_bericht = "</i>Heeft nog geen bericht ingevoerd<i>";}
$geboortedatum = mktime(0, 0, 0, $maand, $dag, $jaar);
$t = time();
$leeftijdsec = ($geboortedatum < 0) ? ( $t + ($geboortedatum * -1) ) : $t - $geboortedatum;
$leeftijd = floor($leeftijdsec / "31536000");
mysql_close($con);
?>
<html>
<head> <title>Profiel van <?php echo $profiel; ?></title> </head>
<link rel="icon" type="image/ico" href="favicon.ico"> </link>
<body bgcolor="#<?php echo $_SESSION['background']; ?> ">
<table width="100%", border=0> <tr>
<td align="right", width="100%"><small><a href="profiel.php">PROFIEL VAN: <?php echo $_SESSION['username']; ?></a> <br />
<a href="lijst3.php">PROFIEL BEWERKEN</a><br />
<a href="loguit.php">UITLOGGEN</a><br /></small>
</td> <td align="right", width="100%">
<a href="loguit.php"><img src="Forever_Alone_Dating.png" alt="Forever Alone Dating logo" width="107" height="66"></a><br />
</td> </tr> </table></div> <hr>
<table>
<tr> <td> <img src="/PROFILES/<?php echo $pic; ?>" alt="Profielfoto van <?php echo $profiel; ?>" width="100" height="150"> </td>
<td>Profiel van: <i><?php echo $_SESSION['username'], ' (', $geslacht, ')'; ?></i><br />
Persoonlijke bericht:<br />
<i>"<?php echo $pers_bericht; ?>"</i><br />
Beroep: <i><?php echo $beroep; ?></i><br />
Leeftijd: <?php echo $leeftijd; ?> jaar</table>
<!-- HIER STAAT MIJN EMAILADRES, GEFINGEERD OM EEN REDEN -->
<br />Wilt u ons mailen? Dat kan! Klik <a href="mailto: [email protected]">hier!</a><br />
<hr>
<form action="match.php" method="post">
<input type="submit" value="Matchen!"></form>
</body>
</html>
session_start();
IF (!isset($_SESSION['username']))
{ header('Location: index.html'); }
$user = $_SESSION['username'];
$con = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());
mysql_select_db("datingsite", $con) or die('Could not find database: ' . mysql_error());
$pers_bericht = mysql_result ( mysql_query ("SELECT Profielbericht FROM profiel WHERE Username = '".$user."' "), 0);
$_SESSION['background'] = mysql_result ( mysql_query ("SELECT Background FROM profiel WHERE Username = '".$user."' "), 0);
$beroep = mysql_result ( mysql_query ("SELECT Beroep FROM user WHERE Username = '".$user."' "), 0);
$geslacht = mysql_result ( mysql_query ("SELECT Geslacht FROM user WHERE Username = '".$user."' "), 0);
$profiel = mysql_result ( mysql_query ("SELECT Username FROM user WHERE Username = '".$user."' "), 0);
$dag = mysql_result ( mysql_query ("SELECT Dag FROM user WHERE Username = '".$user."' "), 0);
$maand = mysql_result ( mysql_query ("SELECT Maand FROM user WHERE Username = '".$user."' "), 0);
$jaar = mysql_result ( mysql_query ("SELECT Jaar FROM user WHERE Username = '".$user."' "), 0);
/*
if (!file_exists("PROFILES/" . $_FILES[" '".$profiel."' "]))
{$pic = " '".$geslacht."' "; }
else
{$pic = " '".$profiel."' "; }
*/
IF ($pers_bericht == "")
{$pers_bericht = "</i>Heeft nog geen bericht ingevoerd<i>";}
$geboortedatum = mktime(0, 0, 0, $maand, $dag, $jaar);
$t = time();
$leeftijdsec = ($geboortedatum < 0) ? ( $t + ($geboortedatum * -1) ) : $t - $geboortedatum;
$leeftijd = floor($leeftijdsec / "31536000");
mysql_close($con);
?>
<html>
<head> <title>Profiel van <?php echo $profiel; ?></title> </head>
<link rel="icon" type="image/ico" href="favicon.ico"> </link>
<body bgcolor="#<?php echo $_SESSION['background']; ?> ">
<table width="100%", border=0> <tr>
<td align="right", width="100%"><small><a href="profiel.php">PROFIEL VAN: <?php echo $_SESSION['username']; ?></a> <br />
<a href="lijst3.php">PROFIEL BEWERKEN</a><br />
<a href="loguit.php">UITLOGGEN</a><br /></small>
</td> <td align="right", width="100%">
<a href="loguit.php"><img src="Forever_Alone_Dating.png" alt="Forever Alone Dating logo" width="107" height="66"></a><br />
</td> </tr> </table></div> <hr>
<table>
<tr> <td> <img src="/PROFILES/<?php echo $pic; ?>" alt="Profielfoto van <?php echo $profiel; ?>" width="100" height="150"> </td>
<td>Profiel van: <i><?php echo $_SESSION['username'], ' (', $geslacht, ')'; ?></i><br />
Persoonlijke bericht:<br />
<i>"<?php echo $pers_bericht; ?>"</i><br />
Beroep: <i><?php echo $beroep; ?></i><br />
Leeftijd: <?php echo $leeftijd; ?> jaar</table>
<!-- HIER STAAT MIJN EMAILADRES, GEFINGEERD OM EEN REDEN -->
<br />Wilt u ons mailen? Dat kan! Klik <a href="mailto: [email protected]">hier!</a><br />
<hr>
<form action="match.php" method="post">
<input type="submit" value="Matchen!"></form>
</body>
</html>
Het stukje met pic enzo kun je overslaan, dat is alleen voor de profielfoto, maar daar ben ik nog niet helemaal uit.
Het matchen moet eerst gedaan worden, dit is essentieel voor het afsluiten van de opdracht namelijk (het is een schoolopdracht voor VWO 6).
Alvast bedankt.
Gewijzigd op 12/12/2012 23:03:16 door Kevin Zegikniet
Met zoveel onnodige query's eindig je met een laag cijfer voor je VWO6 opdracht.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT Profielbericht,
Background,
Beroep,
Geslacht,
Username,
Dag,
Maand,
Jaar
FROM user, profiel
WHERE user.Username = $user
and user.Username = profiel.Username
Background,
Beroep,
Geslacht,
Username,
Dag,
Maand,
Jaar
FROM user, profiel
WHERE user.Username = $user
and user.Username = profiel.Username
Gewijzigd op 12/12/2012 23:20:49 door Aad B
En hoe zet ik die dingen dan in variabelen?
Ik heb nu geen tijd meer, maar ik zal het morgen even veranderen, wat jij nu zegt.
Kun je nog even uitleggen hoe ik die dingen dan in de afzonderlijke variabelen (zie script) zet?
Ik neem namelijk aan dat ik een array krijg met die query.
Alvast bedankt!
Er staan hier op phphulp voldoende tutorials om dit vrij eenvoudige probleem op te lossen. Beetje studeren Kevin ;)
Het soort van werkt nu, met een beetje een omweg. Toch bedankt!
Ik heb nog een volgende vraag, dit is ook de laatste over dit project omdat het nu afgesloten is (we moeten nog een verslag schrijven, maar de site is klaar voor het project, aldus de docent. We mochten er thuis nog wel aan werken, maar niet meer in de les.)
Anyway: mijn laatste vraag:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$sql_check_geslacht = mysql_query ( " SELECT geslacht FROM partner WHERE username = '". $_SESSION['username'] ."' ") ;
$geslacht = mysql_result ( $sql_check_geslacht, $_SESSION['rij']);
IF ($geslacht == "Beide")
{ $geslacht == 'NOT "" ';}
$res = mysql_query ( " SELECT id, username, dag, maand, jaar FROM user WHERE geslacht = '".$geslacht."' ") ;
$geslacht = mysql_result ( $sql_check_geslacht, $_SESSION['rij']);
IF ($geslacht == "Beide")
{ $geslacht == 'NOT "" ';}
$res = mysql_query ( " SELECT id, username, dag, maand, jaar FROM user WHERE geslacht = '".$geslacht."' ") ;
Ik doe het niet goed. Maar hoe doe ik het wel goed?
Zet error-reporting aan.
Bouw foutafhandeling in.
Debug: hebben de variabelen de waarde(n) die je verwacht?
Als ik het goed heb ken je aan $geslacht nu true/false toe (verwacht niet dat je dat bedoelt).
Op regel 4 vergelijk je of $geslacht gelijk is aan NOT "" Denk niet dat je dat wilt/bedoelt.
Misschien toch nog eens het lesboek en/of de aantekeningen doorlezen... ;-)
Je hebt het niet goed.
Ik wil kijken of iemand bi is (dus op beide geslachten valt en ook filtert).
Als dat zo is, dan wil ik in de query (rgl 6) filteren op geslacht is niet leeg.
En $geslacht werkt prima. Als ik $geslacht echo, dan komt het prima uit in het geval dat er man of vrouw staat.