Avatar billede jost Nybegynder
12. juli 2007 - 00:02 Der er 12 kommentarer og
1 løsning

Hjælp til kode der henter og sætter data i database

Hej

Jeg er ved at lave et lille php-script, jeg bare ikke kan få til at virke.

Ideen er at man logger ind på en side, der spørger om man vil være frivillig hjælper i en forening.
Der er så en knap der hedder "Ja, det vil jeg gerne" (hvis man ikke vil så trykker man ikke).
Nedenunder er der en liste over alle dem der har trykket ja.
Ved at trykke ja bliver ens brugerid puttet i en database.

Hvis man går ind på siden igen, så tjekker php koden databasen om ens brugerid står der. Hvis den gør det, så spørger den:
Vil du stadig hjælpe?
Der så to knapper: "Ja, det vil jeg stadig" og "Nej, det vil jeg ikke"
Ved at trykke "Ja, det vil jeg stadig", så bliver databasen opdateret med en dato om man stadig er interesseret. Trykker man "Nej, det vil jeg ikke", så bliver man slettet fra databasen (eller fra den ene tabel, og ikke som bruger af sitet).

Problemet med koden, som den er lige nu, er at hvis der ikke står noget i den tabel som den skal hente og sætte data i så stiller den ikke spørgsmålet.
Hvis der er noget i tabellen, og man som bruger ikke står der, så stiller den spørgsmålet om man vil være hjælper. Det kan man så svare ja til og man bliver puttet i tabellen. Så langt så godt. Men vender brugeren tilbage, stiller siden begge spørgsmål:
Vil du være frivillig?
og
Vil du stadig være frivillig?
Den skal kun spørge vil du stadig være frivillig, når man allerede står i tabellen.

Dette er koden:
------
<p> <center><h2>Hjælperlisten</h2></center> </p>
<p>Hej <?php echo ($userdata['user_name']); ?>
<br> <br>
<p>Her er en liste over alle dem der vil hjælpe til i foreningen. Din hjælp er påskønnet og vi kan bruge alle former for hjælp.
<br><br>
På forhånd tak <br>
-Bestyrelsen</p>



<?php



$type_query = "SELECT * FROM frivillige ";
$type_result = mysql_query($type_query) or die("Query failed : " . mysql_error());
while ($type_row = mysql_fetch_assoc($type_result))
{
    if ($userdata['user_id'] == $type_row["frivillig_user_id"]){
        echo "Vil du stadig hjælpe? <br> <br>
<form action='viewpage.php?page_id=43' method='post'>
<input type='submit' value='Ja, vil stadig hjælpe' name='stadig' />
</form>
<form action='viewpage.php?page_id=44' method='post'>
<input type='submit' value='Nej, ikke mere' name='nej' /></p>
</form>";
}    else {
        echo "Vil du hjælpe med i foreningen? <br> <br>

<form action='viewpage.php?page_id=42' method='post'>
<input type='submit' value='Ja, jeg vil gerne hjælpe' name='frivillig' /></p>
</form>";
}
}


 


?>



<?php

//Henter alle hjælpere
$sql10 = "SELECT fusion_users.user_id, dato, dato_bekraeft, user_name, user_mellemnavn, user_efternavn, user_kaelenavn, user_avatar FROM frivillige, fusion_users WHERE frivillige.frivillig_user_id=fusion_users.user_id ORDER BY dato DESC";
$tilmeldt10 = @mysql_query($sql10);
if (!$tilmeldt10) {
  exit('Databasefejl omkring linie 32: ' . mysql_error());
}
//Viser alle  der er hjælper
?>

<p  class="style1">
<table  width="100%" border="1">

<?php

if (mysql_num_rows($tilmeldt10) > 0) {
  while ($f = mysql_fetch_array($tilmeldt10)) {
    ?>
   
    <table width="100%" border="1">
  <tr>
    <td width="300 px" align='center' rowspan="4"><?php
    echo ($f['user_avatar'] ? "<img src='".IMAGES."avatars/".$f['user_avatar']."' alt='".$locale['u017']."'>" : $locale['u046'])."<br><a href='profile.php?lookup=".$f['user_id']."'>".$f['user_name']. " " .$f['user_mellemnavn']. " " .$f['user_efternavn']." <br> ".($f['user_kaelenavn'] ? "\"".$f['user_kaelenavn']."\"" : "")."</a></td>";
    ?>
    <td align='center'><b>Frivlig hjælper siden d.</b></td>
  </tr>
  <tr>
    <td align='center'><?php echo $f['dato']; ?></td>
  </tr>
  <tr>
    <td align='center'><b>Hjælperstatus bekræftet d.</b></td>
  </tr>
  <tr>
    <td align='center'><?php echo $f['dato_bekraeft']; ?></td>
  </tr>


    <?php
  }
} else {
  ?>
  <tr><td colspan="6"><center>Der er ingen frivillige i foreningen.</center></td></tr>
  <?php
}

?>
</table></p>
-------

Hvad har jeg skrevet forkert?

Jeg har virkelig bøvlet med det og jeg kan ikke se hvad der er galt.

Håber der er nogen der har et forslag.

På forhånd tak.

Jost
Avatar billede majbom Novice
12. juli 2007 - 08:22 #1
det er jo klart at den skriver begge ting...

while ($type_row = mysql_fetch_assoc($type_result)){
  if ($userdata['user_id'] == $type_row["frivillig_user_id"]){
      echo "Vil du stadig hjælpe?<br><br><form action='viewpage.php?page_id=43' method='post'><input type='submit' value='Ja, vil stadig hjælpe' name='stadig' /></form><form action='viewpage.php?page_id=44' method='post'><input type='submit' value='Nej, ikke mere' name='nej' /></p></form>";
  }else{
      echo "Vil du hjælpe med i foreningen?<br><br><form action='viewpage.php?page_id=42' method='post'><input type='submit' value='Ja, jeg vil gerne hjælpe' name='frivillig' /></p></form>";
  }
}
den kører alle hjælpere igennem og for hver hjælper tjekker den om personen der er logget ind, er dén hjælper, dvs at for hver hjælper der er en anden end den der kører scriptet vil den skrive "Vil du hjælpe?" og den ene gang den støder på den rigtige person, hvis den er i databasen og hjælpere, vil den skrive "vil du stadig hjælpe"

du kan ændre ovennævnte while løkke til noget a la:

while ($type_row = mysql_fetch_assoc($type_result)){
  if ($userdata['user_id'] == $type_row["frivillig_user_id"]){
      $er_frivillig = 1;
  }
}
if($er_frivillig == 1){
  echo "Vil du stadig hjælpe?<br><br><form action='viewpage.php?page_id=43' method='post'><input type='submit' value='Ja, vil stadig hjælpe' name='stadig' /></form><form action='viewpage.php?page_id=44' method='post'><input type='submit' value='Nej, ikke mere' name='nej' /></p></form>";
}else{
  echo "Vil du hjælpe med i foreningen?<br><br><form action='viewpage.php?page_id=42' method='post'><input type='submit' value='Ja, jeg vil gerne hjælpe' name='frivillig' /></p></form>";
}
Avatar billede jost Nybegynder
12. juli 2007 - 12:21 #2
Hep, det virkede. Mange tak for hjælpen. Smid et svar og du får points.

Mvh

Jost

PS. Jeg har et bonus spørgsmål, som du eller nogen måske andre kan svare på: Min formular smider en dato i databasen, men den bliver skrevet omvendt i forhold til den danske måde at gøre det på. Altså 2007-07-12 og ikke 12-07-2007. Kan man ændre det forholdsvis let eller skal der en større omgang kode til?
Jeg bruger den sql-sætning hvis det kan hjælpe:
$sql = "INSERT INTO frivillige SET
    frivillig_user_id='".$userdata['user_id']."',
    dato=LOCALTIMESTAMP(),
    dato_bekraeft=LOCALTIMESTAMP()";
Avatar billede majbom Novice
12. juli 2007 - 12:56 #3
når du henter datoen ud kan du lave noget substr...

$date = //dato fra db
$year = substr($dato, 0, 4);
$month = substr($dato, 5, 2);
$day = substr($dato, 7, 2);
$dk_date = $day.-.$month.-.$year;
Avatar billede majbom Novice
12. juli 2007 - 12:57 #4
som så skulle have været et svar ;)

kommer her...
Avatar billede jost Nybegynder
12. juli 2007 - 13:15 #5
Ok, jeg prøver lige at lege med det der substr halløj der.

Mange tak for hjælpen endnu en gang.

/Jost
Avatar billede majbom Novice
12. juli 2007 - 13:21 #6
selv tak :)
Avatar billede jost Nybegynder
12. juli 2007 - 13:31 #7
hmm... den brokker sig over punkummerne i denne linie

$dk_date = $day.-.$month.-.$year;

Den siger at der er et unexpected '.'

Hvad er der galt? Jeg har prøvet at lave nogle mellemrum, det plejer nogle gange at virke, men ikke her.
Avatar billede jost Nybegynder
12. juli 2007 - 13:39 #8
Nu satte jeg ' ' omkring bindestregerne altså sådan her:

$dk_date = $day."-".$month."-".$year;

Nu brokker den sig ikke over punktummerne, men den udskriver bare -- når den skal skrive $dk_date.

Jeg har gjort således:

<?php



if (mysql_num_rows($tilmeldt10) > 0) {
  while ($f = mysql_fetch_array($tilmeldt10)) {
 
  $date = $f['dato'];
$year = substr($dato, 0, 4);
$month = substr($dato, 5, 2);
$day = substr($dato, 7, 2);
$dk_date = $day."-".$month."-".$year;
    ?>
   
    <table width="100%" border="1">
  <tr>
    <td width="300 px" align='center' rowspan="4"><?php
    echo ($f['user_avatar'] ? "<img src='".IMAGES."avatars/".$f['user_avatar']."' alt='".$locale['u017']."'>" : $locale['u046'])."<br><a href='profile.php?lookup=".$f['user_id']."'>".$f['user_name']. " " .$f['user_mellemnavn']. " " .$f['user_efternavn']." <br> ".($f['user_kaelenavn'] ? "\"".$f['user_kaelenavn']."\"" : "")."</a></td>";
    ?>
    <td align='center'><b>Frivlig hjælper siden d.</b></td>
  </tr>
  <tr>
    <td align='center'><?php echo $dk_date; ?></td>
  </tr>
  <tr>
    <td align='center'><b>Hjælperstatus bekræftet d.</b></td>
  </tr>
  <tr>
    <td align='center'><?php echo $f['dato_bekraeft']; ?></td>
  </tr>

/Jost
Avatar billede majbom Novice
12. juli 2007 - 13:58 #9
arh, det er mig der har lavet en fejl jo :)

det med " udenom bindestregerne er rigtigt nok :) fejl dér fra mig

$date = $f['dato'];
$year = substr($date, 0, 4);
$month = substr($date, 5, 2);
$day = substr($date, 7, 2);
$dk_date = $day."-".$month."-".$year;

sådan :)
Avatar billede jost Nybegynder
12. juli 2007 - 14:35 #10
Det virker næsten :-)

Den skriver -2-07-2007 selv om den skal skrive 24-07-2007.
Så der må være noget galt med
$day = substr($date, 7, 2);
Men jeg fatter ikke lige det der substr, så jeg kan ikke regne det ud :-)
Avatar billede majbom Novice
12. juli 2007 - 15:43 #11
http://dk2.php.net/manual/da/function.substr.php

det skal være:
$day = substr($date, 8, 2);
i stedet for:
$day = substr($date, 7, 2);
Avatar billede jost Nybegynder
12. juli 2007 - 16:13 #12
Så virker det. Jeg sige mange tak for hjælpen :-)
Avatar billede majbom Novice
12. juli 2007 - 18:53 #13
selv tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester