login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Undefined index: a in regel 3 Undefined index: id in regel 12

Offline Radio247 - 05/01/2014 18:50
Avatar van Radio247Lid Ik gebruik onderstaand script om onderdelen aan of uit te schakelen m.b.v. een checkbox dus in de mysql op Nee of Ja te zetten, maar krijg bovenstaande foutmelding sinds het gebruik van
+ Apache 2.2.21
+ MySQL 5.5.16 (Community Server)
+ PHP 5.3.8 (VC9 X86 32bit thread safe) + PEAR
Helaas kom ik er niet zelf uit om op te lossen...Wie kan mij helpen?

  1. /* CONTROLE EN UPDATEN VAN RECORDS */
  2.  
  3. if($_GET[[b]'a'[/b]] == "N")
  4. {
  5. $upd = "UPDATE `cpl_agenda` SET `active` = 'Nee' WHERE `agid` = '$_GET[id]'";
  6. $res = mysql_query($upd);
  7. }
  8.  
  9. else
  10. {
  11. $upd = "UPDATE `cpl_agenda` SET `active` = 'Ja' WHERE `agid` = '$_GET[id]'";
  12. $res = mysql_query($upd);
  13. }
  14.  
  15. /* EINDE CONTROLE */
  16.  
  17.  
  18. /* Onderstaand script is de checkbox */
  19.  
  20. if($AGactive[$i] == "Ja")
  21. { $actief = "<input type=\"checkbox\" onClick=\"window.location = 'ag_Review.php?lg=$_GET[lg]&a=N&id=$AGid[$i]' ;\" checked>"; }
  22. else
  23. { $actief = "<input type=\"checkbox\" onClick=\"window.location = 'ag_Review.php?lg=$_GET[lg]&a=Y&id=$AGid[$i]' ;\">"; }

4 antwoorden

Gesponsorde links
Offline Stefan14 - 05/01/2014 19:13 (laatste wijziging 05/01/2014 19:21)
Avatar van Stefan14 PHP gevorderde Bij een $_GEt moet de naam tussen quotes.
Als je dit aanpast zou het moeten werken, is dit niet het geval dan is waarschijnlijk de get variabele id leeg.

Ik vind overigens de get variabele in je if statement wel erg vreemd.

Ik heb verder je code even aangepast.

- comments van 1 regel is makkelijker om // te gebruiken
- backtics in query's eruit gehaald, is niet nodig en staat lelijk
- query's wat overzichtelijker gemaakt, nu nog niet van belang, maar bij complexere query's zeker aan te raden.
- Numerieke variabelen in een query hoeven niet tussen quotes.
- Enige veiligheid toegevoegd bij de where clause, anders is mysql injection wel heel makkelijk.
- Bij variabelen kun je beter enkele quotes gebruiken, dan hoef je in de html niet alles te escapen.

ik zou even googlen op mysql injection, dan kom je al snel achter dat dit wel vrij belangrijk is om rekening mee te houden.
Altijd alle variabelen in je query die door de gebruiker ingevuld/beinvloed kunnen worden controleren!

houd er overigens rekening mee dat je nog geen enkele foutafhandeling hebt toegepast. Als de get variabele in de if statement leeg is, zal hij automatisch de else uitvoeren terwijl je dit waarschijnlijk helemaal niet wilt.

Hier de aangepaste code

  1. <?php
  2. //CONTROLE EN UPDATEN VAN RECORDS
  3.  
  4. if($_GET[[b]'a'[/b]] == 'N')
  5. {
  6. $upd = "UPDATE
  7. cpl_agenda
  8. SET
  9. active = 'Nee'
  10. WHERE
  11. agid = ".mysql_real_escape_string($_GET['id']);
  12. $res = mysql_query($upd);
  13. }
  14. else
  15. {
  16. $upd = "UPDATE
  17. cpl_agenda
  18. SET
  19. active = 'Ja'
  20. WHERE
  21. agid = ".mysql_real_escape_string($_GET['id']);
  22. $res = mysql_query($upd);
  23. }
  24.  
  25. //EINDE CONTROLE
  26.  
  27.  
  28. //Onderstaand script is de checkbox
  29.  
  30. if($AGactive[$i] == 'Ja')
  31. {
  32. $actief = '<input type="checkbox" onClick="window.location=\'ag_Review.php?lg=$_GET[lg]&a=N&id=$AGid[$i]\';" checked>';
  33. }
  34. else
  35. {
  36. $actief = '<input type="checkbox" onClick="window.location=\'ag_Review.php?lg=$_GET[lg]&a=Y&id=$AGid[$i]\';">';
  37. }
  38. ?>


EDIT: de tabs bij de query's zijn door het forum wat verkeerd geinterpreteerd, maar als het zonder highlighting bekijkt is het wel goed.
Offline Thomas - 05/01/2014 20:54 (laatste wijziging 05/01/2014 21:34)
Avatar van Thomas Moderator Als een checkbox niet gechecked is, wordt deze in het geheel niet gePOST, dus waarschijnlijk, als je method GET is (of je geen method hebt gedefinieerd in je formulier) ook (niet).

De undefined index 'a' melding zal dus met bovenstaande code waarschijnlijk niet weg zijn (ingeval deze niet aangevinkt wordt). Je hoeft eigenlijk alleen te controleren op het bestaan van de checkbox (gebruik isset()), de value doet er niet echt toe.
EDIT: Oh never mind, dit loopt niet via een formulier...

EDIT: waarom zou je trouwens de hele query nog een keer uitschrijven als er maar één waarde verschilt? Dat kan korter! 

EDIT2: Tevens moet je je properties URL-encoden, oftewel & moet worden &amp; etc., zie hieronder:

EDIT2: voortbordurend op de code van Stefan14 (en waarom zou je HTML in een PHP-string stoppen , ah well...):
  1. <?php
  2. // CONTROLE EN UPDATEN VAN RECORDS
  3. $nieuweWaarde = isset($_GET['a']) && $_GET['a'] == 'Y' ? 'Ja' : 'Nee';
  4. mysql_query("UPDATE cpl_agenda
  5. SET active = '".$nieuweWaarde."'
  6. WHERE agid = ".mysql_real_escape_string($_GET['id']));
  7. // EINDE CONTROLE
  8.  
  9.  
  10. // Onderstaand script is de checkbox
  11. ...
  12. ?>

EDIT3: getver, wellicht wil je nadenken over een andere opzet haha, wat je doet is nogal... onorthodox. Als je deze methode wilt aanhouden kun je wellicht iets doen in javascript met this.checked (in die onclick actie)? Dan heb je in ieder geval maar één lap HTML nodig, in plaats van twee.
Offline Radio247 - 06/01/2014 20:28
Avatar van Radio247 Lid Allereerst wil ik Stefan14 en FangroN hartelijk danken voor hun hulp.
Het voorstel van Stefan14 gaf geen verbetering omdat a nog steeds een onbekende bleef.
Het script van FangorN loste dit wel op.
Nu krijg ik alleen nog een melding van de niet gedefinieerde id bij het ($_GET['id']) welke verdwijnt op het moment dat de checkbox is gebruikt (selecteren of deselecteren).
Ik begrijp uit de reacties dat ik hier gebruik maak van php en html door elkaar.
Dat bewijst wel weer dat ik aardig heb kunnen knippen en plakken met een serieus gebrek aan kennis. 
Wordt het misschien toch tijd om dieper op de materie te gaan studeren hoewel ik het erg ingewikkeld vind.

Ik ben er super blij mee dat jullie mij tot zover hebben kunnen helpen.
Offline Thomas - 06/01/2014 20:50 (laatste wijziging 16/01/2014 14:38)
Avatar van Thomas Moderator Mja, zaken tussen enkele quotes worden letterlijk afgedrukt, zaken tussen dubbele quotes (zoals variabelen) worden nog geevalueerd:

  1. <?php
  2. $test = 1;
  3. echo "$test"; // dubbele quotes; levert "1"
  4. ?><br /><?php
  5. echo '$test'; // enkele quotes; levert "$test"
  6. ?>


Kijk maar eens in je broncode .

Het is sowieso een goede gewoonte om "variabelen buiten quotes" te halen, dat bevordert meestal de leesbaarheid.

En het zou nog netter zijn als je variabelen altijd ontdoet van hun (mogelijk) speciale betekenis in HTML, tenzij je HTML wilt afdrukken. Dit heet het "escapen van output".

Voor nu is de snelle oplossing als volgt (met behulp van een punt (.) kun je tekst passages aaneenrijgen. Je krijgt dan dus zoiets (er van uitgaande dat $AGactive[$i], $_GET['lg'] en $AGid[$i] bestaan):

  1. <?php
  2. if($AGactive[$i] == 'Ja') {
  3. $actief = '<input type="checkbox" onClick="window.location=\'ag_Review.php?lg='.$_GET['lg'].'&amp;a=N&amp;id='.$AGid[$i].'\';" checked="checked" />';
  4. } else {
  5. $actief = '<input type="checkbox" onClick="window.location=\'ag_Review.php?lg='.$_GET['lg'].'&amp;a=Y&amp;id='.$AGid[$i].'\';" />';
  6. }
  7. ?>


EDIT: reeds geholpen via e-mail, ik zal mijzelf desalniettemin maar geen punten toekennen .
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.234s