Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] Selecteren waarden in form

Pagina: 1
Acties:
  • 1.423 views

  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
Hallo allemaal,

ik zit met het volgende.

Ik heb een pagina waar een overzicht van reparatie's wordt gegeven. De gegevens worden uit de database gehaald en in een tabel gestopt. Het ziet er zo uit:

Afbeeldingslocatie: http://i60.tinypic.com/33lebft.png

Nu wil ik dus de bewerk knop linken aan de desbetreffende reparatie, zodat een pagina met een ingevuld formulier wordt geopend welke ik vervolgens weer kan bewerken en updaten.

Maar daar gaat het mis, hoe geef ik de "bewerk" knop nou een URL mee waardoor de specifieke reparatie wordt geopend, en de waarden uit de tabel in een formulier worden geplaatst?

De waarden uit de tabel moet opzich wel lukken, dat is neem ik aan gewoon de textboxes een variabele als value laten meekrijgen. Waar ik dus echt op vast loop is die bewerk knop.

  • Rikkiz0r
  • Registratie: Januari 2009
  • Niet online
Waarom koppel je niet gewoon het reparatieId aan de bewerk knop zodat die mee gegeven wordt naar de bewerkpagina. De bewerkpagina kan dan de gegevens adhv het id uit de database laden.

  • eM.
  • Registratie: Mei 2010
  • Laatst online: 23-10 10:44

eM.

www.domein.nl/bewerk.php?reperatieid=547c97bfe3a2c

<?php
//bewerk.php
$reperatieid = $_GET['reperatieid'];
//query uitvoeren etc...

  • Zeg
  • Registratie: Juli 2012
  • Laatst online: 21-09 16:44

Zeg

eM. schreef op vrijdag 05 december 2014 @ 13:46:
www.domein.nl/bewerk.php?reperatieid=547c97bfe3a2c

<?php
//bewerk.php
$reperatieid = $_GET['reperatieid'];
//query uitvoeren etc...
En dan is het ook wel meteen handig om $_GET["reparatieid"] aan de hand van een regex te controleren, en prepared statements te gebruiken om SQL-injection (grotendeels) te voorkomen.

Zoiets als dit dus:

PHP:
1
2
3
4
5
6
7
8
// bewerk.php
$string = $_GET["reparatieid"];
if(preg_match("/[^a-z_\-0-9]/i", $string)) {
    // query uitvoeren, met prepared statements
}
else {
    // laat foutmelding zien
}


Vervolgens is het handig om ook even te kijken naar het overzicht, dus dat je daar ook de juiste GET-request meestuurt in het <a> element, dus bijvoorbeeld:

PHP:
1
echo "<a href='bewerk.php?reparatieid=".$row["reparatie_id"]."' class='button'>Bewerk</a>";

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 19:10

MueR

Admin Devschuur® & Discord

is niet lief

Zeg schreef op vrijdag 05 december 2014 @ 14:45:
[...]


En dan is het ook wel meteen handig om $_GET["reparatieid"] aan de hand van een regex te controleren
Waarom zou je daar een regex voor gebruiken? Wat een onzinnig misbruik van cpu cycles. Ofwel je query komt terug met een result, of niet. Ga niet nog ff extra tijd en resources verspillen met een regex check.

[ Voor 44% gewijzigd door MueR op 05-12-2014 15:08 ]

Anyone who gets in between me and my morning coffee should be insecure.


  • Zeg
  • Registratie: Juli 2012
  • Laatst online: 21-09 16:44

Zeg

MueR schreef op vrijdag 05 december 2014 @ 15:07:
[...]

Waarom zou je daar een regex voor gebruiken? Wat een onzinnig misbruik van cpu cycles. Ofwel je query komt terug met een result, of niet. Ga niet nog ff extra tijd en resources verspillen met een regex check.
Dan niet. Naar mijn mening is net zo onzinnig om een bepaalde query uit te voeren als die toch niet voldoet aan een alfanumerieke identifier.

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 23:27
Zeg schreef op vrijdag 05 december 2014 @ 15:37:
[...]


Dan niet. Naar mijn mening is net zo onzinnig om een bepaalde query uit te voeren als die toch niet voldoet aan een alfanumerieke identifier.
Je gaat dan dus elk normaal gebruik van die pagina vertragen om een query te besparen in het geval dat iemand met de ids loopt te knoeien :?

  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
Het wordt me al iets duidelijker. Dit heb ik nu, maar het werkt niet. Een fatal error.

PHP:
1
2
3
4
5
6
7
8
9
10
 print("<td class=tdrp>"     .    $row ["reparatieid"] . "</td>" . " ");
                    print("<td class=TDID>"     .    $row ["klantid"] .     "</td>" . " ");
                    print("<td class=tdmodel>"  .    $row ["model"] .       "</td>" . " ");
                    print("<td class=tdmerk>"   .    $row ["merk"] .        "</td>" . " ");
                    print("<td class=tdfrm>"    .    $row ["framenummer"] . "</td>" . " ");
                    print("<td class=tdverz>"   .    $row ["verzekerd"] .   "</td>" . " ");
                    print("<td class=tdgara>"   .    $row ["garantie"] .    "</td>" . " ");
                    print("<td class=tdgereed>" .    $row ["gereed"] .      "</td>" . " ");
                    print("<td class=tdbewerk>" .   "<input type=button value=Bewerk onClick=javascript:popUp('/reparatiebewerk.php?reparatieid=".$row["reparatieid"]' )>". "</td>");
                     


Met deze code

PHP:
1
'/reparatiebewerk.php?reparatieid=".$row["reparatieid"]'


wil ik dus het reparatieID opvragen wat in dezelfde row staat. Vervolgens verwijst hij door naar reparatiebewerk.php, waar ik later, als de verwijzing goed gaat een form wil invoegen met de details.

Maar, waarom wordt het een fatal error? Ik heb gekeken naar de opbouw, maar kan met mijn basis kennis geen rare dingen zien

  • Aionicus
  • Registratie: Februari 2011
  • Laatst online: 08-08-2023
De fout zit hem in hoe je laatste regel opgebouwd is .

achter print komt eerste " daarna sluit je hem meteen achter je td class omdat je daar normaal een row zou echoen, in dit geval heb je nog meer tekst wat hij plaatst eer het stukje van je row komt

dus het zou print("<td class=tdbewerk><input type= etc moeten worden.

dan inderdaad een " met . na reparatie id en dan daarna weer ." om de code uit te zetten . daarna sluiten met ' . je hebt ook kans dat je $row["reparatieid"] met '' moet schrijven . al kan je net zo makkelijk ipv de puntjes gewoon {$row['reparatieid]'} doen. dan weet je zeker dat hij daar niet op faalt.

puur "" en ' wat nu nog in de weg zit :)

veel success ermee

edit :

ik zou hem zo bouwen :
code:
1
echo '<td class=tdbewerk><input type="button" value="Bewerk"  onClick="javascript:popUp("/reparatiebewerk.php?reparatieid={$row["reparatieid"]}")</td>';

[ Voor 12% gewijzigd door Aionicus op 05-12-2014 21:57 ]


  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 30-10 12:53

Douweegbertje

Wat kinderachtig.. godverdomme

Wat je aan het doen bent, is moeilijk. Ok, natuurlijk zie ik de fout wel gelijk maar om middels én html én JS tags én nog eens php tags door elkaar heen te gaan doen, maak je het jezelf enorm moeilijk.
Alles kan natuurlijk, maar het hoeft absoluut niet. Vele dingen zijn persoonlijke voorkeuren maar waarom zou je PHP alles laten 'printen' als je PHP ook even kunt 'stoppen' om verder te gaan met je HTML. Immers bevat je code op dat moment het meeste HTML. Op het moment dat ik meer dan één lijn aan HTML moet 'uitgooien', dan stop ik PHP en ga ik met HTML verder.
IMO geeft dat veel nettere code.

Verder zou ik dan ook een 'echo' gebruiken ipv 'print', ik bespaar je de details maar mocht je het zelf willen lezen: http://stackoverflow.com/...nd-print-different-in-php

Ik verveelde me en heb even je code wat netter gemaakt.


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

//hier je PHP meuk



// stop nu met PHP 
?>

<!-- het kan op deze manier (Short tags) -->
<td class="tdrp"><?=$row["reparatieid"]?></td>
<!-- wat identiek is aan het volgende (mits je PHP.ini het toe laat) -->
<td class="TDID"><?php echo $row["klantid"];?></td>

<!-- Discussie hierover kun je hier vinden: http://stackoverflow.com/questions/200640/are-php-short-tags-acceptable-to-use  
 Ik zelf gebruik het gewoon wel (de short tags).
-->

<td class="tdmodel"><?=$row["model"]?></td>
<td class="tdmerk"><?=$row["merk"]?></td>
<td class="tdfrm"> <?=$row["framenummer"]?></td>
<td class="tdverz"><?=$row["verzekerd"]?></td>
<td class="tdgara"><?=$row["garantie"]?></td>
<td class="tdgereed"><?=$row["gereed"]?></td>
<input type="button" value="Bewerk" onClick="alert('/reparatiebewerk.php?reparatieid=<?=$row['reparatieid']?>'); ">

Als 'debug' staat er nu alert bij je onclick, verander alert naar je functie popUp en hij zal het weer doen ;)

Het is niet verplicht, maar ik zou leren om bijv. alle attributes (class, onclick, type etc) in quotes te zetten. Hoewel het dus 'allowed' is om het zonder te doen, is het IMO niet erg netjes EN het limiteert je op een gegeven moment waardoor je het wel -moet- gebruiken voor bepaalde gevallen. Wat dan weer geen uniforme code oplevert (ene keer wel, dan weer niet).

code:
1
2
3
<div class="foo bar"> 

<div class=foo bar>


De bovenste werkt, en heb je 2 classes aan het attr. toegevoegd. De onderste wordt geïnterpreteerd als

code:
1
<div class="foo" bar="">



Ik zou zeggen, veel oefenen en probeer wat te werken aan de juiste 'standaarden'. Op het moment dat jij dingen op een logische manier schrijft (en dat is moeilijk!), zal alles op een gegeven moment ook veel makkelijker gaan worden. In jouw code zou ik het ook even moeilijk hebben gehad om alle quotes e.d. recht te zetten. Nou, op het moment dat het te onoverzichtelijk wordt en je niet eens meer je fout kunt vinden, wordt het tijd dat je even je code wat netter maakt ;)

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Ik zou er alleen niet op vertrouwen dat short tags aan staan. :) Standaard staat het uit namelijk.

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 30-10 12:53

Douweegbertje

Wat kinderachtig.. godverdomme

Sinds 5.4 werkt dit gewoon ongeacht ini settings
PHP:
1
<?=$var?> 


Dit echter niet:

PHP:
1
2
3
4
<?
$var = 'foo';

?>

  • NNF
  • Registratie: November 2003
  • Laatst online: 29-11-2024

NNF

Dat is inderdaad wel weer typisch PHP. De ene vorm van short tags werkt standaard niet, de andere wel :P Ik gebruik gewoon altijd <?php, dat werkt tenminste ongeacht de instellingen in php.ini of wat de PHP-ontwikkelaars nu weer verzonnen hebben.

  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
Bedankt voor alle reacties! Deze regel werkt inderdaad zonder errors:

PHP:
1
 echo '<td class=tdbewerk><input type="button" value="Bewerk"  onClick="javascript:popUp("/reparatiebewerk.php?reparatieid={$row["reparatieid"]}")</td>';


Maar als ik nu op de button klik, opent hij geen page. Ik dacht dat dit te maken kon hebben met dat de reparatiebewerk.php nog niet gereed was, dus die wou ik nu maken. Ik had dus deze 3 variabelen:

PHP:
1
2
3
$data = 'SELECT * FROM reparatie WHERE reparatieid = ??????; 
                $query = mysql_query($data); 
                $data2 = mysql_fetch_array($query);


Met deze form data; waardoor ik dus in de value="" verwijs naar de database info..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
         <fieldset>
                    <legend>Reparatiegegevens</legend>
                    <p>Alle velden zijn verplicht!</p>  
                  
                    <p><label for="klantid">KlantID:</label>     <input type="text" name="klantid" value="[klantid]"/></p> 
                        <p><label for="merk">Merk:</label></p> 
                        <p><label for="model">Model:</label>     <input type="text" name="model" value="[model]"/></p>  
                        <p><label for="framenummer">Framenummer:</label><input type="text" name="framenummer" value="[framenummer]"/></p> 
                        <p><label for="verzekerd">Verzekering:</label>     </p>
                        <p><label for="garantie">Garantie:</label>     </p>
                        <p><label for="gereed">Gereed:</label><input type="date" name="gereed" value="[gereed]"/></p>
                        <p><label for="opdracht">Opdracht:</label><textarea name="opdracht" rows="4" cols="30" value="[opdacht]"></textarea></p>                       
                    
                </fieldset>


Nu loop ik eigenlijk direct alvast bij de eerste variabele. Want ik wil alles uit de tabel reparatie halen wat bij een bepaalde reparatieID hoort. Vandaar dus dat SQL statement. Maar wat vul ik dan in bij
PHP:
1
WHERE reparatieid =
, wat ik kan niet verwijzen naar de $row.

  • MarcoC
  • Registratie: September 2003
  • Laatst online: 20-11 22:36
Je kan het id uit de URL halen d.m.v. $_GET['reparatieid'].

  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
Aha, ok thanks! Heb hem wel zonder de quotes gedaan, anders gaf hij een fatal error:

PHP:
1
 $data = 'SELECT * FROM reparatie WHERE reparatieid= $_GET[reparatieid]';


Is even mee prutsen :) thanks!

  • MarcoC
  • Registratie: September 2003
  • Laatst online: 20-11 22:36
Daantju schreef op zaterdag 06 december 2014 @ 13:48:
Aha, ok thanks! Heb hem wel zonder de quotes gedaan, anders gaf hij een fatal error:

PHP:
1
 $data = 'SELECT * FROM reparatie WHERE reparatieid= $_GET[reparatieid]';


Is even mee prutsen :) thanks!
Dat klopt inderdaad dat hij dan een error geeft. In PHP (en ook in andere talen) wordt een ' of een " geïnterpreteerd als bijvoorbeeld het begin of het einde van een string.

Er zijn verschillende manieren die qua syntax "correcter" zijn dan wat je nu doet. Ik zelf zou het zo gedaan hebben denk ik:
code:
1
2
$reparatie_id = $_GET["reparatieid"];
$data = "SELECT * FROM reparatie WHERE reparatieid = " . $reparatie_id;
Er zijn veel manieren om om te gaan met ' en "-tekens.

  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
Ok duidelijk, thanks voor je verhelderende input! Echter komt probleem 1 weer terug, want de button "bewerk" opent niet meer. werkte eerder probleemloos, heel erg raar.

PHP:
1
echo  '<td class=tdbewerk><input type="button" value="Bewerk"  onClick=javascript:popUp("/reparatiebewerk.php?reparatieid={$row["reparatieid"]}")</td>';


Met in de header de JS code:
JavaScript:
1
2
3
4
5
6
7
8
 <!-- Begin
function popUp(URL) {
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,width=1000,height=600,left = 400,top = 250');");
}
// End -->
</script>

  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 20-11 18:52

BLACKfm

O_o

Daantju schreef op zaterdag 06 december 2014 @ 17:40:
Ok duidelijk, thanks voor je verhelderende input! Echter komt probleem 1 weer terug, want de button "bewerk" opent niet meer. werkte eerder probleemloos, heel erg raar.

PHP:
1
echo  '<td class=tdbewerk><input type="button" value="Bewerk"  onClick=javascript:popUp("/reparatiebewerk.php?reparatieid={$row["reparatieid"]}")</td>';
Als het eerst wel werkt en daarna niet met 'de zelfde code' moet je eerst natuurlijk vergelijken. Ik zie een " die in de eerste variant niet staat. Lijkt mij dat die weg moet.

Eerste regel is de code die volgens jou wel werkt en de 2e is uit je bovenstaande quote :).

code:
1
2
echo  '<td class=tdbewerk><input type="button" value="Bewerk"  onClick=javascript:popUp("/reparatiebewerk.php?reparatieid={$row["reparatieid"]}")</td>';
echo  '<td class=tdbewerk><input type="button" value="Bewerk"  onClick="javascript:popUp("/reparatiebewerk.php?reparatieid={$row["reparatieid"]}")</td>';

[ Voor 5% gewijzigd door BLACKfm op 06-12-2014 17:53 ]


  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
Yes die quote bewust weggehaald, omdat het met " ook niet werkte en ik hem niet kon herleiden. Dus vandaar weggehaald, ook met " werkt het niet. Kan het te maken hebben met het verschil in echo/print?

  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 20-11 18:52

BLACKfm

O_o

Denk het niet, ik gebruik echo of print op een vergelijkbare manier, maar wellicht dat je door de javascript een conflict krijgt. Maar dan zou het in het begin ook niet moeten hebben gewerkt.

  • incaz
  • Registratie: Augustus 2012
  • Laatst online: 15-11-2022
Daantju schreef op zaterdag 06 december 2014 @ 13:48:
PHP:
1
 $data = 'SELECT * FROM reparatie WHERE reparatieid= $_GET[reparatieid]';
Please please please gebruik parameter binding. Dit zet de deur wagenwijd open voor sql injection...

Never explain with stupidity where malice is a better explanation


  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
Trouwens, als ik handmatig de url invoer:

http://127.0.0.1/reparati...reparatieid=547c97bfe3a2c

Dan krijg ik de error "No database selected" Maar dat doe ik juist wel, zie onderstaand (regel 3), moet ik dan nog een SQL statement toevoegen bij regel 17, waar de DB nogmaals wordt geselecteerd?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<fieldset class="contentblok1">
                     <?php
            $link = mysqli_connect("localhost", "root", "", "DBNAAM", 3306);
            if ($link) {
                print ("" . "<br>");
            } else {
                print("Kan helaas geen verbinding maken");
                print(mysqli_connect_error());
            }
            ?>
                
                    
                <div class="reparatiegegevens">
                     
                <?php
                $reparatie_id = $_GET["reparatieid"];
                $data = "SELECT * FROM reparatie WHERE reparatieid = " . $reparatie_id;
                $query = mysql_query($data) or die("Couldn't execute query. ". mysql_error()); 
                $data2 = mysql_fetch_array($query);
                ?>
                 <form>
                    
                    <fieldset>
                    <legend>Reparatiegegevens</legend>
                    <p>Alle velden zijn verplicht!</p>  
                  
                    <p><label for="klantid">KlantID:</label>     <input type="text" name="klantid" value="[klantid]"/></p> 
                        <p><label for="merk">Merk:</label><select name="merk">
                                                                         <option value="Cannondale">Cannondale</option>
                                                                         <option value="Koga">Koga</option>
                                                                         <option value="Gazelle">Gazelle</option>
                                                                         <option value="Batavus">Batavus</option>
                                                                         <option value="trek">Trek</option>
                                                                         </select></p> 
                        <p><label for="model">Model:</label>     <input type="text" name="model"/></p>  
                        <p><label for="framenummer">Framenummer:</label><input type="text" name="framenummer"/></p> 
                        <p><label for="verzekerd">Verzekering:</label>                           
                                                                         <input type="radio" name="verzekerd" value="ja">Ja
                                                                         <input type="radio" name="verzekerd" value="nee">Nee</p>
                        <p><label for="garantie">Garantie:</label>                           
                                                                         <input type="radio" name="garantie" value="ja">Ja
                                                                         <input type="radio" name="garantie" value="nee">Nee</p>
                        <p><label for="gereed">Gereed:</label><input type="date" name="gereed"/></p>
                        <p><label for="opdracht">Opdracht:</label><textarea name="opdracht" rows="4" cols="30"></textarea></p>                       
                    
                </fieldset> 

  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 20-11 18:52

BLACKfm

O_o

PHP:
1
2
3
4
5
6
7
8
9
10
<?
//Configuratie
$db_url = 'localhost'; //URL van je database
$db_user = 'user'; //Gebruikersnaam van je database
$db_pass = 'pass'; //Wachtwoord van je database
$db_naam = 'databasenaam'; //De naam van je database

@mysql_connect($db_url, $db_user, $db_pass)or die('Er kan geen verbinding worden gemaakt met je database server. Probeer de juiste gegevens in te vullen.');
@mysql_select_db($db_naam) or die('De databasenaam die je hebt ingevuld lijkt niet te bestaan.');
?>      


Met bovenstaande code maak ik persoonlijk altijd verbinding ('vroeger' althans, zit er al 2 jaar niet meer bovenop :P).

Uit jouw code kan ik niet opmaken dat je verbinding maakt. Je stelt een variabele in, maar voert deze volgens mij niet uit.
Ik zie alleen staan 'if ($link)', maar wat 'als ($link)' ? Ik zie niet dat er wat gebeurt met die variabele.
Wellicht dat je er

PHP:
1
if (echo $link)


van moet maken...

Maar reken me er niet op af als het niet goed is, ik ben van het houtje-touwtje type php-er :P

  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
Hmm de melding is in ieder geval anders, dus het heeft inderdaad geholpen! Het lijkt alsof de kolom reparatieID niet wordt herkend..

Nu is het:
Couldn't execute query. Unknown column '547c97bfe3a2c' in 'where clause'

547c97bfe3a2c Is dan het reparatieID wat ik handmatig meegeef in de URL

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    //Configuratie
$db_url = 'localhost'; //URL van je database
$db_user = 'root'; //Gebruikersnaam van je database
$db_pass = ''; //Wachtwoord van je database
$db_naam = 'DBNAAM'; //De naam van je database

@mysql_connect($db_url, $db_user, $db_pass)or die('Er kan geen verbinding worden gemaakt met je database server. Probeer de juiste gegevens in te vullen.');
@mysql_select_db($db_naam) or die('De databasenaam die je hebt ingevuld lijkt niet te bestaan.');
            ?>
                
                    
                <div class="reparatiegegevens">
                     
                <?php
                $reparatie_id = $_GET["reparatieid"];
                $data = "SELECT * FROM reparatie WHERE reparatieid = " . $reparatie_id;
                $query = mysql_query($data) or die("Couldn't execute query. ". mysql_error()); 
                $data2 = mysql_fetch_array($query);
                ?>
                 <form>
                    
                    <fieldset>
                    <legend>Reparatiegegevens</legend>
                    <p>Alle velden zijn verplicht!</p>  
                  
                    <p><label for="klantid">KlantID:</label>     <input type="text" name="klantid" value="[klantid]"/></p> 
                        <p><label for="merk">Merk:</label><select name="merk">
                                                                         <option value="Cannondale">Cannondale</option>
                                                                         <option value="Koga">Koga</option>
                                                                         <option value="Gazelle">Gazelle</option>
                                                                         <option value="Batavus">Batavus</option>
                                                                         <option value="trek">Trek</option>
                                                                         </select></p> 
                        <p><label for="model">Model:</label>     <input type="text" name="model"/></p>  
                        <p><label for="framenummer">Framenummer:</label><input type="text" name="framenummer"/></p> 
                        <p><label for="verzekerd">Verzekering:</label>                           
                                                                         <input type="radio" name="verzekerd" value="ja">Ja
                                                                         <input type="radio" name="verzekerd" value="nee">Nee</p>
                        <p><label for="garantie">Garantie:</label>                           
                                                                         <input type="radio" name="garantie" value="ja">Ja
                                                                         <input type="radio" name="garantie" value="nee">Nee</p>
                        <p><label for="gereed">Gereed:</label><input type="date" name="gereed"/></p>
                        <p><label for="opdracht">Opdracht:</label><textarea name="opdracht" rows="4" cols="30"></textarea></p>                       
                    
                </fieldset> 

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23:25

Creepy

Tactical Espionage Splatterer

Dan print je even je query uit, en dan zie je gelijk je fout? Het wordt nu wel eens tijd dat je gaat debuggen, ipv dat voor je te laten doen.

[ Voor 6% gewijzigd door Creepy op 06-12-2014 23:30 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • PsychoMantis_NL
  • Registratie: Juli 2011
  • Laatst online: 20:36

PsychoMantis_NL

PSN: PsychoMantis_NL

Met gevaar voor eigen leven dat Creepy me keihard af gaat schieten, hierbij toch nog eenmaal een oplossing :+

Ik heb dit topic al een aantal keer door gelezen en het valt me op dat er nogal inconsequent gebruik gemaakt wordt van enkele/dubbele/geen quotes. Als je je netjes (en consequent) aan de regeltjes had gehouden, dan had je deze melding ook niet gehad.

Zoals Douweegbertje hier al aangaf, class=foo bar werkt, maar de officiële wijze is class="foo bar" of class="foo" bar="ietsAnders".

Als je jezelf netjes aan de standaarden houdt, dan zou je aan de kleurcodering vaak al moeten kunnen zien dat er iets niet goed gaat:
PHP:
1
2
3
4
5
6
7
8
9
//Voorbeeld 1:
echo 'Wanneer ik 's avonds wil schrijven gaat het fout'; // Parse error;
' // deze quote is om de boel weer op orde te krijgen

//Voorbeeld 2
echo 'Wanneer ik \'s avonds wil schrijven gaat het hier goed'; // Werkt;

//Voorbeeld 3
echo "Wanneer ik 's avonds zo schrijf gaat het ook goed"; // werkt ook


Als je even de handleiding voor mysql doorgelezen had, of een willekeurige google opdracht had geprobeerd, dan was je op stackoverflow.com uitgekomen waar iemand hetzelfde probleem heeft (Dat bedoelt Creepy dus met Debuggen: Hoe doe ik dat). Hoewel daar de oplossing wordt voorgekouwd zonder dat wordt uitgelegd waarom dat de oplossing is, zie je wel meteen het verschil tussen het wel en niet gebruiken van quotes bij je queries.

Ik heb hier lokaal even snel een test database aangemaakt met de volgende velden:
code:
1
2
id   => int
text => varchar(255)


Draai ik de volgende queries, dan krijg ik bijbehorende resultaten/foutmeldingen:

MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT * FROM test WHERE id = 1
# Resultaat:
# id: 1
# text: Dit is tekst 1

SELECT * FROM test WHERE id = '1'
# Resultaat:
# id: 1
# text: Dit is tekst 1

SELECT * FROM test WHERE id = Dit
# Resultaat:
# 1054 - Unknown column 'Dit' in 'where clause' 

SELECT * FROM test WHERE id = 'Dit'
# Resultaat:
# Geen resultaten gevonden


De reden dat je die foutmelding krijgt, hoewel de terugkoppeling "unknown column" je wellicht van de wijs brengt, is omdat 547c97bfe3a2c geen integer is, en dus tussen quotes moet ;)

Behalve dat je er in deze casus niet onder uit komt om quotes te gebruiken aangezien je een veld wilt doorzoeken met een string i.p.v. een integer, zou ik er voor kiezen om jezelf aan te leren je waarden netjes tussen quotes te zetten, zodat je in ieder geval zeker weet dat je ook de resultaten krijgt die je zoekt, en niet zo maar quotes te laten vallen of toe te voegen omdat het naar jouw idee geen verschil maakt ;)

True, het werkt bij integer velden ietwat vertragend omdat MySQL je integer moet omzetten naar een karakter (1 is niet hetzelfde als '1'), maar voor de reguliere huis/tuin/keuken gebruiker zonder miljoenen records zou dat verwaarloosbaar moeten zijn. Als je 100% zeker weet dat je alleen maar integers verwacht/krijgt en ook je foutafhandeling daar op instelt dan kun je (of moet je) ze weglaten.

Om bovenstaand punt extra te verduidelijken, zoals je hier kunt lezen, kun je ook integers gebruiken om door varchar velden te zoeken, waardoor je query in eerste instantie misschien wel werkt, maar zodra je iets verandert in je database of je query, kun je zo maar rare of prestatie vertragende dingen krijgen.

[ Voor 6% gewijzigd door PsychoMantis_NL op 07-12-2014 09:18 . Reden: Typecasting vertraging toegevoegd ]

PsychoMantis_NL @ Battlefield || Red Dead Redemption || GTA V


  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:58
PsychoMantis_NL schreef op zondag 07 december 2014 @ 09:04:
[...] Zoals Douweegbertje hier al aangaf, class=foo bar werkt, maar de officiële wijze is class="foo bar" of class="foo" bar="ietsAnders".[...]
Er is niets officieels aan het wel gebruiken van quotes hoor. Gebruik van dubbele quotes ", enkele quotes ' of geen quotes worden allemaal netjes behandelt in de standaard. Het geeft alleen een hoop problemen als je niet duidelijk de beperkingen weet van het weglaten van quotes. Daarnaast is een foutje er natuurlijk zo ingeslopen, dus het is wel aan te raden quotes te gebruiken.
[...]
Als je jezelf netjes aan de standaarden houdt, dan zou je aan de kleurcodering vaak al moeten kunnen zien dat er iets niet goed gaat:[...]
Vooropgesteld dat de editor die de kleurtjes doet ook alles correct heeft geïmplementeerd. Maar als dat het geval was geweest had je bij class=foo bar ook wel gezien dat er iets niet goed was.

  • PsychoMantis_NL
  • Registratie: Juli 2011
  • Laatst online: 20:36

PsychoMantis_NL

PSN: PsychoMantis_NL

Caelorum schreef op zondag 07 december 2014 @ 09:22:
Er is niets officieels aan het wel gebruiken van quotes hoor. Gebruik van dubbele quotes ", enkele quotes ' of geen quotes worden allemaal netjes behandelt in de standaard. Het geeft alleen een hoop problemen als je niet duidelijk de beperkingen weet van het weglaten van quotes. Daarnaast is een foutje er natuurlijk zo ingeslopen, dus het is wel aan te raden quotes te gebruiken.
Volgens mij wel? Ik kan e.e.a. verkeerd interpreteren, maar volgens mij moet het volgens de standaard wel. Dat een browser alle mogelijke varianten toestaat is vers 2. (correct me if I'm wrong though)

Edit: Iets verder lezen, er staat inderdaad dat je niet per se quotes moet gebruiken.

Edit 2:Dat is pas zo vanaf html 5? Bij de voorgaande (strict?) versies was dat wel verplicht?
Vooropgesteld dat de editor die de kleurtjes doet ook alles correct heeft geïmplementeerd. Maar als dat het geval was geweest had je bij class=foo bar ook wel gezien dat er iets niet goed was.
Daar moet ik je gelijk in geven, maar als een IDE het verschil tussen foo="bar' en foo="bar" niet kan weergeven, dan moet je sowieso een andere zoeken :+

Dat hij bij foo=bar dan geen andere kleurcodering aangeeft kan ik me echter wel gewoon weer voorstellen, aangezien je feitelijk niet buiten/binnen je tekst springt.

[ Voor 6% gewijzigd door PsychoMantis_NL op 07-12-2014 09:37 ]

PsychoMantis_NL @ Battlefield || Red Dead Redemption || GTA V


  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
PsychoMantis_NL schreef op zondag 07 december 2014 @ 09:04:
Met gevaar voor eigen leven dat Creepy me keihard af gaat schieten, hierbij toch nog eenmaal een oplossing :+

Ik heb dit topic al een aantal keer door gelezen en het valt me op dat er nogal inconsequent gebruik gemaakt wordt van enkele/dubbele/geen quotes. Als je je netjes (en consequent) aan de regeltjes had gehouden, dan had je deze melding ook niet gehad.

Zoals Douweegbertje hier al aangaf, class=foo bar werkt, maar de officiële wijze is class="foo bar" of class="foo" bar="ietsAnders".

Als je jezelf netjes aan de standaarden houdt, dan zou je aan de kleurcodering vaak al moeten kunnen zien dat er iets niet goed gaat:
PHP:
1
2
3
4
5
6
7
8
9
//Voorbeeld 1:
echo 'Wanneer ik 's avonds wil schrijven gaat het fout'; // Parse error;
' // deze quote is om de boel weer op orde te krijgen

//Voorbeeld 2
echo 'Wanneer ik \'s avonds wil schrijven gaat het hier goed'; // Werkt;

//Voorbeeld 3
echo "Wanneer ik 's avonds zo schrijf gaat het ook goed"; // werkt ook


Als je even de handleiding voor mysql doorgelezen had, of een willekeurige google opdracht had geprobeerd, dan was je op stackoverflow.com uitgekomen waar iemand hetzelfde probleem heeft (Dat bedoelt Creepy dus met Debuggen: Hoe doe ik dat). Hoewel daar de oplossing wordt voorgekouwd zonder dat wordt uitgelegd waarom dat de oplossing is, zie je wel meteen het verschil tussen het wel en niet gebruiken van quotes bij je queries.

Ik heb hier lokaal even snel een test database aangemaakt met de volgende velden:
code:
1
2
id   => int
text => varchar(255)


Draai ik de volgende queries, dan krijg ik bijbehorende resultaten/foutmeldingen:

MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT * FROM test WHERE id = 1
# Resultaat:
# id: 1
# text: Dit is tekst 1

SELECT * FROM test WHERE id = '1'
# Resultaat:
# id: 1
# text: Dit is tekst 1

SELECT * FROM test WHERE id = Dit
# Resultaat:
# 1054 - Unknown column 'Dit' in 'where clause' 

SELECT * FROM test WHERE id = 'Dit'
# Resultaat:
# Geen resultaten gevonden


De reden dat je die foutmelding krijgt, hoewel de terugkoppeling "unknown column" je wellicht van de wijs brengt, is omdat 547c97bfe3a2c geen integer is, en dus tussen quotes moet ;)

Behalve dat je er in deze casus niet onder uit komt om quotes te gebruiken aangezien je een veld wilt doorzoeken met een string i.p.v. een integer, zou ik er voor kiezen om jezelf aan te leren je waarden netjes tussen quotes te zetten, zodat je in ieder geval zeker weet dat je ook de resultaten krijgt die je zoekt, en niet zo maar quotes te laten vallen of toe te voegen omdat het naar jouw idee geen verschil maakt ;)

True, het werkt bij integer velden ietwat vertragend omdat MySQL je integer moet omzetten naar een karakter (1 is niet hetzelfde als '1'), maar voor de reguliere huis/tuin/keuken gebruiker zonder miljoenen records zou dat verwaarloosbaar moeten zijn. Als je 100% zeker weet dat je alleen maar integers verwacht/krijgt en ook je foutafhandeling daar op instelt dan kun je (of moet je) ze weglaten.

Om bovenstaand punt extra te verduidelijken, zoals je hier kunt lezen, kun je ook integers gebruiken om door varchar velden te zoeken, waardoor je query in eerste instantie misschien wel werkt, maar zodra je iets verandert in je database of je query, kun je zo maar rare of prestatie vertragende dingen krijgen.
Dank voor je uitgebreide reactie! Het punt is dat ik dus gebruik maak van een variabele die via GET dus reparatieID ophaalt.

PHP:
1
2
 $reparatie_id = $_GET["reparatieid"];
                $data = "SELECT * FROM reparatie WHERE reparatieid = " . $reparatie_id;


Als ik op line 1 de "" rondom reparatieID weghaal, krijg ik weer een fout, wat logisch is, hij moet gewoon tussen quotes. Maar als ik op Line 2 $reparatie_id tussen " " plaats, veranderd er niks. Ik snap dat debuggen hier belangrijk is, maar welke waarde ik ook tussen " " zet, of bij welke waarde ik ze ook weghaal, er veranderd niks :'(

EDIT: Dus deze lijn code:

PHP:
1
2
 $reparatie_id = $_GET["reparatieid"];
                $data = "SELECT * FROM reparatie WHERE reparatieid = " . "$reparatie_id";


maakt geen enkel verschil

  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 20-11 18:52

BLACKfm

O_o

Ik zie in je code 'reparatieid' en in de tekst noem je 'reparatieID', weet wel dat als je dingen uit je database haalt en dan zeker de kolommen dat hoofdlettergevoeligheid nogal een rol kan spelen.

Ik weet niet of het standaard zo is of dat je het kunt instellen (sommige internet links houden er bijvoorbeeld geen rekening mee of het wel of geen hoofdletter is in een link), maar in mijn verleden heb ik daar nog wel eens kopzorgen over gehad.

Controleer dus nog even of je tabellen/kolommen waar je naar verwijst ook exact hetzelfde zijn, inclusief de hoofdletters.

Oh, en debuggen kan je met variabelen simpel doen door ze gewoon te echoën.

Dus zet direct na het moment dat je een variabele instelt een echo/print van die variabele zodat je zeker weet dat die is ingevuld

PHP:
1
2
3
$reparatie_id = $_GET["reparatieid"];
echo 'de waarde van $reparatie_id is: ' . $reparatie_id .' <antwoord';
                $data = "SELECT * FROM reparatie WHERE reparatieid = " . "$reparatie_id";

[ Voor 27% gewijzigd door BLACKfm op 07-12-2014 18:57 ]


  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
De waarden in de DB en in de code komen exact overeen. overal is het "reparatie"

Als ik je regel uitvoer, krijg ik inderdaad: de waarde van $reparatie_id is: 547c97bfe3a2c

[ Voor 36% gewijzigd door Daantju op 07-12-2014 18:59 ]


  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 20-11 18:52

BLACKfm

O_o

Ik ga weer een stukje code van mezelf aanbieden :P. Juistheid niet gegarandeerd.

PHP:
1
2
3
4
5
6
7
8
9
10
$reparatie_id = $_GET["reparatieid"];
$result = mysql_query("SELECT * FROM reparatie WHERE reparatieid = '$reparatie_id'") or die ("Kan geen verbinding maken want : ".mysql_error()); 
    
if (mysql_num_rows($result)) { 
    while ($qry = mysql_fetch_array($result)) { 
    echo 'Haal waarde 1 uit uit de database' . ($qry['waarde1']), '<br>';
    echo 'Haal waarde 2 uit uit de database' . ($qry['waarde2']), '<br>';
    echo 'Haal waarde 3 uit uit de database' . ($qry['waarde3']), '<br>';
    }
}


Vul naar gelang de gegevens in van waarde1, 2 en 3 zoals de naamvoering is uit je tabel (de kolomnamen). Krijg je dan een output?

  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
Yes dat werkt, dit is de output dan:

code:
1
2
3
4
5
6
Haal waarde 1 uit uit de database111
Haal waarde 2 uit uit de databaseCannondale
Haal waarde 3 uit uit de databasemod3l

Notice: Undefined variable: data in /Applications/XAMPP/xamppfiles/htdocs/reparatiebewerk.php on line 115
Couldn't execute query. Query was empty


Dus hij haalt de waardes inderdaad weg daar.

  • Patriot
  • Registratie: December 2004
  • Laatst online: 17:55

Patriot

Fulltime #whatpulsert

Daantju moet de post van PsychoMantis_NL beter lezen en goed doorhebben wat er in de uiteindelijke query van hem staat. Als hij dat doet dan heeft hij de oplossing snel gevonden.

  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 20-11 18:52

BLACKfm

O_o

Dan werkt het op zich allemaal dus prima. Enige probleem dat ik nu zie is ongeveer hetzelfde als dat ik eerder heb aangekaart, al weet ik niet of alle code die jij gebruikt nu echt zichtbaar is.

Ik neem nu aan dat je ergens de gegevens uit $data2 moet aanspreken. Over het hoe en wat weet ik niet. Ik teer al jaren op me eigen code :P. And don't change a winning formula O-).

PHP:
1
echo 'Dit is een waarde uit de database: '. $data2['waarde'];


Ik zie dat niet terugkomen in je code, dus dan wordt er ook niks gevonden lijkt me.

  • Daantju
  • Registratie: April 2014
  • Laatst online: 18-11 22:14
Tof, nu werkt dat deel inderdaad! Snap nog steeds niet waar de fout in mijn eigen code zat, maar dit is sowieso veel simpeler!! Dankjewel!! Nu zou ik dus dit in de value van het form field kunnen zetten:

PHP:
1
value="<?php echo ($qry['merk']); ?>"; 

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23:25

Creepy

Tactical Espionage Splatterer

Nogmaals: als je de query die je uitvoert, uitgeprint had, dan had je iets gezien met die quotes, namelijk dat je ze niet hebt in de query zelf! Waarom niet? Dat zou je zelf moeten kunnen uitzoeken

In PRG draait het om zelf programmeren, nu lijkt het er verdacht veel op dat je de mensen hier het voor je laat doen. Goed bedoeld, daar niet van, maar jij leert er niks van getuige je eigen melding "Snap nog steeds niet waar de fout zit". En dat is nu juist wel de bedoeling. Dit topic ga ik dan ook sluiten. Mocht je nog een vraag hebben dan kan je een nieuw topic openen maar let daarbij dan wel op dat je zelf aangeeft wat je nu zelf al hebt geprobeerd.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.