UPDATE functie

Status
Niet open voor verdere reacties.
Wat een boel geleuter...

Ik geef je een tip die regelrecht naar het antwoord leidt. :(

Daarnaast even over het $update gedeelte.

Houdt gewoon voor jezelf overzicht, escape de variabelen.
Dit ziet er al aardig wat overzichtelijker uit:
PHP:
$update = "UPDATE bestellingen SET
           artikelnummer = '". $_POST["artikelnummer"] ."',
           artikel = '".$_POST["artikel"]."',
           aantal = '".$_POST["aantal"]."',
           afhaaldatum = '".$_POST["afhaaldatum"]."',
           naam = '".$_POST["naam"]."',
           telefoon = '".$_POST["telefoon"]."',
           bestelbaar = '".$_POST["bestelbaar"]."'
           WHERE id = '".$id."'";
Nu gebruik ik zelf bij array's liever single-quotes (Dus: $_POST['artikelnummer']) maar een dubbele quote daar levert geen problemen op.
 
Dan moet je in alle geval al zorgen dat het veld "afhaaldatum" in je database van het type DATE is. Daarbij ga je waarschijnlijk voor het probleem komen dat die in Amerikaanse (?) vorm weergegeven wordt. MM/DD/YYYY ipv het bij ons gebruikelijke DD/MM/YYYY (of iets gelijkaardig)

Ik heb op dit ogenblik geen tijd om uit te zoeken hoe je dat weer juist aanpakt, maar morgen wil ik gerust verder zoeken... Misschien heeft ondertussen iemand anders je al verder geholpen ;)
 
Wat een boel geleuter...

Ik geef je een tip die regelrecht naar het antwoord leidt. :(

Daarnaast even over het $update gedeelte.

Houdt gewoon voor jezelf overzicht, escape de variabelen.
Dit ziet er al aardig wat overzichtelijker uit:
PHP:
$update = "UPDATE bestellingen SET
           artikelnummer = '". $_POST["artikelnummer"] ."',
           artikel = '".$_POST["artikel"]."',
           aantal = '".$_POST["aantal"]."',
           afhaaldatum = '".$_POST["afhaaldatum"]."',
           naam = '".$_POST["naam"]."',
           telefoon = '".$_POST["telefoon"]."',
           bestelbaar = '".$_POST["bestelbaar"]."'
           WHERE id = '".$id."'";
Nu gebruik ik zelf bij array's liever single-quotes (Dus: $_POST['artikelnummer']) maar een dubbele quote daar levert geen problemen op.

Jou notering is inderdaad duidelijker en overzichtelijker, maar toch heb je ook de single-quotes bij numerieke waarden niet gezien en laten staan (bij artikelnummer, aantal, en id) :confused:

Ik heb trouwens nog wel een paar opmerkingen bij de structuur die door exotic gebruikt wordt, maar dat is dan weer off-topic, en daar komt hij uiteindelijk (met wat meer ervaring) zelf wel achter
 
Laatst bewerkt:
in mijn toevoegen.php heb ik het volgende staan:
PHP:
print "<font size=\"2\" face=\"Tahoma\">Je bestelling is succesvol toegevoegd!</font>"; 
print "<meta http-equiv=\"refresh\" content=\"5;url=http://www.dynamichost.nl/computerland/index.php\" />";

is het mogelijk dat nadat ik op de knop verstuur heb gedrukt er een nieuw venster wordt geopend,
met als naam: nieuwvenster.php?id=$id ( dit id is zojuist aangemaakt ) op de huidige pagina.
 
Laatst bewerkt:
maar toch heb je ook de single-quotes bij numerieke waarden niet gezien en laten staan (bij artikelnummer, aantal, en id) :confused:

Dus? Ik heb nog niet gemerkt dat het bij een van mijn scripts verkeerd gaat :(
Voor mij staan die single-quotes er om aan te geven wat de waarde moet worden. Dus hetgeen tussen die quotes moet opgeslagen worden.

Ontopic: Waarom zou je een nieuw venster willen openen? Op het "oude" scherm staat dan toch niets relevants. De refresh zorgt er wel voor dat er iets nieuws verschijnt.
 
Klopt, maar ik heb zeg maar het volgende:

printbestelling.php ( deze pagina print automatisch )
index.php ( hier staan alle bestellingen op een rijtje )

maar het moet dus gelinkt worden aan printbestelling.php?id=
hoe kom ik aan het ID dat tergelijk wordt aangemaakt?

en hoe openen ik dat venster dan in een nieuw scherm?
 
Dus je wilt op dit gedeelte
PHP:
print "<font size=\"2\" face=\"Tahoma\">Je bestelling is succesvol toegevoegd!</font>"; 
print "<meta http-equiv=\"refresh\" content=\"5;url=http://www.dynamichost.nl/computerland/index.php\" />";
eigenlijk de persoon doorsturen naar de printpagina?

Dan stuur je toch gewoon de id mee.
Door middel van een standaardfunctie kun je de laatste ID van een INSERT-query opvragen.
PHP:
$lastId = mysql_insert_id();
echo '<font size="2" face="Tahoma">Je bestelling is succesvol toegevoegd!</font>';
echo '<meta http-equiv="refresh" content="5;url=http://www.dynamichost.nl/computerland/printbestelling.php?id='. $lastId .'" />';
 
Werkt perfect! weer iets geleerd!

en dan om nog terug te komen op het linken.
hoe kan ik dat printvenster dan laten openen in een nieuw venster?
het het venster waar ik in zat terug sturen naar index.php ??
 
Laatst bewerkt:
Een header() zal waarschijnlijk niet werken aangezien je ongetwijfeld al output geeft.
Waarschijnlijk wil een javascript window.open() wel werken.
PHP:
$lastId = mysql_insert_id();
$url = "http://www.dynamichost.nl/computerland";
echo '<font size="2" face="Tahoma">Je bestelling is succesvol toegevoegd!</font>';
echo '<script language="javascript">window.open("'. $url .'/printbestellling.php?id='. $lastId.'");</script>';
echo '<meta http-equiv="refresh" content="5;url='. $url .'/index.php.'" />';
 
Wat een boel geleuter...

Ik geef je een tip die regelrecht naar het antwoord leidt. :(

Daarnaast even over het $update gedeelte.

Houdt gewoon voor jezelf overzicht, escape de variabelen.
Dit ziet er al aardig wat overzichtelijker uit:
PHP:
$update = "UPDATE bestellingen SET
           artikelnummer = '". $_POST["artikelnummer"] ."',
           artikel = '".$_POST["artikel"]."',
           aantal = '".$_POST["aantal"]."',
           afhaaldatum = '".$_POST["afhaaldatum"]."',
           naam = '".$_POST["naam"]."',
           telefoon = '".$_POST["telefoon"]."',
           bestelbaar = '".$_POST["bestelbaar"]."'
           WHERE id = '".$id."'";
Nu gebruik ik zelf bij array's liever single-quotes (Dus: $_POST['artikelnummer']) maar een dubbele quote daar levert geen problemen op.

Ik zou wel even alles escapen, tenzij je de database het graf in wilt helpen.
 
De aanhalingstekens van $_POST["...."] sluiten de string $update="....." op ongeldige wijze af.
Verder vermoed ik dat artikelnummer en aantal een integer in de database zijn, en dan mogen er bij het updaten geen aanhalingstekens rond de nieuwe waarde.

Verander dit:
PHP:
if(isset($_POST["wijzigen"])) 
{ 
  $update = "UPDATE bestellingen SET artikelnummer = '".$_POST["artikelnummer"]."', artikel = '".$_POST["artikel"]."', aantal = '".$_POST["aantal"]."', afhaaldatum = '".$_POST["afhaaldatum"]."', naam = '".$_POST["naam"]."', telefoon = '".$_POST["telefoon"]."', bestelbaar = '".$_POST["bestelbaar"]."' WHERE id = '".$id."'"; 
  mysql_query($update) or die(mysql_error()); 

print "<br>";

eens in dit:
PHP:
if(isset($_POST["wijzigen"])) 
{
  $artikelnummer=$_POST["artikelnummer"];
  $artikel=$_POST["artikel"];
  $aantal=$_POST["aantal"];
  $afhaaldatum=$_POST["afhaaldatum"];
  $naam=$_POST["naam"];
  $telefoon=$_POST["telefoon"];
  $bestelbaar=$_POST["bestelbaar"];
  $update = "UPDATE bestellingen SET artikelnummer=$artikelnummer, artikel='$artikel', aantal=$aantal, afhaaldatum='$afhaaldatum', naam='$naam', telefoon = '$telefoon', bestelbaar = '$bestelbaar' WHERE id = '".$id."'";
  mysql_query($update) or die(mysql_error()); 

print "<br>";

Sorry, maar dit is echt onzin.

Ga je voor elke nieuwe bewerking een nieuwe variabele aanmaken? Ik wil jouw bestanden wel eens zien voor formulieren met 30 velden en 300 bewerkingen... Gewoon $_POST['bla'] gebruiken, daar is niets mis mee. Daarnaast zou je, zoals ik in de post hierboven al aangaf, de variabelen moeten escapen (mysql_real_escape_string), is het verstandig variabelen buiten quotes te plaatsen en _correct_ foutafhandeling toe te voegen. Van or die() wordt niemand wijzer. Daarnaast is het onzin dat INT's zonder quotes geschreven moeten worden, er is zelfs iets voor te zeggen het juist wél met quotes te doen (consistentie). Eén ding is zeker: je query zal er niet sneller of langzamer van worden.

Verder gebruiken we bij echo en print altijd single quotes, zodat je niet de HTML hoeft te escapen en is if(isset($_POST['x']) onzin, zeker als het een button betreft. Browsers als Safari (en nu ook Chrome) sturen deze vaak niet mee. Hetzelfde geldt voor andere browsers als je op 'enter' drukt, in plaats van op de button klikt.
Zoals ThaDevil zei, gebruik if($_SERVER['REQUEST_METHOD'] == 'POST'){.
 
.....Daarnaast is het onzin dat INT's zonder quotes geschreven moeten worden.....
Merkwaardig! Ik heb dat blijkbaar gewoon overgenomen uit ACCESS-VBA, waar dat wél zo is.
PHP:
SELECT ...... WHERE aantal='1'
werkt wél in PHP maar niét in VBA, en dat terwijl het in beide gevallen toch om SQL gaat :shocked:

@exotic: wil je nog steeds die verlopen afhaaldatum in rood weergeven? Geef dan nog eens je huidige versie van die pagina.
 
Merkwaardig! Ik heb dat blijkbaar gewoon overgenomen uit ACCESS-VBA, waar dat wél zo is.
PHP:
SELECT ...... WHERE aantal='1'
werkt wél in PHP maar niét in VBA, en dat terwijl het in beide gevallen toch om SQL gaat :shocked:

@exotic: wil je nog steeds die verlopen afhaaldatum in rood weergeven? Geef dan nog eens je huidige versie van die pagina.

Jazeker!

PHP:
<? 
include('config.php');
?>
<table cellspacing="0" cellpadding="0" border="0" style="width:100%;border-collapse:collapse;">
  <tr valign="bottom">
    <td background="cl_masthead_bg.jpg" class="LoginMessage" style="width:25%;"><span id="ctl00_Header1_labelLoggedInMessage"></span></td>
    <td background="cl_masthead_bg.jpg" style="width:50%;"><div align="center"><img src="logo.jpg" alt="Computerland" width="450" height="75" /></div></td>
    <td align="right" background="cl_masthead_bg.jpg" style="width:25%;">&nbsp;</td>
  </tr>
</table>
<table width="100%">
<tr>
  <td class="table" width="1%" align="left" bordercolor="#000000">&nbsp;</td>
<td class="table" width="6%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">#</font></strong></td>
<td class="table" width="29%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Product Omschrijving</font></strong></td>
<td class="table" width="9%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Bestel Datum</font></strong></td>
<td class="table" width="5%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Aantal</font></strong></td>
<td class="table" width="10%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Afhaal Datum</font></strong></td>
<td class="table" width="11%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Naam</font></strong></td>
<td class="table" width="10%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Telefoon Nummer</font></strong></td>
<td width="11%" align="left" bordercolor="#000000" class="table"><strong><font size="2" face="Tahoma">Bestelbaar?</font></strong></td>
<td width="2%" align="left" bordercolor="#000000" class="table">&nbsp;</td>
<td width="2%" align="left" bordercolor="#000000" class="table">&nbsp;</td>
<td width="4%" align="left" bordercolor="#000000" class="table">&nbsp;</td>
</tr>
<?php
$qLid = mysql_query("SELECT id,artikelnummer,artikel,datum,aantal,afhaaldatum,naam,telefoon,bestelbaar FROM bestellingen"); 
while ($aLid = mysql_fetch_assoc($qLid)) 
{ 
      if($aLid['bestelbaar']=="Ja"){
        $kleur="green";
      }else{
        $kleur="red";
      }
?>

<tr>
  <td width="1%" align="left">&nbsp;</td>
<td width="6%" align="left">
  <font size="2" face="Tahoma">
  <?=$aLid['artikelnummer']?>
  </font></td>
<td align="left"><font size="2" face="Tahoma">
  <?=$aLid['artikel']?>
</font></td>
<td align="left"><font size="2" face="Tahoma">
<?=$aLid['datum']?>
</font></td>
<td width="5%" align="left"><font size="2" face="Tahoma">
  <?=$aLid['aantal']?>
</font></td>
<td width="10%" align="left"><font size="2" face="Tahoma">
  <?=$aLid['afhaaldatum']?>
</font></td>
<td width="11%" align="left"><font size="2" face="Tahoma">
  <?=$aLid['naam']?>
</font></td>
<td align="left"><font size="2" face="Tahoma">
  <?=$aLid['telefoon']?>
</font></td>
<td align="left"><strong><font size="2" face="Tahoma">
<? echo "<span style='color:$kleur;'>".$aLid['bestelbaar']."</span>";   ?>
</font></strong></td>
<td align="left"><a href="bewerken.php?id=<?=$aLid['id']?>"><img src="b_edit.png" border="0" alt="Bewerken" width="16" height="16" /></a></td>
<td align="left"><a href="verwijderen.php?id=<?=$aLid['id']?>"><img src="b_drop.png" border="0" alt="Verwijderen" width="16" height="16" /></a></td>
<td align="left"><a href="bestelling.php?id=<?=$aLid['id']?>"><img src="IconPrint.gif" width="33" height="33" border="0" /></a></td>
</tr>
<? //while afsluiten
}
?>
</table>
<br />
<br />
<table width="100%">
  <tr>
    <td width="1%" align="left"></td>
    <td width="99%" align="left"><span class="table"><font size="2" face="Tahoma">
      <a href=berichten.php><b>Bestelling Toevoegen</b></a>
    </font></span></td>
  </tr>
</table>

Groetjes!
 
Ik moet ook nog even weten van welk type het veld 'afhaaldatum' is (date of varchar) en welk formaat je gebruikt (dag/maand/jaar of maand/dag/jaar of dag-maand-jaar of ...)
 
Ik moet ook nog even weten van welk type het veld 'afhaaldatum' is (date of varchar) en welk formaat je gebruikt (dag/maand/jaar of maand/dag/jaar of dag-maand-jaar of ...)

varchar
d/m/Y
 
En dat is fout. Een datum sla je op als DATE, een tijd als TIME en een datum + tijd als DATETIME, en niet anders. Niet, never, nooit, nada.
 
En dat is fout. Een datum sla je op als DATE, een tijd als TIME en een datum + tijd als DATETIME, en niet anders. Niet, never, nooit, nada.

en wat heeft dat voor een invloed op mijn webpagina?
 
Zoals je het nu hebt, zou onderstaande code moeten werken.
Maar SvU heeft zeker gelijk met wat hij zegt in zijn laatste bericht! Als je bijvoorbeeld ooit wil gaan sorteren op die datum, dan zal dat niet lukken als het een varchar is... en da's maar één voorbeeld van de moeilijkheden die je kan (en waarschijnlijk zál) tegenkomen.

Een beetje uitleg bij de code zoals ze nu is: In regels 3 tot 5 maak ik "een getal" voor de datum van vandaag. In regels 51 tot 53 maak ik dat getal voor afhaaldatum.In regel 54 vergelijk ik die 2 getalen en ken de juiste kleur toe.
Als afhaaldatum gelijk is aan vandaag zal die rood weergegeven worden. Als je die ook groen wil hebben moet je het eerste gelijkheidsteken in regel 54 weghalen.

PHP:
<?php  
  include('config.php');
  $vandaag=date("d/m/Y",time());
  $x=split("/",$vandaag);
  $y1=mktime(0,0,0,$x[1],$x[0],$x[2]);
?> 
<table cellspacing="0" cellpadding="0" border="0" style="width:100%;border-collapse:collapse;"> 
  <tr valign="bottom"> 
    <td background="cl_masthead_bg.jpg" class="LoginMessage" style="width:25%;"><span id="ctl00_Header1_labelLoggedInMessage"></span></td> 
    <td background="cl_masthead_bg.jpg" style="width:50%;"><div align="center"><img src="logo.jpg" alt="Computerland" width="450" height="75" /></div></td> 
    <td align="right" background="cl_masthead_bg.jpg" style="width:25%;">&nbsp;</td> 
  </tr> 
</table> 
<table width="100%"> 
<tr> 
  <td class="table" width="1%" align="left" bordercolor="#000000">&nbsp;</td> 
<td class="table" width="6%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">#</font></strong></td> 
<td class="table" width="29%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Product Omschrijving</font></strong></td> 
<td class="table" width="9%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Bestel Datum</font></strong></td> 
<td class="table" width="5%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Aantal</font></strong></td> 
<td class="table" width="10%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Afhaal Datum</font></strong></td> 
<td class="table" width="11%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Naam</font></strong></td> 
<td class="table" width="10%" align="left" bordercolor="#000000"><strong><font size="2" face="Tahoma">Telefoon Nummer</font></strong></td> 
<td width="11%" align="left" bordercolor="#000000" class="table"><strong><font size="2" face="Tahoma">Bestelbaar?</font></strong></td> 
<td width="2%" align="left" bordercolor="#000000" class="table">&nbsp;</td> 
<td width="2%" align="left" bordercolor="#000000" class="table">&nbsp;</td> 
<td width="4%" align="left" bordercolor="#000000" class="table">&nbsp;</td> 
</tr> 
<?php 
$qLid = mysql_query("SELECT id,artikelnummer,artikel,datum,aantal,afhaaldatum,naam,telefoon,bestelbaar FROM bestellingen");  
while ($aLid = mysql_fetch_assoc($qLid))  
{  
?> 

<tr> 
  <td width="1%" align="left">&nbsp;</td> 
<td width="6%" align="left"> 
  <font size="2" face="Tahoma"> 
  <?=$aLid['artikelnummer']?> 
  </font></td> 
<td align="left"><font size="2" face="Tahoma"> 
  <?=$aLid['artikel']?> 
</font></td> 
<td align="left"><font size="2" face="Tahoma"> 
<?=$aLid['datum']?> 
</font></td> 
<td width="5%" align="left"><font size="2" face="Tahoma"> 
  <?=$aLid['aantal']?> 
</font></td>
<?php
  $vandaag=$aLid['afhaaldatum'];
  $x=split("/",$vandaag);
  $y2=mktime(0,0,0,$x[1],$x[0],$x[2]);
  if($y2<=$y1){$kleur="red";}else{$kleur="green";}
?>
<td width="10%" align="left"><font size="2" face="Tahoma" color="<?php echo $kleur;?>"> 
  <b><?=$aLid['afhaaldatum']?></b> 
</font></td> 
<td width="11%" align="left"><font size="2" face="Tahoma"> 
  <?=$aLid['naam']?> 
</font></td> 
<td align="left"><font size="2" face="Tahoma"> 
  <?=$aLid['telefoon']?> 
</font></td> 
<td align="left"><strong><font size="2" face="Tahoma"> 
<?php
  if($aLid['bestelbaar']=="Ja"){$kleur="green";}else{$kleur="red";} 
  echo "<span style='color:$kleur;'>".$aLid['bestelbaar']."</span>";
?> 
</font></strong></td> 
<td align="left"><a href="bewerken.php?id=<?=$aLid['id']?>"><img src="b_edit.png" border="0" alt="Bewerken" width="16" height="16" /></a></td> 
<td align="left"><a href="verwijderen.php?id=<?=$aLid['id']?>"><img src="b_drop.png" border="0" alt="Verwijderen" width="16" height="16" /></a></td> 
<td align="left"><a href="bestelling.php?id=<?=$aLid['id']?>"><img src="IconPrint.gif" width="33" height="33" border="0" /></a></td> 
</tr> 
<? //while afsluiten 
} 
?> 
</table> 
<br /> 
<br /> 
<table width="100%"> 
  <tr> 
    <td width="1%" align="left"></td> 
    <td width="99%" align="left"><span class="table"><font size="2" face="Tahoma"> 
      <a href=berichten.php><b>Bestelling Toevoegen</b></a> 
    </font></span></td> 
  </tr> 
</table>
 
Eh, alles?

Met een VARCHAR kun je niets. Je kunt 'm uitlezen, verder niets. Ja, STRING-functies toepassen, maar daar word je niet wijzer van.

Er bestaan 2382942422 SQL-functies voor datums, ik vraag me af hoe jij wilt sorteren op een datum met VARCHAR. Als je het als DATE opslaat is het gewoon 'ORDER BY datumkolom DESC'.
 
Oke, ik zal me er verder in verdiepen!
nogmaals bedankt voor het script! :) het werkt namelijk!

Groetjes, Wesley
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan