Sie sind nicht angemeldet.

1

02.02.2011, 09:49

MySql, php an aner droleg Saachen

Ech brauch e bessi Hëllef an ech kucken do mol haaptsächlech an dem Johnnie seng Richtung :-)
Mee all Input ass natierlech wëllkomm.

Aaaalso: ech hunn op engem Site en Formulaire mat Hëllef vun enger Softwäre entwëckelt. Den Input gëtt an enger Mysql-Db gespeichert. Den Layout vun der Db hänkt als Screenshot hei drun. Soubal den User säin Formulaire fortschéckt gëtt ënner dem Formulaire eng Lëscht aktualiséiert, déi 't Datesätz aus der Db uweist. Dat klappt alles sou wéi et soll an eigentlech kéint ech glécklech sinn meeeeeeeeee:

Den Benotzer wielt aus enger Dropdownlëscht aus fir wéi eng Manche am Dag en sech umelden wëll. Et därfen awer pro Manche maximal 10 Leit sinn. De Plang ass elo (merci Johnnie fir d'Iddi) amplaz dem 11. User no Ausfëllen eng Meldung ze weisen dass dat net geet, him d'Méiglechkeet guer net ze ginn aus der Dropdownlëscht eng Manche auszefëllen fir déi schon 10 Inscriptiounen an der Db stinn.

Ech muss also eemol d'Unzuel vun deenen eenzelnen Manchen zielen an ausserdem 't Dropdownlëscht entspriechend fidderen.

Hei hunn ech eng Iddi fonnt wéi ech zielen an begrenzen kann. Allerdéngs wëll ech jo keng Feelermeldung ausginn mee d'Dropdownlëscht entspriechend upassen. Hei hunn ech en Usaz fonnt wéi ech d'Selectlëscht dynamesch fëllen kann, mee iergendwéi stinn ech um Schlauch wéi ech déi 2 Saachen ënner een Hut brengen kann.

Theoretesch hat ech sou geduecht:
eng nei Tafel uleeën mat deenen 8 Manchen, soss näicht.
den Formulaire déi existent Manchen zielen loossen. Wann Unzuel méi kleng wéi 10, dann déi Manche aus der neier Tafel an d'Selectlëscht mat iwwerhuelen. Am aneren Fall déi Manche ewen guer net zur Auswiel ginn.

Kann do een mer mat der Syntax ënner d'Ärm gräifen?

An enger 2. Phas hat ech geduecht eng Lëscht unzeweisen, déi seet: an der Manche 1 sinn nach x Plazen fräi, an der Manche 2 sinn nach y Plazen fräi, etc. Mee dat sollt ech selwer hikréien wann ech bis den Code fir dat Geziels zesummen hunn ;)
»Änder« hat folgendes Bild angehängt:
  • sql_table.PNG
Politik ist die Kunst, die Bürger immer wieder so schnell über den Tisch zu ziehen, daß sie glauben, die dabei entstehende Reibungshitze sei Nestwärme

2

02.02.2011, 15:23

Ech sinn e Schratt méi wäit mee lo hänken ech :)

Ech hunn elo eng Select-Lëscht, déi di méiglech Selektiounen (also d'Manchen) aus enger zweeter Tafel hëllt. Bleift den Problem mat der Sql-Query. Wéi formuléiren ech déi?

Fir dass der iech e Bild maache kënnt, hei den Code wéi en lo ass:

Zitat

global $manche;
$strquery = "SELECT manche_id, manche_caption FROM jos_aste_forms_data ORDER BY manche_id; ";
$rows = ff_select( $strquery );
$manche="0;Sélectionner manche;0\n";
if (Count($rows))
{
foreach($rows as $record)
{
$manche.="0;$record->manche_caption; $record->manche_id\n";
}
}
Also, wéi muss déi Query ausgesinn fir dass en am Fall wou manche 1 schon 10 mol virkënnt, d'manche 1 net aus der tafel jos_aste_forms_data ausgewielt gëtt?

Dann fällt mer lo nach op: firwat déi Variabel $strquery ?

Geet dat hei:

Zitat

$strquery = "SELECT manche_id, manche_caption FROM jos_aste_forms_data ORDER BY manche_id; ";
$rows = ff_select( $strquery );
net och esou?

Zitat

$rows = ff_select( "SELECT manche_id, manche_caption FROM jos_aste_forms_data ORDER BY manche_id; " );
Politik ist die Kunst, die Bürger immer wieder so schnell über den Tisch zu ziehen, daß sie glauben, die dabei entstehende Reibungshitze sei Nestwärme

3

03.02.2011, 10:56

Hmm, sin lo op dësem Punkt:

Zitat

// load the standard form creation utilities
$this->execPieceByName('ff_InitLib');

// create table if it does not yet exist
ff_query(
"CREATE TABLE IF NOT EXISTS `#__aste_gk` (".
"`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,".
"`prenom` VARCHAR( 30 ) NOT NULL ,".
"`nom` VARCHAR( 30 ) NOT NULL ,".
"`societe` VARCHAR( 30 ) NOT NULL ,".
"`age` VARCHAR( 3 ) NOT NULL ,".
"`arme` VARCHAR( 10 ) NOT NULL ,".
"`manche` TINYINT( 10 ) NOT NULL ,".
"`rem` VARCHAR( 150 ) NOT NULL ,".
"`food` TINYINT( 1 ) DEFAULT '0' NOT NULL,".
"`anonyme` TINYINT( 1 ) DEFAULT '0' NOT NULL,".
"PRIMARY KEY (`id`)".
") TYPE=MyISAM AUTO_INCREMENT=1"
);

// create create select list options from table #jos_aste_forms_data
global $manche;
$strquery = "SELECT manche_id, manche_caption FROM jos_aste_forms_data ORDER BY manche_id; ";
$rows = ff_select( $strquery );
$manche="0;Sélectionnez manche;\n";
$db = JFactory::getDBO();
$db->setQuery("Select count(manche) From jos_aste_gk group by manche");


if (Count($rows))
{
foreach($rows as $record)
{
if( $db->loadResult() < 10 )
{
$manche.="0;$record->manche_caption; $record->manche_id\n";
}
}
}

Nom 10. Enregistrement wäist en mer lo am Auswielfeld GUER KENG Option méi un amplaz just déi Manche, déi voll ass ewechzeloossen.

Ganz vill kann net méi feelen...

Virschléi?
Politik ist die Kunst, die Bürger immer wieder so schnell über den Tisch zu ziehen, daß sie glauben, die dabei entstehende Reibungshitze sei Nestwärme

4

03.02.2011, 14:47

Et war eng schwéier Geburt mee et schéngt bis elo ze klappen

Zitat

// create create select list options from table #jos_aste_forms_data
global $manche;
$strquery = "SELECT manche_id, manche_caption FROM jos_aste_forms_data ORDER BY manche_id; ";
$rows = ff_select( $strquery );
$manche="0;Sélectionnez manche;\n";

// only create option in select-list when < 10 entries in manche
$db = JFactory::getDBO();
$nx = 1;

if (Count($rows))
{
foreach($rows as $record)
{
$db->setQuery("Select count(manche) From jos_aste_gk inner join jos_aste_forms_data on jos_aste_gk.manche = jos_aste_forms_data.manche_id where jos_aste_forms_data.manche_id = $nx");
if( $db->loadResult() < 10 )
{
$manche.="0;$record->manche_caption; $record->manche_id\n";
$nx = $nx+1;
}
else
{
$nx = $nx+1;
}
}
}

Politik ist die Kunst, die Bürger immer wieder so schnell über den Tisch zu ziehen, daß sie glauben, die dabei entstehende Reibungshitze sei Nestwärme

5

07.02.2011, 08:04

Dir helleft et jo duerchaus an Denger Entwecklung, wann een Dech bastelen léisst :)

6

07.02.2011, 09:07

Häss mech awer och mol missen fluchen héiren :D

Hei iwwrigends d'Resultat: http://www.aste.lu/fr/inscription-concou…on-gros-calibre
Politik ist die Kunst, die Bürger immer wieder so schnell über den Tisch zu ziehen, daß sie glauben, die dabei entstehende Reibungshitze sei Nestwärme

7

07.02.2011, 16:27

Kann ech mer virstellen :) Gesäit op den éischte Bleck gudd aus.

Sorry, ech woer d'läscht Woch busy.

Jempi

Administrator

Beiträge: 2 590

Wohnort: Beim neien Prisong

Beruf: Meckerer

  • Nachricht senden

8

07.02.2011, 16:59

Änder,

Esou wäit wéi ech däi Code ka beuerteelen (ech kenne keen php, awer am SQL an allem wat dat fir Probleemer ka matsechbréngen, warr ech 25 Joer laang Spezialist), hues du nach ee Probleem, deen leider net esou einfach mat engem individuellen Test ze entdecken ass:

Ech résüméieren, fir sécher ze stellen, dass ech dech richteg verstan hunn: Du wëlls net, dass sech méi ewéi 10 Leit an di selwescht Manche aschreiwen. Duerfir affichéiers du engem User just déi Manchen, déi manner ewéi 10 Aschreiwungen hunn an du verléiss dech dorop (also du schreiws an, ouni nach eng Kéier ze kontrolléieren, op net trotzdeem schon 10 Useren ageschriwwe sinn).

Hei en Szenario, wou et an d'Box geet (ech ginn dir d'chronologesch Evénementer):
  1. An der Manche17 sinn 9 Useren ageschriwwen.
  2. User 1 mellt sech un a kritt natierlech Manche17 ugewisen.
  3. User 2 mellt sech un a kritt och Manche17 ugewisen (User 1 drénkt grad Kaffi).
  4. User 1 ass mam Kaffi färdeg a schreiwt sech a Manche17 an, dei elo vun 10 Useren verlaangt gëtt.
  5. Natierlech verschwënnt doduercher Manche17 net um Affichage vu User 2.
  6. User 2 entscheed sech och fir Manche17 a ..... bang!!!!

Ech wëll dech net démoraliséieren, mee esou an ähnlech Probleemer hat ech während iwwer 20 Joer um Schreiwdësch leien.
"Truth is the most valuable thing we have. Let us economize it."
Mark Twain

9

07.02.2011, 17:20

Jo, lo wous de et sees ass deen Problem net vun der Hand ze weisen. D'Wahrscheinlechkeet, dass et virkennt ass zwar zimlech kleng mee se ass do.

Wann ech dann elo:

- d'Formulardaten vum 11. User iwwerhuelen mee virum MySQL-INSERT an d'Tafel mat engem php-IF zielen wéivill Aschreiwungen fir dei Manche dra sinn, sollt eng 11. Manche definitiv net méiglech sinn? Dann kritt den User ewen en Message, dass en eng aner Manche soll wielen. Dat wollt ech eigentlech vermeiden mee sinn jo net dovunner ausgaangen, dass een den Formular ophuet bis 10 Anerer sech ugemeld hunn. Mee et muss een jo mat Allem rechnen.

Geet deen If-Test net och direkt am MySql-Code?
Politik ist die Kunst, die Bürger immer wieder so schnell über den Tisch zu ziehen, daß sie glauben, die dabei entstehende Reibungshitze sei Nestwärme

Jempi

Administrator

Beiträge: 2 590

Wohnort: Beim neien Prisong

Beruf: Meckerer

  • Nachricht senden

10

07.02.2011, 17:31

Geet deen If-Test net och direkt am MySql-Code?

Änder,

Dat weess ech net, mat mySQL hunn ech ni geschafft, ech wees just, dass hier Prozeduralsprooch zimmlech komplett ass. Vläicht kann eise Superjhempjohnny do weider hëllefen. Et deet mir leed, mee, wéi's du jo haut hei am Forum gesinn hues (bei de Gebuertsdeeg), fänken ech esou lues un, Altersdemenz ze kréien.... ;)
"Truth is the most valuable thing we have. Let us economize it."
Mark Twain

11

07.02.2011, 17:34

Jo holla,

e groussen Prost dann op Zolver :beer:

Hat dat net gesinn.
Politik ist die Kunst, die Bürger immer wieder so schnell über den Tisch zu ziehen, daß sie glauben, die dabei entstehende Reibungshitze sei Nestwärme

Jempi

Administrator

Beiträge: 2 590

Wohnort: Beim neien Prisong

Beruf: Meckerer

  • Nachricht senden

12

07.02.2011, 17:41

D'Wahrscheinlechkeet, dass et virkennt ass zwar zimlech kleng mee se ass do.

Änder,

Kenns du ieren dem Murphy säi Gesetz net? Da studéier mol hei:

Zitat

Wenn etwas schiefgehen kann, dann geht es schief.
Wenn etwas auf verschiedene Arten schiefgehen kann, dann geht es immer auf die Art schief, die am meisten Schaden verursacht.
Hat man alle Möglichkeiten ausgeschlossen, bei denen etwas schiefgehen kann, eröffnet sich sofort eine neue Möglichkeit.
Die Wahrscheinlichkeit, dass ein bestimmtes Ereignis eintritt, ist umgekehrt proportional zu seiner Erwünschtheit.
Früher oder später wird die schlimmstmögliche Verkettung von Umständen eintreten.
Wenn etwas zu gut erscheint, um wahr zu sein, ist es das wahrscheinlich auch.
Wenn etwas nicht schiefgegangen zu sein scheint, dann wurde der Fehler lediglich noch nicht entdeckt, wodurch alles nur noch schlimmer wird.
Geht etwas nicht schief, so tritt sofort Regel 1 in Kraft.

Gleew mier, ech hunn a méngem Beruff alleguerten déi Varianten erliewt!
"Truth is the most valuable thing we have. Let us economize it."
Mark Twain

13

08.02.2011, 08:54

Den sechere Wee wier et, nom Erfaassen vun de user donnéen innerhalb vun enger stored procedure d'Zuel vun de user/manche ze kontrolléiren an den neie record eranzehuelen. Procedures sinn atomic, dat heescht, Du bass 100% secher, dass näischt schiefgeet. Du kéinst esouguer de user-record eranhuelen, wann d'manche scho komplett ass, an dem user dann e Wiessel vun der manche uweise loossen.

Eng aner user-frendlech Methode ass et, dem user en 'token' ze ginn, a seng Plaz ze reservéiren, bis en fierdeg mat sengem Formulaire ass. Da muss de natierlech fir déi, déi ni submitten, d'Tokens net 5 oder 10 Minutten erem ewechhuelen, soss ass d'Datebank gläich blockéiert.

Mee fir dat alles an MySQL ze bauen, misst ech och an d'Doc kucken. Laang net méi dermatt geschafft, d'Syntax vergeet mat der Zäit.

Momentan schloen ech mech mat EDI's a mat XML fir d'Douane erem :)

14

08.02.2011, 11:24

Johnny, Johnny, ëmmer lues mat de Pärd :D

Deen Formulaire gëtt eemol d'Joër vun ca. 100 Leit benotzt an et geet net ëm eng gëlle Kou. Ech probéiren mol demnächst do en IF anzebauen. Wanns du do méi eng elegant Sql-Léisung fënns ass dat zwar flott mee elo keng Mussesaach. Hetz dech net, ass net gutt fir d'Härz.
Politik ist die Kunst, die Bürger immer wieder so schnell über den Tisch zu ziehen, daß sie glauben, die dabei entstehende Reibungshitze sei Nestwärme

Ähnliche Themen