een php array uit mysql door javascript laten controleren

Status
Niet open voor verdere reacties.

ddayoverlord

Gebruiker
Lid geworden
22 dec 2007
Berichten
15
Beste lezers,

Ik ben nog steeds bezig met het formulier uit de vorige posting:
http://www.helpmij.nl/forum/showthread.php?t=331392
Aangezien ik zo goed geholpen ben de vorige keer, nu weer een volgende uitdaging;

Wat is de bedoeling:
Een aantal velden wordt ingevuld en gecontroleerd voor de post via javascript.
Nu is een van die velden een veld dat niet dubbel in de database mag voorkomen: UserName
Mijn idee was om deze controle in de javascript check functie op te nemen.
Ik weet dat php en javascript niet op hetzelfde niveau werken maar ik dacht dat iets als onderstaand wel kon;

bij het openen van de pagina een php array laten vullen vanuit de database bv: $UserNameArray
En in het javascript de geposte UserName laten vergelijken met de array en kijken of deze bestaat.

Nu lijkt het mij logisch, maar kan dit??
En nog beter... hoe dan?

Graag jullie antwoord hierop.
Groetjes,
ddayoverlord



ps: Ik kan het script wel posten hoor, maar ik wil eerst een weten of het uberaupt kan :)
 
Zoals je zelf al aangeeft kan je dat eigenlijk beter op PHP-niveau (server-sided) doen. Maar als je echt wil kan het ook vanuit een javascript (client-sided).
Je moet er dan voor zorgen dat PHP in het Javascript-gedeelte een array aanmaakt en vult met de namen uit je database. Nadien kan je dan kijken of de (door de gebruiker) ingevulde naam reeds voorkomt in die array...
Ik kijk even of ik al zo'n voorbeeld heb, en anders maak ik er vlug eentje;)

Groetjes,
JHx.
 
Hoi THx

Ik weet dat server sided beter is.
Maar..... het gaat hier om een intern systeem, niet publiekelijk.
Daarnaast is het met PHP dat je toch alle variabelen moet opvangen om ze vervolgens weer in de ingevulde velden te plaatsen, want die zijn dan weer leeg toch?
Maar ook het laten veranderen van de achtergrondkleur van de velden en de focus() is met javascript allemaal in een script te regelen.

Ik ben nog niet zo goed in PHP of JAVASCRIPT maar ik wil het wel graag leren.
Als je een voorbeeld heb liggen.... graag.
enne ..... wederom bedankt voor je antwoord!

ddayoverlord
 
Op welke manier haal je de gegevens uit je database?
Ik vermoed dat je dat met PHP/MySQL doet...
 
Yep,

"Select UserName FROM users";

dday-overlord

Ik ben bezig met een voorbeeldje, en ik zal het integreren in de code van je vorige vraag!
NU moet ik er echter ff vandoor... ben terug vanavond rond 22.00... doei ;)
 
Maar er is ook (eventjes nog) een vandaag :D
Dit is wat ik ervan gemaakt heb...

PHP:
<?php 
  $dbhost="localhost";
  $dbuser="jou_gebruikersnaam";
  $dbpass="jou_paswoord";
  $db="jou_database";
  $mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
  $sql="SELECT UserName FROM users;";
  $res=mysql_db_query("$db","$sql",$mysql_id);
  $aantal_lijnen=mysql_num_rows($res);
?>
<html>
  <head>
    <script language="javascript">
      function checkform(form){
        var sBericht="";
        var sNamen=new Array(""<?php while($row=mysql_fetch_row($res)){echo ",\"" . $row[0] . "\"";} ?>);
        var b0=true;
        var b1=true;
        var b2=true;
        form.txtKNVB.style.backgroundColor='#99FF99';
        var sKNVB=form.txtKNVB.value.toUpperCase();
        form.txtKNVB.value = sKNVB;
        if(sKNVB !== "N.V.T."){
          rExp = /^[A-Z0-9]{7,10}$/;
          if(!sKNVB.match(rExp)){
            sBericht="U heeft het veld KNVBNummer niet juist ingevuld.\nDit is een combinatie van minimaal 7 hoofdletters en cijfers\n";
            form.txtKNVB.style.backgroundColor='#FF8080';
            b1=false;
          }
       	}
        form.txtNaam.style.backgroundColor='#99FF99';
       	var sNaam=form.txtNaam.value
       	if(sNaam==""){
       	  sBericht=sBericht+"Vul de naam in!";
       	  b2=false;
          form.txtNaam.style.backgroundColor='#FF8080';
       	}else{
          for(i=1;i<=<?php echo $aantal_lijnen; ?>;i++){
            if(sNamen[i]==sNaam){
              b2=false;
              sBericht=sBericht+sNaam+" staat reeds in de database...";
              form.txtNaam.style.backgroundColor='#FF8080';
            }
          }
        }
       	b0=b1 && b2
       	if(!b0){alert(sBericht);}
       	return b0;
      }
</script>
  </head>
  <body>
    <form name='fAddUser' action='AddUser.php' method='post' onsubmit="return checkform(this)" enctype="multipart/form-data">
      <table>
        <tr>
          <td align='right'>KNVB-Nummer:</td>
          <td><input type='text' name='txtKNVB' value='N.V.T.' style='background-color:#FFFFFF'></td>
        </tr>
        <tr>
          <td align='right'>Naam:</td>
          <td><input type='text' name='txtNaam' style='background-color:#FFFFFF'></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td align='center'><input type='submit' value='Verzend'></td>
        </tr>
      </table>
    </form>
  </body>
</html>
<?php
  mysql_close($mysql_id);
?>
Ik ben wel verder gegaan op mijn eigen code... Niet omdat die van jou niet goed zou zijn... maar omdat ik beter (vlugger) mijn eigen code begrijp
Verder heb ik de kleur voor "OK" veranderd naar groen...
De kontrole op "username" is :
reeds bestaand of niet ingevuld: -> rood, anders groen
 
Merk wel op: de waarden voor "UserName" kunnen door iedereen gezien worden door het opvragen van de broncode van de pagina!
Morgen (jaaaah... die Slowaken hier hebben mij ondertussen beetje TE zat gemaakt) laat ik je wat code zien waarmee dat niet mogelijk is!
 
Hey Die JHx,

Ik heb je code 1op1 overgenomen en het werkt.
Helemaal TOP!!

Maar als ik de de code wil implementeren in het script zoals ik het heb... dan gaat het fout.

Dat ligt volgens mij aan een aantal dingen;

1. Het hele js staat in een externe file die opgeroepen wordt in de pagina.
een workarround zou kunnen zijn dat we alleen de usercheck in de originele pagina zetten, maar kan ik die dan nog apart aanroepen via een OnChange of i.d.??
Dat heb ik geprobeerd, maar wil niet lukken.


Ik heb zitten testen en de array wordt wel gevuld maar er wordt niet gecontroleerd.
Naast de benodogde database gegevens heb ik het nu zoals onderstaande in pagina staan (alleen het Username deel).
Ik heb ook de NAME tag van het veld aangepast zoals het moet worden (UserName)

Als ik in de FORM tag zet OnSubmit"CheckUser(this);"
Dan werkt de functie wel, alleen zijn dan alle ander checks uitgeschakeld die in de externe file staan.... grrr:confused:

Ik hoop dat ik je er nog eens mee mag lastigvallen.....:rolleyes:

Groetjes,
ddayoverlord

HTML:
<script language="javascript">

function CheckUser() {


		var sBericht="";
        var sNamen=new Array(""<?php while($row=mysql_fetch_row($res)){echo ",\"" . $row[0] . "\"";} ?>);
        var b0=true;
        var b1=true;
        var b2=true;

        form.UserName.style.backgroundColor='#99FF99';
           var sNaam=form.UserName.value
           if(sNaam==""){
             sBericht=sBericht+"Vul de naam in!";
             b2=false;
          form.UserName.style.backgroundColor='#FF8080';
           }
		   else{
          for(i=1;i<=<?php echo $aantal_lijnen; ?>;i++){
            if(sNamen[i]==sNaam){
              b2=false;
              sBericht=sBericht+sNaam+" staat reeds in de database...";
              form.UserName.style.backgroundColor='#FF8080';
            }
          }
        }
           b0=b1 && b2
           if(!b0){alert(sBericht);}
           return b0;

}
</script>
 
Hey iedereen,

Het werkt bijna helemaal.
Alle velden worden door een apart js bestand gecontroleerd zoals beschreven in de voorgaande posts.
Alleen het veld NUserName wordt door een onchange gecontrolleerd in de pagina zelf ivm de benodigde php array.

Alleen is er nog 1 klein dingetje.
Als een gebruiker bestaat geeft ie dat netjes aan met een alert, en als ik daar op klik dan focus'd ie ook netjes op het juiste veld ter correctie.
Maar..... als de alert in beeld is en ik druk op ENTER dan post ie gewoon wel.
Mede omdat NUserName het laatst gecontrolleerd veld.
Nu zou ik het veld een plaats eerder kunnen zetten zodat eerst het laatste veld gecontrolleerd wordt, maar dat wil ik eigenlijk niet.
Wie kan mij hierbij even de juiste kant op sturen:):)

Ik vermoed dat het een extra bracket moet zijn ergens, maar mij pogingen hebben geen vruchten afgeworpen.

Groetjes,
ddayoverlord

Het script is als volgt:

HTML:
<script language="javascript">
function CheckUser(form){

		// checking username in database

		var sBericht="";
        var sNamen=new Array(""<?php while($row=mysql_fetch_row($res)){echo ",\"" . $row[0] . "\"";} ?>);
        var b0=true;
        var b1=true;
        var b2=true;

 			form.NUserName.style.backgroundColor='#fee3ad';

			 var sNaam=form.NUserName.value;

           //var sNaam=form.NUserName.value;
		   if(sNaam==""){
             sBericht=sBericht+"Vul de naam in!";
             b2=false;
          form.NUserName.style.backgroundColor='#FF8080';
           }else{
          for(i=1;i<=<?php echo $aantal_lijnen; ?>;i++){
            if(sNamen[i]==sNaam){
              b2=false;
              sBericht="De gebruikersnaam "+sBericht+sNaam+" bestaat reeds.\nKies een andere naaam.";
              form.NUserName.style.backgroundColor='#FF8080';
            }
          }
        }
           b0=b1 && b2
           if(!b0){alert(sBericht);}
           return b0;
      }
</script>
 
Hoi ddayoverlord,

Ik ben (na het uitzweten van een behoorlijke kater) toch weer even aan het knutselen geslagen.
Ik heb het deze keer wel behoorlijk over een andere boeg gegooid... De kontrole gebeurt nu VOLLEDIG in PHP !
Neem HIER eens een kijkje, en test naar hartelust! Vraag ook eens de broncode van de pagina op... Je zal zien dat er niets te zien is :D:D:D
De foutmelding komt nu niet meer in een msgbox, maar als tekst onder de "verzend"-knop.
De kleuren van de tekstvakken worden aangepast als voordien.
Enkel het "focussen" van de foutieve tekstvakken moet ik nog eens bekijken...
Oh ja... ook dit nog... de controle van het KNVB-nummer is nog niet helemaal juist.
Minstens 7, maximum 10 : -> oké
Enkel letters en cijfers : -> oké voor de 7 eerste karakters, klopt nog niet voor de laatste 3 karakters... dit werkt blijkbaar een beetje anders in PHP dan in javascript.
PHP:
<?php 
  $dbhost="localhost";
  $dbuser="jou_gebruikersnaam";
  $dbpass="jou_paswoord";
  $db="jou_database";
  $mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
?>
<html>
  <head>
  </head>
  <body>
<?php
  $b0=false;
  $b1=true;
  $b2=true;
  $sBericht="";
  $sKNVB=strtoupper($_POST['txtKNVB']);
  $sUserName=$_POST['txtUserName'];
  $bVerzonden=isset($_POST["submit"]);
  if($bVerzonden){
    if($sKNVB == ""){$sKNVB="N.V.T.";}
    if($sKNVB !== "N.V.T."){
      $sRegExp = "/[A-Z0-9]{7,10}/";
      if(!(preg_match($sRegExp,$sKNVB) && strlen($sKNVB)<11)){
        $b1=false;
        $sBericht="Het KNVB-nummer is niet juist ingevuld.<br>Minstens 7 en maximum 10 karakters,<br>en enkel letters of cijfers.";
      }
    }
    $sql="SELECT UserName FROM users WHERE UserName='" . $sUserName . "';";
    $res=mysql_db_query("$db","$sql",$mysql_id);
    $iAantal=mysql_num_rows($res);
    if($iAantal>=1){
      $b2=false;
      if($sBericht!==""){$sBericht="$sBericht<br>";}
      $sBericht=$sBericht . "De gebruikersnaam staat reeds in de database.";
    }
    $b0=$b1 && $b2;
    if($b0){
      $sql="INSERT INTO users (UserName,KNVBNummer) VALUES ('$sUserName','$sKNVB');";
      $res=mysql_db_query("$db","$sql",$mysql_id);
?>
      Volgende gegevens werden in de database opgenomen:<br>
      <table>
        <tr>
          <td align='right'>KNVB-Nummer:</td>
          <td><?php echo "$sKNVB"; ?></td>
        </tr>
        <tr>
          <td align='right'>Naam:</td>
          <td><?php echo "$sUserName"; ?></td>
        </tr>
      </table>
      Klik <a href='AddUser.php'>HIER</a> om nog een gebruiker toe te voegen...
<?php      
      exit;
    }
  } ?>
    <form name='fAddUser' action='AddUser.php' method='post'>
      <table>
        <tr>
          <td align='right'>
            KNVB-Nummer:
          </td>
          <td>
            <input type='text' name='txtKNVB' value='<?php if($bVerzonden){echo("$sKNVB");}else{echo("N.V.T.");} ?>' style='background-color:#<?php if($bVerzonden){if($b1){echo("99FF99");}else{echo("FF8080");}}else{echo("FFFFFF");} ?>'>
          </td>
        </tr>
        <tr>
          <td align='right'>
            Naam:
          </td>
          <td>
            <input type='text' name='txtUserName' value='<?php if($bVerzonden){echo("$sUserName");} ?>' style='background-color:#<?php if($bVerzonden){if($b2){echo("99FF99");}else{echo("FF8080");}}else{echo("FFFFFF");} ?>'>
          </td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td align='center'><input type='submit' name='submit' value='Verzend'></td>
        </tr>
      </table>
    </form>
<?php
  if($sBericht!==""){
    $sBericht="Fout!<br>$sBericht";
    echo "$sBericht"; 
  }
  mysql_close($mysql_id);
?>
  </body>
</html>
Bekijk het maar eens... Als je toch liever op de javascript-manier verder werkt, wil ik ook gerust daar eens opnieuw naar kijken...

Groetjes,
JHx.
 
PS: aan de "layout" en "opmaak" kan natuurlijk ook nog heel wat verbeterd worden...:rolleyes:
 
Hey JHx,

Toppie man! complimenten.
Mijn voorkeur gaat ook uit naar PHP Only, maar soms is javascript "makkelijker".
Ik denk dat ik jouw voorbeeld ga volgen en hele script in PHP ga rewriten.
Zal een hele klus worden want er staan nogal wat velden in de form.
Text, Selects en radio's, dus nog heel wat te klussen.
Maar zoals gezegd, liever alles in PHP dan een mix van want dat blijven workarounds.

Ik wil graag even zeggen dat ik nieuw ben op dit forum, maar ik ben aangenaam verrast met de hulp die ik krijg, echt klasse :thumb:

ps: ik stuur je nog wel ff een pm met wat ander off-topic zaken.

Groetjes en vele malen dank!!! :)
ddayoverlord
 
Laatst bewerkt:
Ik heb gezien dat je de pagina bekeken en geteste hebt... en daardoor heb ik gezien dat er nog een foutje in het script zat!
Als de gebruikersnaam niet ingevuld werd, slaat hij toch de record op... Ik vermoed dat zoiets niet de bedoeling is:rolleyes:
Hieronder een verbeterde versie
PHP:
<?php 
  $dbhost="localhost";
  $dbuser="jou_gebruikersnaam";
  $dbpass="jou_paswoord";
  $db="jou_database";
  $mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
?>
<html>
  <head>
  </head>
  <body>
<?php
  $b0=false;
  $b1=true;
  $b2=true;
  $sBericht="";
  $sKNVB=strtoupper($_POST['txtKNVB']);
  $sUserName=$_POST['txtUserName'];
  $bVerzonden=isset($_POST["submit"]);
  if($bVerzonden){
    if($sKNVB == ""){$sKNVB="N.V.T.";}
    if($sKNVB !== "N.V.T."){
      $sRegExp = "/[A-Z0-9]{7,10}/";
      if(!(preg_match($sRegExp,$sKNVB) && strlen($sKNVB)<11)){
        $b1=false;
        $sBericht="Het KNVB-nummer is niet juist ingevuld.<br>Minstens 7 en maximum 10 karakters,<br>en enkel letters of cijfers.";
      }
    }
    if($sUserName==""){
      $b2=false;
      if($sBericht!==""){$sBericht="$sBericht<br>";}
      $sBericht=$sBericht . "De gebruikersnaam werd niet ingevuld";
    }else{
      $sql="SELECT UserName FROM users WHERE UserName='" . $sUserName . "';";
      $res=mysql_db_query("$db","$sql",$mysql_id);
      $iAantal=mysql_num_rows($res);
      if($iAantal>=1){
        $b2=false;
        if($sBericht!==""){$sBericht="$sBericht<br>";}
         $sBericht=$sBericht . "De gebruikersnaam staat reeds in de database.";
      }  
    }
    $b0=$b1 && $b2;
    if($b0){
      $sql="INSERT INTO users (UserName,KNVBNummer) VALUES ('$sUserName','$sKNVB');";
      $res=mysql_db_query("$db","$sql",$mysql_id);
?>
      Volgende gegevens werden in de database opgenomen:<br>
      <table>
        <tr>
          <td align='right'>KNVB-Nummer:</td>
          <td><?php echo "$sKNVB"; ?></td>
        </tr>
        <tr>
          <td align='right'>Naam:</td>
          <td><?php echo "$sUserName"; ?></td>
        </tr>
      </table>
      Klik <a href='AddUser.php'>HIER</a> om nog een gebruiker toe te voegen...
<?php      
      exit;
    }
  } ?>
    <form name='fAddUser' action='AddUser.php' method='post'>
      <table>
        <tr>
          <td align='right'>
            KNVB-Nummer:
          </td>
          <td>
            <input type='text' name='txtKNVB' value='<?php if($bVerzonden){echo("$sKNVB");}else{echo("N.V.T.");} ?>' style='background-color:#<?php if($bVerzonden){if($b1){echo("99FF99");}else{echo("FF8080");}}else{echo("FFFFFF");} ?>'>
          </td>
        </tr>
        <tr>
          <td align='right'>
            Naam:
          </td>
          <td>
            <input type='text' name='txtUserName' value='<?php if($bVerzonden){echo("$sUserName");} ?>' style='background-color:#<?php if($bVerzonden){if($b2){echo("99FF99");}else{echo("FF8080");}}else{echo("FFFFFF");} ?>'>
          </td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td align='center'><input type='submit' name='submit' value='Verzend'></td>
        </tr>
      </table>
    </form>
<?php
  if($sBericht!==""){
    $sBericht="Fout!<br>$sBericht";
    echo "$sBericht"; 
  }
?>
  </body>
</html>
<?php
  mysql_close($mysql_id);
?>
 
JHX,

Had ik al gemerkt ja, maar mooi dat je het nu opgelost hebt. :p
Even een andere vraag;
Waarom programmeer jij al je variabelen met een kleine s ervoor?
$sVariabelen

of is dat een domme vraag... lol

ddayoverlord
 
Domme vragen bestaan niet!!! ;)
Da's gewoon een gewoonte... Die letter geeft aan welk soort inhoud de variabele heeft.

s = string
i = integer
l = long
d= datum/tijd
o = object
enz...

Het is dus zeker niet noodzakelijk, maar het help soms wel om een aantal domme vergissingen te vermijden :thumb:
 
Duidelijk!
Erg duidelijk mag ik wel zeggen.

Ik ga eens beginnen met het ombouwen van het script.
Maar ik vrees dat we elkaar hierover nog gaan spreken....:D:D:D

Groetjes,
ddayoverlord
 
Nog even een opmerking: dit voorbeeld is eigenlijk maar "minimale" code... Er worden bijvoorbeeld alleen DIE kontroles uitgevoerd waar het hier net om gaat... verder niets.
Eigenlijk moet je ook nog kontroleren of een geldige record die je wel degelijk wou opslaan, ook effectief opgeslagen is! Als dat om wat voor reden ook niet gebeurd zou zijn, zal deze voorbeeldcode gewoon zeggen dat dat wel gebeurd is.

PS: graag gedaan hoor.... 't is een hobby gelijk een andere hé
 
Ik heb het "Regular Expression"-probleempje opgelost met een zeer geniepig truukje:D
Het viel mij op dat het quantifier-gedeelte niet goed werkte...

Vervang
PHP:
    if($sKNVB !== "N.V.T."){
      $sRegExp = "/[A-Z0-9]{7,10}/";
      if(!(preg_match($sRegExp,$sKNVB) && strlen($sKNVB)<11)){
        $b1=false;
door
PHP:
    if($sKNVB !== "N.V.T."){
      $iLen=strlen($sKNVB);
      $sRegExp = "/[A-Z0-9]{" . $iLen . "}/";
      if(!(preg_match($sRegExp,$sKNVB) && $iLen>6 && $iLen<11)){
        $b1=false;
en het werkt :thumb:
Ik vervang dus het gedeelte {7,10} door de juiste lengte van de string. Zo zal hij altijd de volledige string kontroleren op geldigheid.
Verder kijk ik of die minstens 7 en maximum 10 karakters telt
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan