[PHP/MySQL] Insert value's in een lus.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Edit: ff een enter achter de INSERT INTO geplaatst voor jullie leesgenot.
Ik ben bezig met een functie om zo abstract mogelijk een insert script te maken, en ben nu bijna klaar, alleen liep tegen het laatste probleem aan (eigenlijk had ik het uit lopen stellen :))
: het aantal $value's staat nog niet vast, maar in mijn script krijg ik dat niet voor elkaar en moet ik zelf invullen hoeveel items er in moeten:

Dit is de string:
PHP:
1
2
3
4
<?php 
$tabelString = "INSERT INTO ".$tabelNaamString." (".$tabelRijString.") VALUES
-> ('$insertItems[0]','$insertItems[1]','$insertItems[2]')";  
?>


Dit zijn de waardes (allemaal komen ze oorspronkelijk uit een formulier)

PHP:
1
2
3
4
5
6
7
8
<?php
$tabelNaamString = "user";
$tabelRijString = "user_ID, user_Pass, function";
$insertItems[0] = "hendrik"; (usernaam)
$insertItems[1] = "schapie"; (pass)
$insertItems[2] = "Member"; (functie)
//Het aantal items en meer van die shit staan ookal vast, maar het leek me niet relevant aan het probleem.
?>


Nu zijn er dus 3 insertItems, maar het kan ook voorkomen dat het er minder dan 3 zijn of meer (dus 1...N items om te inserten).

PHP:
1
<?php VALUES ('$insertItems[0]','$insertItems[1]','$insertItems[2]')  ?>

Ik kan deze regel niet in een String gooien, dus heeft iemand een id hoe ik dit het beste aan kan pakken als ik het in een lus wil gooien?

Aan de gene die mij hier me helpt: Alvast bedantk!

[ Voor 20% gewijzigd door Verwijderd op 13-04-2003 17:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt het count gebruiken om het aantal elementen in een array te tellen.
Je kunt een for-loop gebruiken om elementen van een array af te gaan
Je kunt deze achter elkaar concateneren om je totale string te genereren

Of je kunt iets doen als:

PHP:
1
2
array_walk($insertItems, 'AddSlashes');
$insertPart = '(\'' . implode('\',\'', $insertItems) . '\')';

[ Voor 56% gewijzigd door Verwijderd op 12-04-2003 15:14 ]


Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024

Roa

Hmmm, ik heb ook zoiets bij een artikel script. Daarin geef ik aan hoeveel pagina's er zijn (dat stuur ik mee via een hidden field) en dan heb ik een while die huidig met totaal vergelijkt, als deze niet overéén komen, doe dan zoiets als...hmm..naja, kijk maar:

PHP:
1
2
3
4
5
6
while ($pnr <= $p){ 
$content = $_POST["page$pnr"];
$sub_titel = $_POST["sub_titel$pnr"];
$new = "INSERT INTO `pages` (`sub_titel`, `content`) VALUES ( '$sub_titel', '$content')";
$in = mysql_query($new);
}


Zo dus...maar ik weet niet of je er wat aan hebt

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024

Roa

Roa schreef op 13 april 2003 @ 12:11:
Hmmm, ik heb ook zoiets bij een artikel script. Daarin geef ik aan hoeveel pagina's er zijn (dat stuur ik mee via een hidden field) en dan heb ik een while die huidig met totaal vergelijkt, als deze niet overéén komen, doe dan zoiets als...hmm..naja, kijk maar:

PHP:
1
2
3
4
5
6
7
while ($pnr <= $p){ 
$content = $_POST["page$pnr"];
$sub_titel = $_POST["sub_titel$pnr"];
$new = "INSERT INTO `pages` (`sub_titel`, `content`) VALUES ( '$sub_titel', '$content')";
$in = mysql_query($new);
$pnr++;
}


Zo dus...maar ik weet niet of je er wat aan hebt
Kuch, SORRY, ik wilde even dat $pnr++; toevoegen maar ik drukte op quote 8)7

[ Voor 12% gewijzigd door Roa op 13-04-2003 12:12 ]

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 11:40
Roa: hij wil dat het aantal velden variabel is.

TS: al naar de functie join() gekeken? Overigens zou ik ook een array met datatypes meegeven, omdat niet alle variabelen tekstvelden zullen zijn!
En addslashes enzo (sql injection protection).. volgens mij kun je array_map hiervoor gebruiken. (daarmee kun je een functie toepassen op een array)

[ Voor 9% gewijzigd door nescafe op 13-04-2003 13:14 ]

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nescafe schreef op 13 April 2003 @ 13:14:
Roa: hij wil dat het aantal velden variabel is.

1. TS: al naar de functie join() gekeken?
2. Overigens zou ik ook een array met datatypes meegeven, omdat niet alle variabelen tekstvelden zullen zijn!
3. En addslashes enzo (sql injection protection).. volgens mij kun je array_map hiervoor gebruiken. (daarmee kun je een functie toepassen op een array)
1. Uit de PHP-help:join() is an alias to implode(), and is identical in every way. ;)

2. Wat bedoel je hier mee? Want de code is zo geschrijven dat hij value's ontvangt. (dus vervolglijsten, radio, textvelden, textarea's, checkboxes, welke zijn er dan nog meer?)

3. De oplossing van lnfinitive is intens goed hoor ;), of bedoel je met de datatypes?

4. Nog een klein vraagje: is het mogenlijk om een variabele naam naar een string te zetten, dus dat $blaat met een functie bv $string = stringeling($blaat);
en dat daar dus uit komt met echo $string;
$blaat (dus dat $string == "$blaat";)

Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 11:40
Verwijderd schreef op 13 April 2003 @ 14:39:
[...]


1. Uit de PHP-help:join() is an alias to implode(), and is identical in every way. ;)

2. Wat bedoel je hier mee? Want de code is zo geschrijven dat hij value's ontvangt. (dus vervolglijsten, radio, textvelden, textarea's, checkboxes, welke zijn er dan nog meer?)

3. De oplossing van lnfinitive is intens goed hoor ;), of bedoel je met de datatypes?

4. Nog een klein vraagje: is het mogenlijk om een variabele naam naar een string te zetten, dus dat $blaat met een functie bv $string = stringeling($blaat);
en dat daar dus uit komt met echo $string;
$blaat (dus dat $string == "$blaat";)
Uhh zie nu ook het stukje van array_walk, lette even niet goed op :)

Wat ik bedoel is dat de uitkomst van een radio of checkbox ook wel eens een integer kan zijn, en dan moet je daar geen quotes om zetten in je insert-string.

Punt 4 snap ik niet echt, maar volgens mij kom je met $string = "$blaat" al een aardig eind, maar het nut ervan ontgaat me eigenlijk.

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nescafe schreef op 13 April 2003 @ 16:14:
[...]
1.Uhh zie nu ook het stukje van array_walk, lette even niet goed op :)

2.Wat ik bedoel is dat de uitkomst van een radio of checkbox ook wel eens een integer kan zijn, en dan moet je daar geen quotes om zetten in je insert-string.

3.Punt 4 snap ik niet echt, maar volgens mij kom je met $string = "$blaat" al een aardig eind, maar het nut ervan ontgaat me eigenlijk.
1. Hij had zijn code aangepast nadat jij had gepost, dus je was gewoon goed bezig :)
edit: er zit nog een foutje in zijn code (wrong prameter_count) dus ik gaat nog ff kijken wat er mis is.

2. Ow, zo.

3. Mwa, ja het klopt wel, maar ik zat ook een beetje te twijfelen hoe je het helemaal kon aanpakken:

Want je kunt namelijk met parse_str() van een string: variabelen maken:
(geript uit de php man)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php 
$str = "first=value&arr[]=foo+bar&arr[]=baz"; 
parse_str($str); 
echo $first;  // value 
echo $arr[0]; // foo bar 
echo $arr[1]; // baz 

parse_str($str, $output); 
echo $output['first'];  // value 
echo $output['arr'][0]; // foo bar 
echo $output['arr'][1]; // baz 
?>


en ik dacht dat dan de stap naar van een string: functies maken simpel zou zijn.

Want ik ontvang dus een string en die moet eerst een variabele zijn (om een path mee goed te zetten) en daarna een functie, om een andere variabele te her berekenen.
Dus is er ook zoiets als parse_str() voor functies?
------------------------ of
is het mogenlijk om een functie mee te sturen vanuit een form?
------------------------of
met eval() alleen ik krijg daar niet voorelkaar om de functie te laten "draaien"
terwijl ik dacht dat dat de bedoeling er van was:
PHP:
1
2
3
4
5
6
7
8
9
10
function functietest(){
echo "blaat";
}

     $string = "functietest()";
     echo $string; // geeft "functietest()" weer
     $string = addslashes($string);
     eval("\$string = \"$string\";");
     $string = stripslashes($string);
     echo $string; //geeft "functietest() weer maar het is de bedoeling dat er "blaat" komt te staan

[ Voor 44% gewijzigd door Verwijderd op 13-04-2003 19:19 . Reden: commentaar er bij gezet ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Na ik heb iig van String naar functie helemaal af
dus voor de geintresseerden zal ik ff mijn code hier neer stoppen.

de string die binnen komt uit de form = 'item0|functietest|item0'
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function getFunctieLine($item){
            $tmpFunctionArray = explode("|", $item);
            $itemName = array_shift($tmpFunctionArray);
            $itemName = getFirstPiece($itemName);
            $functionName = array_shift($tmpFunctionArray);
            for ($i = 0; $i < count($tmpFunctionArray); $i++){
               $tmpFunctionArray[$i] = getLocalName($tmpFunctionArray[$i]);
            }
            $tempString = $functionName . '(' . implode(',', $tmpFunctionArray) .')';
            $tempString = $itemName . " = " . $tempString;
            return $tempString;
   }
   function getLocalName($item){
            $tempString = "$" . str_replace("item", "insertItems[",$item)."]";
            return $tempString;
   }
   function getFirstPiece($item){
            $tempString = getLocalName($item);
            $tempString = str_replace("$", "", $tempString);
            return $tempString;
   }

Hier mee krijg je een string alla : insertItems[0] = functietest(insertItems[0]);

PHP:
1
2
3
4
5
6
   for ($i = 0; $i < $functieLength; $i++){// plaatst de include_functies code
         $tempString = "functie" . $i; //de naam van de funtie
         $getString = $_POST[$tempString]; //de functiestring
         $uitvoerString = getFunctieLine($getString); //chopped de functieline gehelemaal goed
         eval("\$".$uitvoerString.";"); //gebruikt de code
   }

hier mee voer je de string uit
Pagina: 1