Klopt, dat is inderdaad wel de manier. Ik weet ookdat het totaal aantal factuurnummers 59 is en als ik Count(factuurnummer) doe dat het dan 16 is. Oftewel het antwoord moet 59/16 = 3.6875 zijn. Het probleem alleen is nu hoe ik het in SQL neerzet.quote:Op donderdag 15 december 2005 16:43 schreef IbeBen het volgende:
Ik begin maar met de meest kneuzige vraag,
Wat is het gemiddelde aantal factuurregels in 2004?
Ik heb (onder andere) de tabel Factuurregel dus daar zal het antwoord wel vandaan moeten komen.
Factuurregel
Factuurnummer
Artikelcode
verkoopaantal
verkoopprijs
Volgens mij moet ik dus gewoon de factuurnummer optellen en dan delen door het aantal "gecounte" factuurnummers.
Zelf kwam ik tot
SELECT factuurnummer/COUNT(factuurnummer)
FROM factuurnummer;
IbeBen[/]
moet je voor het gemiddelde aantal factuur regels niet eerst alle factuurregels bij elkeer optellen (de aantallen wat in de tabel staan) en dan delen door het aantal factuurnummers.
hoe dat in sql precies moet weet k niet zo 123 (moet het in 1 query trouwens of mag je er ook meerdere achter elkaar uitvoeren?)
PHP heeft als het goed is weinig te maken met de verwerking van bestanden door de webserver. Wat bedoel je met 'hij geeft het niet weer', krijg je een foutmelding of doet de browser iets verkeerds? Zo ja, wat doet ie dan verkeerd? Dat kan ik niet opmaken uit je post.quote:Op donderdag 15 december 2005 18:32 schreef the_disheaver het volgende:
ff een apache-vraagje...
Mijn server geeft diverse bestanden niet weer. html-bestanden (geen ramp aangezien ik het alleen als php-server gebruik) maar ook geen afbeeldingen, en dat is een groter probleem... Enige afbeeldingsoort wat hij weergeeft is png...tenminste nog iets...
Kan het zijn dat mijn php.ini verkeerd is afgesteld? Het is apache op win xp.
1 2 3 4 5 6 7 8 9 10 | $lines = file('path/naar/je/error.log '); $max = count($lines); echo "<p><b>Dit zijn de laatste tien lijnen, beginnend van lijn:</b>" . $max . "</p>"; for ($i = ($max - 1); $i > ($max - 11); $i--) { echo "<p>" . $lines[$i] . "</p>"; } ?> |
Je moet de ene tabel met de andere joinen. Zoiets als dit:quote:Op donderdag 15 december 2005 19:21 schreef Swetsenegger het volgende:
Join vraagje.
Ik heb bv een tabel users met user_id als auto increment.
En dan heb ik een tabel order, waarbij ik de user id opneem zodat ik weet wie de bestelling heeft gedaan.
Maar de laatste keer dat ik zo'n constructie had, kreeg ik het niet voor elkaar om te joinen van user tabel en order tabel op basis van INNER JOIN tabelnaam ON(user_id= user_id). Ik heb toen uiteindelijk in de order tabel user_id id_user genoemd. Maar dit moet toch gewoon kunnen? Ik moet zeker alleen aliassen?
En kan iemand een heldere uitleg geven over Joins misschien![]()
Klopt. Je krijgt een foutmelding en er wordt niets geinsertquote:-edit- Ik vergat nog een kort vraagje. Een kolom unique maken. Wat heeft dat voor consequenties als er onverhoopt een niet unieke waarde wordt gesubmit? Foutmelding en geen data in de rij neem ik aan?
Hij geeft een lege pagina (bij een afbeelding laat hij alleen een kader zien.quote:Op donderdag 15 december 2005 19:20 schreef JeRa het volgende:
[..]
Ook kan een firewall van invloed zijn, heb je die draaien?
ZoneAlarm is op z'n lichtjes gezegd gewoon zwaar kut in combinatie met dit soort zakenquote:Op donderdag 15 december 2005 19:59 schreef the_disheaver het volgende:
[..]
Hij geeft een lege pagina (bij een afbeelding laat hij alleen een kader zien.
Maar na het uitschakelen van mn firewall doet hij het
FF kijken wat er met ZoneAlarm mankeertDank iig
Ow joepie... Ff proberen het werkend te krijgen , en anders een andere firewallquote:Op donderdag 15 december 2005 20:03 schreef JeRa het volgende:
[..]
ZoneAlarm is op z'n lichtjes gezegd gewoon zwaar kut in combinatie met dit soort zakenhet is iig een bekend fenomeen dat bijv. Apache en ZoneAlarm gewoon niet willen samenwerken.
Hoe kan je een sql foutmelding afvangen? Je kan natuurlijk zeggenquote:Op donderdag 15 december 2005 19:58 schreef JeRa het volgende:
[heldere uitleg]
Klopt. Je krijgt een foutmelding en er wordt niets geinsertwel opletten als je meerdere INSERTs achter elkaar doet die samenhangend zijn dus.
Je moet voor elke kolom aangeven hoe je wilt sorteren.quote:Op donderdag 15 december 2005 20:07 schreef Desdinova het volgende:
Ik heb een tabel newsmet columnamen Year, Month en Day
ik voer de volgende query uit:
$query = "SELECT * FROM news WHERE Item_offline = '0' ORDER BY Year, Month, Day DESC";
Hij ordered hem niet goed. Ik wil de nieuwste datum als eerste item. Sorteren per ID kan niet want de invoer van de datum is handmatig.
Waarom geef je je records geen DATE of DATETIME mee in sql?quote:Op donderdag 15 december 2005 20:07 schreef Desdinova het volgende:
Ik heb een tabel newsmet columnamen Year, Month en Day
ik voer de volgende query uit:
$query = "SELECT * FROM news WHERE Item_offline = '0' ORDER BY Year, Month, Day DESC";
Hij ordered hem niet goed. Ik wil de nieuwste datum als eerste item. Sorteren per ID kan niet want de invoer van de datum is handmatig.
De meeste mensen doen zoiets:quote:Op donderdag 15 december 2005 20:14 schreef Swetsenegger het volgende:
[..]
Hoe kan je een sql foutmelding afvangen? Je kan natuurlijk zeggen
if(mysql_query($query)){
// doe wat
}else{
//insert nog een keer
}
Maar dan controleer je niet op een specifieke SQL fout.
1 2 3 4 5 | if (!$result) { echo mysql_errno() . ': ' . mysql_error(); exit; } |
Ok, ik neem aan dat op mysql.org een lijstje is met nummers en hun specifieke betekenis.quote:Op donderdag 15 december 2005 20:16 schreef JeRa het volgende:
[..]
De meeste mensen doen zoiets:
[ code verwijderd ]
Met mysql_errno() kun je bepalen wat voor fout er opgetreden is
Of, een iets andere schrijfwijze maar met hetzelfde resultaatquote:Op donderdag 15 december 2005 19:58 schreef JeRa het volgende:
[..]
Je moet de ene tabel met de andere joinen. Zoiets als dit:
SELECT *
FROM orders AS o //dit is je eerste tabel die links staat
LEFT JOIN users AS u //dit is je tweede tabel die daar rechts van staat
ON o.user_id = u.user_id //je koppelt de tabellen op de user_id kolom.
WHERE etc
mysql.com ook goed? Er staat een lijstje.quote:Op donderdag 15 december 2005 20:54 schreef Swetsenegger het volgende:
[..]
Ok, ik neem aan dat op mysql.org een lijstje is met nummers en hun specifieke betekenis.
Ik had 'm al gevondenquote:Op donderdag 15 december 2005 21:02 schreef Light het volgende:
[..]
mysql.com ook goed? Er staat een lijstje.
1 2 3 4 5 6 7 | foreach($_SESSION['cart'] as $k => $v){ if(array_key_exists("GW_".$k,$_SESSION['giftwrap'])){ $giftwrap=$_SESSION['giftwrap']['GW_'.$k]; } } ?> |
Die notice slaat op het idee dat je niet zomaar een index van een array mag opvragen die niet bestaat. In Java zou je een IndexOutOfBounds exception krijgen, in C++ wordt zoiets een segmentation fault. Over het algemeen geen goede praktijk dus, en als je ooit verder wilt gaan in programmeren is het handig om eraan te wennen het op de goede manier te doen.quote:Op vrijdag 16 december 2005 00:20 schreef the_disheaver het volgende:
Is het eigenlijk verkeerd om dit soort notice te krijgen? (bv door een if fucntie of een bepaalde variable gelijk is aan een bepaalde waarde)
Notice: Undefined index: afdeling_id in
Het is geen fatal error oid, maar is het nadelig? dwv dat het langzamer duurt (0.0001 seconde...)
Je kunt dit (meestal) eenvoudig oplossen door eerst te bekijken of de variable bestaat. Maar met if(isset()) duurt het script ook enkele millisecondes langer. Welke van die 2 duurt langer?
Natuurlijk is het wel gewoon beter om een script te maken zonder warnings, errors of notice...
In cart.php wordt de array cart en giftwarp gevuld.quote:Op donderdag 15 december 2005 23:24 schreef JeRa het volgende:
Heel apart. Is er ergens nog andere code die met $giftwrap en $_SESSION['giftwrap'] te maken heeft?
Zoiets zou jouw probleem kunnen verklaren:
$giftwrap=&$_SESSION['giftwrap'];
Hierdoor wordt $giftwrap verwezen naar het giftwrap-element uit de $_SESSION array, waarna hij door de regel
$giftwarp = ....;
wordt overschreven, en hiermee meteen de waarde in $_SESSION. Zo in jouw code kan ik niets zien dat fout is.
Het is ook de bedoeling dat $giftwrap gelijk wordt aan var $_SESSION['giftwrap'][specifieke key]quote:edit: oeh, staat register_globals trouwens aan? Als dat zo is, dan is misschien $giftwrap gelijk gesteld aan de variabele $_SESSION['giftwrap'].
1 |
1 2 3 4 5 6 7 8 9 10 11 | $_SESSION['cart']=array(1 => 2, 4 => 1, 7 => 3); $_SESSION['giftwrap']=array(GW_1 => 1, GW_7 => 3); foreach($_SESSION['cart'] as $k => $v){ if(array_key_exists("GW_".$k,$_SESSION['giftwrap'])){ $giftwrap=$_SESSION['giftwrap']['GW_'.$k]; echo $giftwrap."\r\n"; print_r($_SESSION['cart']); print_r($_SESSION['giftwrap']); }} ?> |
1 |
1 |
1 2 3 4 5 6 | session_start(); $_SESSION['cart']=array(1 => 2, 4 => 1, 7 => 3); $_SESSION['giftwrap']=array(GW_1 => 1, GW_7 => 3); header("location:test2.php"); ?> |
1 2 3 4 5 6 7 8 9 10 | session_start(); foreach($_SESSION['cart'] as $k => $v){ if(array_key_exists("GW_".$k,$_SESSION['giftwrap'])){ $giftwrap=$_SESSION['giftwrap']['GW_'.$k]; echo $giftwrap."\r\n"; print_r($_SESSION['cart']); print_r($_SESSION['giftwrap']); }} ?> |
1 2 3 4 | Warning: array_key_exists(): The second argument should be either an array or an object in c:\appserv\www\test2.php on line 4 Warning: array_key_exists(): The second argument should be either an array or an object in c:\appserv\www\test2.php on line |
1 2 3 4 5 6 7 8 9 10 11 | $_SESSION['cart']=array(1 => 2, 4 => 1, 7 => 3); $_SESSION['giftwrap']=array(GW_1 => 1, GW_7 => 3); foreach($_SESSION['cart'] as $k => $v){ if(array_key_exists("GW_".$k,$_SESSION['giftwrap'])){ $giftwrap=$_SESSION['giftwrap']['GW_'.$k]; echo $giftwrap."\r\n"; print_r($_SESSION['cart']); print_r($_SESSION['giftwrap']); }} ?> |
Waarom werkt dit dan wel opdezelfde server?quote:Op vrijdag 16 december 2005 10:40 schreef JeRa het volgende:
Zoals ik al zei, ik heb het vermoeden dat $giftwrap gelijk wordt gesteld aan $_SESSION['giftwrap']. Zodra je een array gaat toekennen aan $_SESSION['giftwrap'] verbreek je die verbinding.
Doe voor de grap eens een unset($giftwrap) voor die foreach-loop en kijk dan eens of het werkt
1 2 3 4 5 6 7 8 9 10 11 | $_SESSION['cart']=array(1 => 2, 4 => 1, 7 => 3); $_SESSION['giftwrap']=array(GW_1 => 1, GW_7 => 3); foreach($_SESSION['cart'] as $k => $v){ if(array_key_exists("GW_".$k,$_SESSION['giftwrap'])){ $giftwrap=$_SESSION['giftwrap']['GW_'.$k]; echo $giftwrap."\r\n"; print_r($_SESSION['cart']); print_r($_SESSION['giftwrap']); }} ?> |
Ben wel benieuwd, zal straks eens kijkenquote:Op vrijdag 16 december 2005 11:19 schreef JeRa het volgende:
Met get_defined_vars() kun je erachter komen welke variabelen er zijn ingesteld voordat je je script draait. Dus:
print_r(get_defined_vars());
Zie je daar iets speciaals aan m.b.t. giftwrap en $_SESSION[giftwrap]?
1 |
Insert into table (field1, field2, field3, field4)quote:Op vrijdag 16 december 2005 14:15 schreef Swetsenegger het volgende:
JeRa, je hebt het regelmatig over multiple inserts. Ik neem aan dat je bedoeld dat je met 1 insert meerdere records kan invoegen?
Waar vind ik daar documentatie over, kan het in de mysql manual niet vinden (of mijn zoekterm klopt niet)
Mail header injection is makkelijker te voorkomen. Volgens de mail-rfc's moeten de mailheaders gescheiden worden door \r\n, maar het is bekend dat sommige servers ook alleen \n als scheiding accepteren. Maar zolang er geen \n in het mailadres staat is mail header injection niet mogelijk (iig niet voor zover ik weet). Het ergste dat er dan nog kan gebeuren is dat de persoon in kwestie geen email krijgt. Da's weliswaar vervelend, maar niet echt ernstig qua veiligheidsrisicoquote:Op vrijdag 16 december 2005 23:10 schreef Swetsenegger het volgende:
[ code verwijderd ]
Deze gebruik ik op een formulier, om redelijk strak te controleren om zo mailinjection te voorkomen.
Maar hij staat wel erg strak, want jeroen.swets@gmail.com pakt hij niet
Zo pakt hij dat wel toch:
'/^[0-9A-Za-z_\-][.][0-9A-Za-z_\-] +[@][0-9A-Za-z_\-]+([.][0-9A-Za-z]+)([.][A-Za-z]{2,4}){0,1}$/x'
of pakt hij dan weer teveel
Zo te zien wordt $giftwrap wel geïnitialiseerd op de session-key 'giftwrap'. Nou zou dit niets uit mogen maken, maar ik denk dat het veranderen van de naam van de variabele (wat je dus al gedaan hebt) de beste oplossing isquote:Op vrijdag 16 december 2005 11:25 schreef Swetsenegger het volgende:
[..]
Ben wel benieuwd, zal straks eens kijken
-edit-
Voor de foreach krijg ik dit terug
-snip-
Regelmatig?quote:JeRa, je hebt het regelmatig over multiple inserts.
Includen is serverside. Als iemand een SELECT gebruikt moet er toch echt een request naar de server om zo'n include uit te voeren; maar ik betwijfel het of je daar iets aan hebt. Wat wil je precies doen?quote:Op zaterdag 17 december 2005 11:46 schreef RichardQuest het volgende:
Ik wil vanuit een select-menu html-files (die gewoon met URL in de <option> staan) includen, zodat het menu behouden blijft. Kan iemand mij helpen?
Ik bedoel dus <select> en niet de SQL SELECT...quote:Op zaterdag 17 december 2005 11:49 schreef JeRa het volgende:
[..]
Includen is serverside. Als iemand een SELECT gebruikt moet er toch echt een request naar de server om zo'n include uit te voeren; maar ik betwijfel het of je daar iets aan hebt. Wat wil je precies doen?
1 2 3 4 5 6 | echo ("<option value="" selected>Selecteer een pagina</option>"); echo ("<option value=pagina1.html>pag 1</option>"); echo ("<option value=pagina2.html>pag 2</option>"); echo ("<option value=pagina3.html>pag 3</option>"); echo ("</select>"); |
Is het geen optie om een onchange te gebruiken voor je SELECT-box? Zodra de gebruiker iets kiest, laadt je het menu opnieuw waarbij je de huidige option op de gekozen waarde zet en onder het menu een bestand include.quote:Op zaterdag 17 december 2005 11:57 schreef RichardQuest het volgende:
[..]
Ik bedoel dus <select> en niet de SQL SELECT...
[ code verwijderd ]
Aan de hand van deze keuze moeten de HTML-pagina's onder het menu komen (met het menu zichtbaar).
Frames is geen optie. Kun je me met de code helpen?quote:Op zaterdag 17 december 2005 12:00 schreef JeRa het volgende:
[..]
Is het geen optie om een onchange te gebruiken voor je SELECT-box? Zodra de gebruiker iets kiest, laadt je het menu opnieuw waarbij je de huidige option op de gekozen waarde zet en onder het menu een bestand include.
Anders wordt het denk ik werken met (i )frames
Moet je wel zeggen waar je vastlooptquote:Op zaterdag 17 december 2005 12:03 schreef RichardQuest het volgende:
[..]
Frames is geen optie. Kun je me met de code helpen?
Oké, na wat gepruts heb ik dit:quote:Op zaterdag 17 december 2005 12:07 schreef JeRa het volgende:
[..]
Moet je wel zeggen waar je vastloopt
Snap je hoe je een actie kunt uitvoeren aan de clientside zodra er een optie wordt gekozen door middel van Javascript? (of eventueel als je dit niet wilt, een formulier versturen zodra de gebruiker op een knop drukt)
Snap je hoe je vervolgens een PHP-bestand kunt aanroepen met daarachteraan de naam van het document dat je wilt openen? Bijv. file.php?item=blaat
En hoe je vervolgens die query kunt ophalen ('item' dus), controleren op waarde en vervolgens het goede bestand includen? (of liever, requiren)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <!-- function Navigeer(lijst) { var Geselecteerd = lijst.selectedIndex // als de bovenste optie geselecteerd is niets doen if (Geselecteerd != 0) { window.location = lijst.options[Geselecteerd].value; } } // --> </SCRIPT> <? echo ("<select name=HTMLkeuze onchange="Navigeer(this);">"); echo ("<option value="" selected>Selecteer een pagina</option>"); echo ("<option value=pag1.html> 1</option>"); echo ("<option value=pag2.html> 2</option>"); echo ("<option value=pag3.html> 3</option>"); echo ("</select>"); ?> |
Dat klopt, aangezien je de location naar de waarde van de OPTION omzetquote:Op zaterdag 17 december 2005 12:15 schreef RichardQuest het volgende:
[..]
Oké, na wat gepruts heb ik dit:
[ code verwijderd ]
Maar nu opent hij de pagina's zonder dat het menu weer terugkomt.
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 | <!-- function Navigeer(lijst) { var Geselecteerd = lijst.selectedIndex // als de bovenste optie geselecteerd is niets doen if (Geselecteerd != 0) { window.location = 'menu.php?item=' + lijst.options[Geselecteerd].value; } } // --> </SCRIPT> <? echo ("<select name=HTMLkeuze onchange="Navigeer(this);">"); echo ("<option value="" selected>Selecteer een pagina</option>"); echo ("<option value=pag1> 1</option>"); echo ("<option value=pag2> 2</option>"); echo ("<option value=pag3> 3</option>"); echo ("</select>"); //Haal item op $item = strtolower(trim($_GET['item'])); if ($item != '') { //Controleer item $toegestaan = array('pag1', 'pag2', 'pag3'); $bestandsnaam = $item . '.html'; if ((!in_array($item, $toegestaan)) || (!file_exists($bestandsnaam))) { exit('Ongeldige keuze.'); } //Include bestand require($bestandsnaam); } ?> |
Ah ok, dus meerdere values in dezelfde tabel. Het is niet mogelijk om met 1 insert meerdere records verdeeld over meerdere tabellen te inserten?quote:Op vrijdag 16 december 2005 23:39 schreef Light het volgende:
[..]
Insert into table (field1, field2, field3, field4)
values (1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6), (4, 5, 6, 7)
You get the idea
Ja klopt, dat heb ik gelezen.quote:Op vrijdag 16 december 2005 23:43 schreef Light het volgende:
[..]
Mail header injection is makkelijker te voorkomen. Volgens de mail-rfc's moeten de mailheaders gescheiden worden door \r\n, maar het is bekend dat sommige servers ook alleen \n als scheiding accepteren. Maar zolang er geen \n in het mailadres staat is mail header injection niet mogelijk (iig niet voor zover ik weet). Het ergste dat er dan nog kan gebeuren is dat de persoon in kwestie geen email krijgt. Da's weliswaar vervelend, maar niet echt ernstig qua veiligheidsrisico
Wellicht kun je wat met mysql_error(), door de output van deze functie na het connecten even te laten zien?quote:Op zaterdag 17 december 2005 12:55 schreef PunisherADF het volgende:
Hallo,
Ik heb nog steeds problemen met het connecten naar een MySQL database.
Ik heb Apache 2 / PHP 5 / Mysql 5 draaien, MySQL Front connect goed naar de database die werkt dus ook goed. PHP scripts draaien goed op de Apache 2 server maar zodra ik vanaf PHP een connect wil maken naar de MySQL db gaat er iets mis. Ik roep het mysql_connect() aan met de benodige argumenten maar het hele script doet dan niks. error_reporting staat op e_all maar die geeft ook niks weer. Zodra ik mysql_connect in me script zet lijkt het wel of niks meer werkt.
Iemand nog tips want ik kom er niet echt meer uit ?
Voor zover ik weet niet nee. Als je meerdere INSERTs doet die op elkaar leunen (zeg door een foreign key) dan kun je het beste dus eerst LOCK TABLES table1 WRITE, table2 WRITE gebruiken om te verzekeren dat er geen DELETE in de tussentijd kan plaatsvinden bijvoorbeeldquote:Op zaterdag 17 december 2005 13:03 schreef Swetsenegger het volgende:
[..]
Ah ok, dus meerdere values in dezelfde tabel. Het is niet mogelijk om met 1 insert meerdere records verdeeld over meerdere tabellen te inserten?
Tja, de regex voor een e-mailadres heeft al vele hoofdbrekens opgeleverd. Je kunt er nooit zeker van zijn, maar met zoiets is het toch wel redelijk te checken? Heb 't ff snel bedacht, kan goed zijn dat er iets niet aan klopt, dus feel free to enhance/fixquote:Op zaterdag 17 december 2005 13:06 schreef Swetsenegger het volgende:
[..]
Ja klopt, dat heb ik gelezen.
Maar sowieso wil ik wel op een valid mail adres checken.
Ik heb deze reguliere expressie trouwens eens gevonden voor een javascript check, maar ik begrijp er geen moer van:
/^[^@]+@[^@.]+\.[^@]*\w\w$/
Client side werkttie prima overigens
1 |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |