Onderstaande code geeft dit op het scherm:
column= trick_a1 invoeg= Turtle (Backflip)
Could not connect: FUNCTION tweelijners.Turtle does not exist
info: "tweelijners" is de naam van de database.
voor een of andere reden zoekt mysql naar de invoer als kolomnaam, terwijl het net andersom is toch?
De array $tricksinvoegen bevat alle correcte kolomnamen
Via $_POST["trick"] kan ik effectief alle 18 tricknamen ophalen die ik in een andere pagina invoer.
@ Johnny: UPDATE balletlists SET trick_a1 = Lazy Susan WHERE Pilot_name = 'Nils Delacourt'
Dat klopt dus, trick_a1 is de eerste kolom waar gegevens in moeten, Lazy Susan is die eerste waarde, en de naam is die van de piloot. Dat klopt dus allemaal
@ Dos Moonen: zonder die aanhalingsteken kreeg ik altijd foutmeldingen, vermoedelijk omdat het variabelen zijn en geen waardes op zich
[size=xsmall]Toevoeging op 17/06/2011 19:16:26:[/size]
wanneer ik diezelfde code weer uitvoer met piloot Hugo en Rolling Susan als eerste waarde dan krijg ik deze fout:
column= trick_a1 invoeg= Rolling Susan
Could not connect: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Susan WHERE Pilot_name = 'Hugo'' at line 1
[size=xsmall]Toevoeging op 17/06/2011 19:19:18:[/size]
en nog meer verwarrends: als ik piloot Hugo invoer met een eerste trick die uit 1 woord bestaat dan geeft hij dit:
column= trick_a1 invoeg= Fade
Could not connect: Unknown column 'Hugo' in 'where clause'
[size=xsmall]Toevoeging op 17/06/2011 19:23:15:[/size]
De invoeg waarde heb ik nu tussen enkele aanhalingstekens staan, daarmee is het spatie-probleem e.d. al van de baan. Nu de rest nog ;-)
foreach ( $_POST["trick"] as $v)
{
$invoeg = "'".$v."'";
?
Onbekende gebruiker
17-06-2011 20:10
Stop, terug naar de tekentafel. Dit databasemodel is verkeerd, leer [google]normaliseren[/google].
Controleer of een post is gedaan met if($_SERVER['REQUEST_METHOD'] == 'POST')
Zie ook bijvoorbeeld [php]sprintf[/php].
Bouw foutafhandeling in, zie wat [php]mysql_query[/php] teruggeeft, gebruik geen 'or die'.
@Karl Karl: dit project is heel specifiek en vergt later geen input van willekeurige gebruikers. De enige gebruiker is een administrator die een trickspartywedstijd administratief afhandelt. Hiertoe dienen alle gegevens in een database te zitten, dat is evident. Ook berekende gegevens omdat die later dienen om een rangschikking op te maken. In principe is dit een eenvoudig project dat enkel ingewikkeld is omdat er zoveel verschillende parameters zijn die in de loop van de wedstrijd kunnen/zullen wijzigen.
Het moeilijke aan het schrijven is niet zozeer het concept op zich dan wel de benodigde syntax. Alle voorbeelden in handleidingen en fora gaan steeds over gekende waarden (vb 'naam' = "Janssen Paul"). In dit project dient veel opgevraagd te worden met gebruik van loops en dus ook veldnamen e.d. die kunnen opgebouwd worden in variabelen. Er is al een paar keer gezegd toen dit project ter sprake kwam dat het door een ervaren programmeur op een halve dag te maken valt, alleen wil er niemand aan beginnen, lol
Zelf heb ik ervaring met BASIC zoals dat vroeger op de Spectrum en Amiga computers (AMOS) gebruikt werd en een beetje Z80 machinetaal. Dat is allemaal geleden van de jaren '80 hoor. Ik doe m'n best om dit gedaan te krijgen en heb al hele stukken code herschreven aan de hand van tips hier en uit handleidingen.
Momenteel kan ik al:
- de naam van een competitie invullen in de database
- alle 47 te gebruiken tricks uitlezen uit de database
- de 47 tricks voor 18 posities als keuze voorstellen en uitkiezen én doorgeven naar een volgende .php pagina en daar inlezen.
Het is dat resultaat dat ik nu in 18 opeenvolgende velden wil inschrijven. De invoer is er (en is correct), de syntax en gebruiken zijn evenwel frustrerend moeilijk en niet zo meteen ergens netjes beschreven terug te vinden in een handleiding of forum.
Foutafhandeling doe ik momenteel door onderaan elke pagina alle variabelen uit te lijsten, zo heb ik al heel wat fouten kunnen opsporen en oplossen.
Zodra het ganse project een solide geraamte heeft kan ik alle inputs e.d. volledig gaan afschermen en voorzien in een opvang van eventuele verkeerde invoer.
Eerst dus een werkende schets maken, dan de details bijschaven. :-)
Uiteindelijk zal ik het wel draaiende krijgen (ik geef mezelf een jaar), maar simpel is het zeker niet.
Het "normaliseren" ziet er mij heel logisch uit en allicht een 'must' voor mensen die professioneel bezig zijn met databases. Voor dit project is het evenwel schieten met een tweeloop op een mug. Deze sport telt amper 20 deelnemers in Nederland en België samen. We kunnen ons geen professionele programmeur veroorloven, laat staan dat die ooit gaat begrijpen wat dit project beoogt te doen.
?
Onbekende gebruiker
17-06-2011 20:46
gewijzigd op 17-06-2011 21:04
Uit jou verhaal haal ik dat je niet wilt normaliseren omdat er weinig gebruikers zijn. Ik zie niet in waarom dat een reden is om het niet te doen. Normaliseren doe je om te zorgen dat je een normaal, goed werkend, goed bruikbare database krijgt. Niet om te zorgen dat er iets is met gebruikers.
Kijk nou ook eens op [php]mysql_query[/php], het kan altijd zijn dat een query niet gelukt is (server down o.i.d.) dat moet je ook ondervangen en is dus foutafhandeling. Foutafhandeling is niet debuggen, waarin je de fouten van het script probeert weg te halen.
Edit: Verder denk ik dat je geen Z80 machinetaal hebt gedaan, maar gewoon assembler, zie ook dit. En ik ben ook bekend met assembler.
inderdaad, het was assembler
vooral het rechtstreeks in het schermgeheugen van de Spectrum schrijven was een openbaring, niet in het minst door het attributen probleem in blokjes van 8x8
Het heeft me wel een basis gegeven in logica én véél koude koffie en korte nachten :-)
Kijk Johnny, daar kan ik wat mee!
De invulwaarde had ik ondertussen al goed, de escape_string staat in lijn 3 (zie hoger)
Maar de fout, die heb jij gevonden!
De Pilot_name moet tussen de ' ' staan, die voeg ik er aan toe als volgt:
<?PHP
$pilotname = "'".$pilotname."'";
?>
En nu schrijft de query wél alles naar de database zoals het hoort in deze loop
Van harte bedankt!