Avatar billede webweaver Praktikant
25. februar 2005 - 19:52 Der er 19 kommentarer og
1 løsning

Problemer med validering af form

Hej folkens.

Jeg er ved at lave et community, og er igang med noget profil
oprettelse. Men jeg løber desværre inde i nogle problemer, når
jeg når til validering af formen.

Jeg får denne fejl: Parse error: parse error, unexpected
T_LOGICAL_OR in
/var/www/hotels/.dk/webweaver/html/community/opretbruger.php on
line 95

Min kode ser sådan her ud:

...

$showform = true;

if (isset($_POST['skriv'])) {

$ip = $_SERVER["REMOTE_ADDR"];

$kodeord = $_POST[kodeord];
$kodeord2 = $_POST[kodeord2];

$kodeord_kryp = md5($kodeord);
$kodeord2_kryp = md5($kodeord2);

$birthday = $_POST[birthday1] .' - '. $_POST[birthday2] .' - '.
$_POST[birthday3];

$query = mysql_query("SELECT 1 FROM `Profil` WHERE `brugernavn`
LIKE '{$_POST[brugernavn]}'", $db);

if (mysql_num_rows($query) != 0) or die(mysql_error()); {
echo "<ul><li><p class=\"profilopret_error\">Brugernavnet
<i>", $_POST[brugernavn],"</i> er allerede i
brug.</p></li></ul>";

} elseif ($kodeord_kryp != $kodeord2_kryp) or
die(mysql_error()); {
echo "<ul><li><p class=\"profilopret_error\">De to kodeord er
ikke ens.</p></li></ul>";

$showform = true;

} else {
mysql_query("INSERT INTO Profil (brugernavn, kodeord, kodeord2,
fornavn, efternavn, nickname, birthday, email, mobil, msn, icq,
city, adresse, adresse2, telefon, postnr, gender, land, dato, ip)
VALUES
('$_POST[brugernavn]','$kodeord_kryp','$kodeord2_kryp','$_POST[fo
rnavn]','$_POST[efternavn]','$_POST[nickname]','$birthday','$_POS
T[email]','$_POST[mobil]','$_POST[msn]','$_POST[icq]','$_POST[cit
y]','$_POST[adresse]','$_POST[adresse2]','$_POST[telefon]','$_POS
T[postnr]','$_POST[gender]','$_POST[land]',NOW(),'$ip')") or
die(mysql_error());
echo "<p class=\"text-style\" align=\"center\"><br><br>Du er nu
oprettet i systemet...</p>";

$showform = false;
}
}
if ($showform) {

...

Linie 95 ser sådan her ud: if (mysql_num_rows($query) != 0) or
die(mysql_error()); {

Det skyldes dog ikke den linie der, men den elseif der ligger
nedenunder. Hvis jeg nemlig fjerner den så virker det. Så jeg
tror det er noget med placering af if sætningerne inden i
hinanden jeg er galt med. Håber ihvertfald I kan hjælpe!?

På forhånd tak :o)

Mvh. Lasse Jensen
Avatar billede erikjacobsen Ekspert
25. februar 2005 - 20:01 #1
De to linier

query = mysql_query("SELECT 1 FROM `Profil` WHERE `brugernavn` LIKE '{$_POST[brugernavn]}'", $db);

if (mysql_num_rows($query) != 0) or die(mysql_error()); {

skal være

query = mysql_query("SELECT 1 FROM `Profil` WHERE `brugernavn` LIKE '{$_POST[brugernavn]}'", $db) or die(mysql_error());

if (mysql_num_rows($query) != 0)  {
Avatar billede webweaver Praktikant
25. februar 2005 - 23:59 #2
Ok det virkede at jeg fjernede det. Jeg skulle dog også fjerne "or die'en"
nedenunder... Men der er stadig et problem, fordi det virker ikke. Den
kommer ikke frem med nogen besked, hvis de 2 kodeord ikke er ens. Hvorfor
ikke? Det er kun den som tjekker om brugernavnet er optaget som virker.

På forhånd tak :D

Mvh. Lasse Jensen
Avatar billede henriktha Nybegynder
26. februar 2005 - 00:44 #3
du kan ikke bruge or die(mysql_error()); i en elseif statement
Avatar billede webweaver Praktikant
26. februar 2005 - 01:23 #4
Det gør jeg heller ikke.. Jeg har fjernet den igen.. Men det virker ikke. Den melder ikke nogen fejl, men den registrerer ikke korrekt om kodeord 1 og kodeord2 er ens eller ej.
Avatar billede henriktha Nybegynder
26. februar 2005 - 02:02 #5
Nu har du jo også sagt

Hvis (brugernavn er ledigt) { }
Ellers {tjek om koderne er ens)

Mon ikke de skal være if begge 2 ??
Avatar billede webweaver Praktikant
26. februar 2005 - 02:08 #6
Jo det har jeg også prøvet, og det virker på en måde også, men så får man en anden større fejl. Og det er at at profilen bliver oprettet hvis de 2 kodeord er ens, også selvom brugernavnet er optaget. Det er jo kun meningen at profilen skal oprettes hvis alle felter er korrekte. Men det kan jeg ikke få den til. Hvordan skal if sætningerne placeres for at alting bliver nødt til at være korrekt før profilen bliver oprettet.?

Tak for hjælpen endnu en gang :D

Mvh. Lasse Jensen
Avatar billede henriktha Nybegynder
26. februar 2005 - 02:17 #7
Så må noget i stil med:

if($kodeord_kryp == $kodeord2_kryp and mysql_num_rows($query) == 0) {
mysql_query("INSERT INTO Profil (brugernavn, kodeord, kodeord2,
fornavn, efternavn, nickname, birthday, email, mobil, msn, icq,
city, adresse, adresse2, telefon, postnr, gender, land, dato, ip)
VALUES
('$_POST[brugernavn]','$kodeord_kryp','$kodeord2_kryp','$_POST[fo
rnavn]','$_POST[efternavn]','$_POST[nickname]','$birthday','$_POS
T[email]','$_POST[mobil]','$_POST[msn]','$_POST[icq]','$_POST[cit
y]','$_POST[adresse]','$_POST[adresse2]','$_POST[telefon]','$_POS
T[postnr]','$_POST[gender]','$_POST[land]',NOW(),'$ip')") or
die(mysql_error());
echo "<p class=\"text-style\" align=\"center\"><br><br>Du er nu
oprettet i systemet...</p>";

$showform = false;
}

kunne bruges... kan ikke rigtig overskue din kode, den er lidt rodet ;-)
Avatar billede webweaver Praktikant
26. februar 2005 - 02:22 #8
Ok men så kan jeg bare ikke lige se hvordan jeg kan få 2 forskellige beskeder frem når de står i samme if sætning? Der skal jo komme en bestemt besked hvis brugernavnet er optaget, og en anden hvis kodeord ikke er ens...
Avatar billede henriktha Nybegynder
26. februar 2005 - 02:28 #9
Det er da ikke den samme if sætning, men 2 forskellige...

$query = mysql_query("SELECT * FROM Profil WHERE brugernavn = '$_POST[brugernavn]', $db);
$antal = mysql_num_rows($query);

if ($antal != 0) {
    echo "<ul><li><p class=\"profilopret_error\">Brugernavnet <i>", $_POST[brugernavn],"</i> er allerede i brug.</p></li></ul>";
    $showform = true;
  }
 
if ($kodeord_kryp != $kodeord2_kryp) {
echo "<ul><li><p class=\"profilopret_error\">De to kodeord er ikke ens.</p></li></ul>";
    $showform = true;
}

if($kodeord_kryp != $kodeord2_kryp and $antal == 0) {
    mysql_query("INSERT INTO Profil (brugernavn, kodeord, kodeord2, fornavn, efternavn, nickname, birthday, email, mobil, msn, icq, city, adresse, adresse2, telefon, postnr, gender, land, dato, ip) VALUES ('$_POST[brugernavn]','$kodeord_kryp','$kodeord2_kryp','$_POST[fornavn]','$_POST[efternavn]','$_POST[nickname]','$birthday','$_POST[email]','$_POST[mobil]','$_POST[msn]','$_POST[icq]','$_POST[city]','$_POST[adresse]','$_POST[adresse2]','$_POST[telefon]','$_POST[postnr]','$_POST[gender]','$_POST[land]',NOW(),'$ip')") or
die(mysql_error());
echo "<p class=\"text-style\" align=\"center\"><br><br>Du er nu oprettet i systemet...</p>";

$showform = false;
}
Avatar billede henriktha Nybegynder
26. februar 2005 - 02:29 #10
if($kodeord_kryp != $kodeord2_kryp and $antal == 0) {

skulle jo selvfølgelig være

if($kodeord_kryp == $kodeord2_kryp and $antal == 0) {
Avatar billede webweaver Praktikant
26. februar 2005 - 02:37 #11
Ahh nu begynder jeg at kunne følge dig :D Det kigger jeg lige på det der. Tak skal du have.
Avatar billede henriktha Nybegynder
26. februar 2005 - 02:47 #12
Du skulle kunne bruge det her....

if ($antal != 0) {
    echo "<ul><li><p class=\"profilopret_error\">Brugernavnet <i>", $_POST[brugernavn],"</i> er allerede i brug.</p></li></ul>";
    $showform = true;
  }
 
elseif ($kodeord_kryp != $kodeord2_kryp) {
echo "<ul><li><p class=\"profilopret_error\">De to kodeord er ikke ens.</p></li></ul>";
    $showform = true;
}               else {
    mysql_query("INSERT INTO Profil (brugernavn, kodeord, kodeord2, fornavn, efternavn,                    nickname, birthday, email, mobil, msn, icq, city, adresse, adresse2, telefon,                                  postnr, gender, land, dato, ip) VALUES                                                                            
    ('$_POST[brugernavn]','$kodeord_kryp','$kodeord2_kryp','$_POST[fornavn]','$_POST[efternavn]',            '$_POST[nickname]','$birthday','$_POST[email]','$_POST[mobil]','$_POST[msn]','$_POST[icq]' ,'$_POST[city]','$_POST[adresse]','$_POST[adresse2]','$_POST[telefon]','$_POST[postnr]',  '$_POST[gender]','$_POST[land]',NOW(),'$ip') or die(mysql_error());
     
      echo "<p class=\"text-style\" align=\"center\"><br><br>Du er nu oprettet i systemet...</p>";
                $showform = false;

                  }

Du skal så bare bruge den $antal variabel til mysql_num_rows jeg skrev før..

Koden ser lidt rodet ud, har fundet ud af at det ik er dig men eksperten der roder ;-)
Avatar billede webweaver Praktikant
26. februar 2005 - 17:05 #13
Hehe, jeg det er eksperten som desværre roder tingene lidt sammen. Hehe..

Har lige et spørgsmål, er der nogen forskelle ved at bruge koden bestående af if sætningerne og den kode med if, elseif og else? Det giver samme resultat ikke?
Avatar billede henriktha Nybegynder
26. februar 2005 - 17:08 #14
Nej, der hvor du bruger 2 if sætninger vil den skrive hvis:
brugernavnet er optaget og hvis koderne ikke er ens.

Med den anden vil den skrive hvis:
Brugernavnet er optaget, men IKKE om koderne er ens eller ej !
Avatar billede henriktha Nybegynder
26. februar 2005 - 17:09 #15
Prøver lige igen.

Den vil ikke skrive at koderne ikke er ens hvis brugernavnet er optaget.. ellers vil den self.
Avatar billede webweaver Praktikant
26. februar 2005 - 17:57 #16
Ok på den måde. Så skal jeg bruge den med 2 if sætninger, fordi jeg vil gerne have den til at skrive begge fejl på samme tid, hvis der altså er fejl.
Avatar billede henriktha Nybegynder
26. februar 2005 - 22:50 #17
Yep det ville jeg nu også selv gøre, men nu havde du jo brugt den anden løsning først.
Avatar billede webweaver Praktikant
27. februar 2005 - 00:00 #18
Ja ok hehe, jeg forstår dig godt. Men det var bare fordi jeg ikke kunne få det til at virke med en ordinær if sætning først, og så måtte jeg jo prøve noget andet.. :P
Avatar billede henriktha Nybegynder
27. februar 2005 - 00:16 #19
Det er altid noget det virker nu ;-)

Forøvrigt rimeligt godt design du har på din side :-)

Takker for points !!
Avatar billede webweaver Praktikant
27. februar 2005 - 00:52 #20
Mange tak :D Altid godt med ros! Og angående points, så var det så lidt! :P
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