update querry
roy - 02/03/2007 18:25
PHP gevorderde
Hallo allemaal,
Ik heb drie functies:
<?php
function parse_data($data)
{
$containers = explode(":", $data);
foreach($containers AS $container)
{
$container = str_replace(")", "", $container);
$i = 0;
$lastly = explode("(", $container);
$values = explode(",", $lastly[1]);
foreach($values AS $value)
{
if($value == '')
{
continue;
}
$final[$lastly[0]][] = $value;
$i ++;
}
}
return $final;
}
function update_db($data_array, $col_check)
{
foreach($data_array AS $set => $items)
{
$i = 0;
foreach($items AS $item)
{
$item = mysql_escape_string($item);
$set = mysql_escape_string($set);
mysql_query("UPDATE layout SET `set` = '$set', `order` = '$i' WHERE `item` = '$item' $col_check ");
$i ++;
}
}
}
// Lets setup Sajax
require_once('Sajax.php');
sajax_init();
// $sajax_debug_mode = 1;
function sajax_update($data)
{
$data = parse_data($data);
update_db($data, "AND (`set` = 'sajax1' OR `set` = 'sajax2' OR `set` = 'sajax3')");
return 'y';
}
sajax_export("sajax_update");
sajax_handle_client_request();
?>
<?php
function parse_data( $data )
{
foreach ( $containers AS $container )
{
$i = 0 ;
$lastly = explode ( "(" , $container ) ; $values = explode ( "," , $lastly [ 1 ] ) ; foreach ( $values AS $value )
{
if ( $value == '' )
{
continue ;
}
$final [ $lastly [ 0 ] ] [ ] = $value ;
$i ++;
}
}
return $final ;
}
function update_db( $data_array , $col_check )
{
foreach ( $data_array AS $set => $items )
{
$i = 0 ;
foreach ( $items AS $item )
{
mysql_query ( "UPDATE layout SET `set` = '$set ', `order` = '$i ' WHERE `item` = '$item ' $col_check " ) ;
$i ++;
}
}
}
// Lets setup Sajax
require_once ( 'Sajax.php' ) ;
sajax_init( ) ;
// $sajax_debug_mode = 1;
function sajax_update( $data )
{
$data = parse_data( $data ) ;
update_db( $data , "AND (`set` = 'sajax1' OR `set` = 'sajax2' OR `set` = 'sajax3')" ) ;
return 'y' ;
}
sajax_export( "sajax_update" ) ;
sajax_handle_client_request( ) ;
?>
Nu wil ik aan de sajax update querry de volgende waarde toevoegen:
kolom: `ip`
waarde: $_SERVER['REMOTE_ADDR'];
Hoe en waar kan ik dat doen?
Met vriendelijke groeten,
Roy de Kleijn
Ps. ik hoop dat mijn probleem een beetje duidelijk is.
12 antwoorden
Gesponsorde links
Rik - 02/03/2007 18:33
Crew algemeen
Als je het ip erbij wilt setten zet je op regel 35 toch
`ip` = '" . $_SERVER['REMOTE_ADDR'] . "'
`ip` = '" . $_SERVER[' REMOTE_ADDR'] . "'
erbij?
roy - 02/03/2007 18:40 (laatste wijziging 02/03/2007 20:13)
PHP gevorderde
nee dat werkt niet, ik denk dat er iets in regel 51 moet veranderd worden.. of een combinatie...
iemand een idee? of moet ik mijn hele script posten?
marten - 02/03/2007 20:16
Beheerder
Vertel eens hoe je dit gebruikt? Dit zijn alleen maar functies. Misschien kan je vertellen waar $data weg komt? En ik heb het gevoel dat dit een bestaand systeem is? Dan mag je waarschijnlijk niet zomaar gaan aanpassen. Check dit eerst even in de disclaimer / License
roy - 02/03/2007 20:21 (laatste wijziging 02/03/2007 20:27)
PHP gevorderde
het is inderdaad een bestaand systeem, maar het mag wel gewijzigd worden...
http://www.rdekleijn.nl/dd/dd.zip
het is een drag&drop script, waarbij elke wijziging wordt opgeslagen in de database... ik wil dat opslaan koppelen aan het IP adres van de computer...
dus eigenlijk een kleine wijziging, maar ik weet niet waar ik het moet wijzigen...
Misschien weet iemand hier raad.
Met vriendelijke groeten,
Roy de Kleijn
marten - 02/03/2007 20:23
Beheerder
Staat in de database de kolom ip er wel bij?
Wat krijg je voor foutmelding als je Boukefalos zijn oplossing doet?
roy - 02/03/2007 20:27
PHP gevorderde
ja, die kolom heb ik wel toegevoegd:)
ik krijg geen foutmelding als ik zijn oplossing probeer... Maar hij doet het gewoon niet.
En als ik een ECHO na de querry zet dan lijkt het wel of hij niet zover komt...
marten - 02/03/2007 20:35
Beheerder
ok
mysql_query("UPDATE layout SET `set` = '$set', `order` = '$i' WHERE `item` = '$item' $col_check ");
mysql_query ( "UPDATE layout SET `set` = '$set ', `order` = '$i ' WHERE `item` = '$item ' $col_check " ) ;
moet je
mysql_query("UPDATE layout SET `ip` = '$ip', `set` = '$set', `order` = '$i' WHERE `item` = '$item' $col_check ");
mysql_query ( "UPDATE layout SET `ip` = '$ip ', `set` = '$set ', `order` = '$i ' WHERE `item` = '$item ' $col_check " ) ;
van maken
Vervolgens moet je eens var_dump($data) doen vlak voordat je je update doet. Of print_r($data); en post die uitkomst eens hier. Heb zomaar het idee dat hij de data uit de array $data haalt. En hier moet je dan wel $ip in zetten
marten - 02/03/2007 20:45
Beheerder
Laat die inhoud van $data eens zien aub
roy - 02/03/2007 20:48 (laatste wijziging 03/03/2007 00:45)
PHP gevorderde
het werkt al een stuk beter, maar het volgende werkt nog niet:
<?PHP
$r = mysql_query("SELECT * FROM layout WHERE `ip` = '".$_SERVER['REMOTE_ADDR']."'");
$totaal_items = mysql_num_rows($r);
if($totaal_items == 0){
mysql_query("INSERT INTO layout (`ip`, `set`, `order`, `item`) VALUES ('".$_SERVER['REMOTE_ADDR']."', '$set', '$i', '$item' $col_check )");
}
else {
mysql_query("UPDATE layout SET `ip` = '".$_SERVER['REMOTE_ADDR']."', `set` = '$set', `order` = '$i' WHERE `item` = '$item' $col_check ");
}
?>
<?PHP
$r = mysql_query ( "SELECT * FROM layout WHERE `ip` = '" . $_SERVER [ 'REMOTE_ADDR' ] . "'" ) ; if ( $totaal_items == 0 ) {
mysql_query ( "INSERT INTO layout (`ip`, `set`, `order`, `item`) VALUES ('" . $_SERVER [ 'REMOTE_ADDR' ] . "', '$set ', '$i ', '$item ' $col_check )" ) ; }
else {
mysql_query ( "UPDATE layout SET `ip` = '" . $_SERVER [ 'REMOTE_ADDR' ] . "', `set` = '$set ', `order` = '$i ' WHERE `item` = '$item ' $col_check " ) ; }
?>
Eerst controleert ie of er zich rijen met het ip-adres van de computer in de database bevinden.
Als er niks wordt gevonden dan zou er een insert moeten plaats vinden.
Anders een update...
Dit gaat helemaal verkeerd, wie heeft een oplossing..
roy - 03/03/2007 12:37 (laatste wijziging 03/03/2007 13:34)
PHP gevorderde
Ik ben er inmiddels achter waar het fout gaat:
<?PHP
foreach($data_array AS $set => $items)
{
$i = 0;
foreach($items AS $item)
{
$item = mysql_escape_string($item);
$set = mysql_escape_string($set);
$r = mysql_query("SELECT * FROM layout WHERE `ip` = '".$_SERVER['REMOTE_ADDR']."'");
$totaal_items = mysql_num_rows($r);
if($totaal_items == 0){
mysql_query("INSERT INTO layout (`ip`, `set`, `order`, `item`) VALUES ('".$_SERVER['REMOTE_ADDR']."', '$set', '$i', '$item' $col_check )");
}
else {
mysql_query("UPDATE layout SET `ip` = '".$_SERVER['REMOTE_ADDR']."', `set` = '$set', `order` = '$i' WHERE `item` = '$item' $col_check ");
}
$i ++;
}
}
}
?>
<?PHP
foreach ( $data_array AS $set => $items )
{
$i = 0 ;
foreach ( $items AS $item )
{
$r = mysql_query ( "SELECT * FROM layout WHERE `ip` = '" . $_SERVER [ 'REMOTE_ADDR' ] . "'" ) ; if ( $totaal_items == 0 ) {
mysql_query ( "INSERT INTO layout (`ip`, `set`, `order`, `item`) VALUES ('" . $_SERVER [ 'REMOTE_ADDR' ] . "', '$set ', '$i ', '$item ' $col_check )" ) ; }
else {
mysql_query ( "UPDATE layout SET `ip` = '" . $_SERVER [ 'REMOTE_ADDR' ] . "', `set` = '$set ', `order` = '$i ' WHERE `item` = '$item ' $col_check " ) ; }
$i ++;
}
}
}
?>
Hij kijkt eerst of er al rijen bestaan met het ip-adres van de computer.
Zo nee, dan doet hij een insert.
Daarna gaat hij weer kijken of er rijen bestaan met het ip-adres van de computer. Nu dus wel.. en dan doet hij een update ipv een insert.
Het is de bedoeling dat iedere computer zijn eigen layout krijgt, en dat wordt dus opgeslagen in de database.
Wie heeft een mogelijke oplossing voor mijn probleem?
Dus zodat hij 1x kijkt of het ip-adres al voorkomt in de database, en daarna de foreach uitvoert met de insert/update.
Met vriendelijke groeten,
Roy de Kleijn
Gesponsorde links
Dit onderwerp is gesloten .