Avatar billede human Nybegynder
23. november 2003 - 22:13 Der er 25 kommentarer og
1 løsning

Tjekke for 2 ting.

Ser ud til jeg var for hurtig før.

Hvis imei nummeret findes i x8unit skal den sige $error.
Hvis imei nummeret IKKE findes i imei_auth skal den sige $error.

Den tjekker rigtigt i imei_auth, men ikke i x8unit. Hvis imei nummeret findes i x8unit, går den alligevel videre, den skal stoppe og sige $error.

Koden:

if(isset($_POST['imei'])){
  if(trim($_POST['imei']) == '' || !preg_match('/^\d{15}$/',$_POST['imei'])) $errors['imei'] = "<font color='#FF3300'>The imei has to be 15 digits.</font>";
  else{
$result = mysql_query("SELECT imei FROM x8unit WHERE imei='$imei'") or die(mysql_error());
$sql = "SELECT imei FROM imei_auth WHERE imei='$imei'";
$res = mysql_query($sql) or die(mysql_error());
$imeiok=true;
while ($row=mysql_fetch_array($result)) {
    if($row['imei']==$imei) { $imeiok = false; }
}
mysql_free_result($result);
    if($imeiok) {
    if(mysql_num_rows($res) == 0){

$errors['imei'] = "<font color='#FF3300'>IMEI entered is not authorised.</font>";
}else{
      $fejl--;
}
}
}
}
}
else $errors['imei'] = "*";
Avatar billede jakoba Nybegynder
23. november 2003 - 22:19 #1
der er alt for mange '}' tegn til at den else linie tilsidst kan høre til nogen af de if-sætninger du giver.

Lav ordentlige indrykninger i din php kode.
Avatar billede human Nybegynder
23. november 2003 - 22:30 #2
Hvis jeg fjener en af dem får jeg unexpected $end in line 532. Hvilket er unden for </html>.

Andre forslag?
Avatar billede human Nybegynder
23. november 2003 - 22:42 #3
Så lad mig spørge på en anden måde. Hvordan laver jeg det tjek i imei_auth. Prøv om du kan infiltrere det i dette. Måske lidt nemmere da jeg ved dette virker korrekt.

if(isset($_POST['imei'])){
  if(trim($_POST['imei']) == '' || !preg_match('/^\d{15}$/',$_POST['imei'])) $errors['imei'] = "<font color='#FF3300'>The imei has to be 15 digits.</font>";
  else{
$result = mysql_query("SELECT imei FROM x8unit WHERE imei='$imei'") or die(mysql_error());
$imeiok=true;
while ($row=mysql_fetch_array($result)) {
    if($row['imei']==$imei) { $imeiok = false; }
}
mysql_free_result($result);
    if(!$imeiok) {
$errors['imei'] = "<font color='#FF3300'>The imei number you entered allready excists in our database.</font>";
}else{
      $fejl--;
}
}
}
else $errors['imei'] = "*";
Avatar billede jakoba Nybegynder
23. november 2003 - 23:13 #4
Det koster lidt tid og besvær at lave gode indrykninger i sin programmer.

Men hvis man bruger den tid det tager at lave og løbende opdatere siden indrykninger, opnår man nogle fordele, en af de væsentlige fordele man opnår er at man ikke risikerer at glemme hvilken if- betingelse en given else hører sammen med.
Det ser meget ud til at det er det der er fejlen her. Til at du, hvis du havde de indrykninger, hurtigt selv kunne finde fejlen.

Det er forståeligt at du gerne vil 'spare den tid og det besvær'.

Men hvis du er for doven til at lave indrykninger, hvorfor skulle så jeg bruge min tid på at lave dem for dig ?

mvh JakobA
Avatar billede human Nybegynder
23. november 2003 - 23:19 #5
Behøver du så sandelig heller ikke hr. Men jeg ved det ikke er et problem med {}. Der er startede { du ikke kan se. Måske skulle jeg have skrevet det. Men regnede ikke med det ville være så vigtigt at du kunne se dem alle.
Avatar billede detox Nybegynder
24. november 2003 - 01:06 #6
Det vil være nemmere hvis du tjekkede sådan her:

$result = mysql_query("SELECT imei FROM x8unit WHERE imei='$imei'") or die(mysql_error());
if (mysql_num_rows($result)>0) // Den findes i forvejen!

men måske skal du bruge $_POST['imei'] istedet, li'som du gør ovenfor.
Avatar billede human Nybegynder
24. november 2003 - 01:09 #7
Ja okay, men nu fungere tjeket jo i x8unit tabellen jo fint. Så ville ikke rode i det. Problemet kommer når jeg skal tjekke i imei_auth. Du har ikke et forslag vel?
Avatar billede human Nybegynder
24. november 2003 - 01:10 #8
Du må self ændre hvad du vil :o)
Avatar billede detox Nybegynder
24. november 2003 - 01:17 #9
Tjah, måske skal du prøve at udskrive $fejl og se om den er hvad du forventer:

}else{
      $fejl--;
}
echo $fejl;//debug
exit;//debug
}
Avatar billede human Nybegynder
24. november 2003 - 01:28 #10
Jamen fejl indeholder jo bare 9. Det er sat øverst i scriptet, og der bliver ikke pillet ved det. Det er nok $error der skal udskrives. Men der står ikke noget hvis jeg gør det.
Avatar billede human Nybegynder
24. november 2003 - 01:31 #11
Det ser således ud uden nogen database tjek:

$errors = array();
$fejl = 9;
if(isset($_POST['imei'])){
  if(trim($_POST['imei']) == '' || !preg_match('/^\d{15}$/',$_POST['imei'])) $errors['imei'] = "<font color='#FF3300'>The imei has to be 15 digits.</font>";

else $fejl--;

}
else $errors['imei'] = "*";

#resten af checksne kommer her nede (på andre felter, derfor i et array $error.

Det er sådan set bare i overstående de 2 tjek skal foregå.
Avatar billede human Nybegynder
24. november 2003 - 01:41 #12
jeg har gjort det du sagde. Det ser nu således ud:

if(isset($_POST['imei'])){
  if(trim($_POST['imei']) == '' || !preg_match('/^\d{15}$/',$_POST['imei'])) $errors['imei'] = "<font color='#FF3300'>The imei has to be 15 digits.</font>";
else{
$result = mysql_query("SELECT imei FROM x8unit WHERE imei='$imei'") or die(mysql_error());
if (mysql_num_rows($result)>0) {
    $errors['imei'] = "<font color='#FF3300'>The IMEI you entered allready excists in our database.</font>";
}else{
$result2 = mysql_query("SELECT imei FROM imei_auth WHERE imei='$imei'") or die(mysql_error());
if (mysql_num_rows($result2)>1) {
    $errors['imei'] = "<font color='#FF3300'>IMEI entered is not authorised</font>";
}else $fejl--;
}
}
}
else $errors['imei'] = "*";

Ved nr. 2 tjek har jeg sat 1 istedet for 0, da den skal gøre det modsatte, går udfra det er rigtigt.
Men når jeg indtaster et imei der ikke står i imei_auth, siger den alligevel ok for det og kommer ikke med error msg. Det første tjek virker perfekt.
Avatar billede human Nybegynder
24. november 2003 - 01:42 #13
50 point istedet.
Avatar billede detox Nybegynder
24. november 2003 - 01:44 #14
Så skal den nok se sådan ud istedet:

if (mysql_num_rows($result2) != 1) {
Avatar billede detox Nybegynder
24. november 2003 - 01:45 #15
Når du udfører: $fejl--; bliver fejl en mindre.
Avatar billede human Nybegynder
24. november 2003 - 01:46 #16
Hmm, legede lige lidt.

if (mysql_num_rows($result2)>1) {
Lavede jeg om til:
if (mysql_num_rows($result2)<1) {

Hvad er det lige jeg har lavet? For det ser ud til at virke perfekt. Bedrager mine øjne mig eller kan det passe?
Avatar billede detox Nybegynder
24. november 2003 - 01:48 #17
>1 der er flere en 1 række
<1 der er 0 rækker
!= 1 der er ikke præcis en række, hvilket der burde være.
Avatar billede human Nybegynder
24. november 2003 - 01:51 #18
Dvs. Det godt kan passe det virker med <1 for at tjekke om der er mindst 1 række der stemmer overens med det indtastede?

og >1 for at teste om der nul rækker der stemmer overens med det indtastede.
?
Avatar billede detox Nybegynder
24. november 2003 - 01:51 #19
Prøv for en ordens skyld at tilføje:

if(isset($_POST['imei'])){
  $imei = $_POST['imei'];
Avatar billede detox Nybegynder
24. november 2003 - 01:52 #20
Nej, <1 betyder mindre en 1 (altså 0).
Avatar billede human Nybegynder
24. november 2003 - 01:56 #21
Okay, det er tilføjet, og scriptet fungerer stadig ligeså godt.

Hvordan i alverden kan det forklares at scriptet virker nøjagtig som det skal, når der bliver gjort noget forkert?
Avatar billede detox Nybegynder
24. november 2003 - 01:56 #22
>0 betyder større en nul, altså mindst en række.
Avatar billede detox Nybegynder
24. november 2003 - 01:59 #23
Du kan jo tjekke hvor mange, om nogen, rækker den finder med:

$result2 = mysql_query("SELECT imei FROM imei_auth WHERE imei='$imei'") or die(mysql_error());
echo mysql_num_rows($result2);
exit;
Avatar billede human Nybegynder
24. november 2003 - 02:02 #24
Tjah.. Så virker det altså som det skal. Den udskriver 1 når det er et imei nummer der findes, og udskriver 0 når det ikke findes.

Du skal have mange tak for hjælpen!

Og så synes jeg også jeg vil give dig engang ros for du taler i et sprog man kan forstå, og bliver aldrig forvirret over dine kommentarer, og gør man bliver du ikke irriteret over man spørger om det samme igen. Du er en vild gut er du.

Smid endnu et svar detox :o)
Avatar billede detox Nybegynder
24. november 2003 - 02:05 #25
Ok, jeg siger tak rosen c",)
Avatar billede detox Nybegynder
24. november 2003 - 02:05 #26
hehe for rosen, jeg blev vidst helt rørt der ;o)
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