PHP SQL match-script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin Zegikniet

Kevin Zegikniet

11/12/2012 18:56:21
Quote Anchor link
Hallo,

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)
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
<?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>
 
PHP hulp

PHP hulp

22/12/2024 10:36:16
 
Kris Peeters

Kris Peeters

12/12/2012 10:07:42
Quote Anchor link
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...


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)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
}
...

?>
 
Kevin Zegikniet

Kevin Zegikniet

12/12/2012 11:18:37
Quote Anchor link
@Kris
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
 
Kris Peeters

Kris Peeters

12/12/2012 11:28:28
Quote Anchor link
O ja.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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'] ...;
}

?>
Gewijzigd op 12/12/2012 11:29:23 door Kris Peeters
 
Kevin Zegikniet

Kevin Zegikniet

12/12/2012 23:01:58
Quote Anchor link
@Kris

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)
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
<?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>


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
 
Aad B

Aad B

12/12/2012 23:11:23
Quote Anchor link
Waarom zoveel query's (10 t/m 17) terwijl het in 1 query kan? Je hebt van SQL nog niet veel begrepen. Bouw een join tussen profiel en user en haal alles in 1 query op.
Met zoveel onnodige query's eindig je met een laag cijfer voor je VWO6 opdracht.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 12/12/2012 23:20:49 door Aad B
 
Kevin Zegikniet

Kevin Zegikniet

12/12/2012 23:26:24
Quote Anchor link
@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!
 
Aad B

Aad B

12/12/2012 23:30:54
Quote Anchor link
Er staan hier op phphulp voldoende tutorials om dit vrij eenvoudige probleem op te lossen. Beetje studeren Kevin ;)
 
Kevin Zegikniet

Kevin Zegikniet

14/12/2012 23:54:37
Quote Anchor link
@Aad B
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)
PHP script in nieuw venster Selecteer het PHP script
1
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."' ") ;

Ik doe het niet goed. Maar hoe doe ik het wel goed?
 
Obelix Idefix

Obelix Idefix

15/12/2012 09:25:33
Quote Anchor link
"Ik doe iets niet goed" -> waar baseer je dat op? Krijg je een (fout)melding?

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... ;-)
 
Kevin Zegikniet

Kevin Zegikniet

16/12/2012 00:25:25
Quote Anchor link
@obelix

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.
 



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.