[PHP] Checken van variabele in database (syntax fout?)

Pagina: 1
Acties:
  • 300 views

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedemorgen GT,

In een CMS dat ik aan het maken ben kun je categorieen toevoegen (voor een blog-achtige site). Nu wil ik voorkomen dat je twee dezelfde categorie boxjes toevoegt --> daarvoor het volgende script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 $newcategorybox = $_POST["newcategorybox"];
 $confirmcategorybox = $_POST["confirmcategorybox"];
include("../DB/dbinfo.php");
$cxn = mysqli_connect("$hostname","$accountname","$accountpassword","$database") or die ("Could not connect to server, please try again later.");
$query = "select distinct categoryboxes_box from devpax_categoryboxes where categoryboxes_box='$newcategorybox'";
$result2 = mysqli_query($cxn,$query) or die ("couldn't execute query");

$count = 1;
   while($row = mysqli_fetch_assoc($result2)){
       foreach($row as $value){
           $var[$count] = $value;
                   if($var[$count] == $newcategorybox)       
                                    {Header("Location:manage_categoryboxes.php?messagenum=2");}
                         $count++;
                    }
   }


categoryboxes_box is verticale rij met alle categorieboxen.. Het resultaat (als dat er is) wordt uitgepakt en per array variable gecontroleerd... Ik zou volgens mij ook zoiets kunnen zeggen: "als result2 iets is, ga dan naar die pagina met message 2???"...

Maargoed, het werkt niet, ik heb de array ge-echoed en de query blijkt goed te zijn.... Wat is dan de fout hier??? :X

ALvast bedankt!

[ Voor 4% gewijzigd door Verwijderd op 23-10-2009 10:21 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Gebruik aub [php] tags voor php code, en fix vervolgens je indenting, dan kunnen we daarna pas echt je code lezen.

En lees je in voor wat betreft sql injection.

[ Voor 17% gewijzigd door Voutloos op 23-10-2009 10:16 ]

{signature}


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Waarom zo moeilijk doen met een loop en een array? Kun je niet het aantal rows teruggeven en een melding tonen als dat groter is dan nul?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
:') hmm dat is wel een goede :O.. 1mo even proberen

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm odd... heb nu
PHP:
1
2
$amount = mysqli_num_rows($result2);
        if($amount > 0){Header("Location:manage_categoryboxes.php?messagenum=2");}

Ook $amount ge-echoed... komt soms 1 en soms 0 uit.. maar werkt nog steeds niet??
ik snap t neit meer... is dat if statement fout???

[ Voor 10% gewijzigd door Verwijderd op 23-10-2009 10:26 ]


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
als waarde groter is dan nul, weergeef melding, anders ga door...

alleen het script is wat ingewikkeld terwijl het simpeler kan. Je wilt dus eigenlijk controleren of de categorie niet dubbel ingevoerd wordt?

Twitter Flickr


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja.. geen dubbele categories

EDIT:
PHP:
1
2
$amount = mysqli_num_rows($result2);
    if($amount == 1){Header("Location:manage_categoryboxes.php?messagenum=2");}

dit werkt ook niet :')

[ Voor 73% gewijzigd door Verwijderd op 23-10-2009 10:28 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17-09 21:27

Creepy

Tactical Espionage Splatterer

"werkt nog steeds niet". Definieer dat eens ;)

Wat is amount en wat gebeurd er precies als amount 0 is of als amount meer ie dan 0? Controleer de volledige source van je pagina in beide gevallen eens en kijk eens of je daar wat aan kan zien. Oftewel: sla nu eens echt aan het debuggen ;)

Maar schrijf nu voor jezelf eerst eens even op welke stappen je moet doen om dit te controleren en ga dan pas code kloppen. Het is echt niet meer dan controleren of de nieuw ingevoerde categorie al ergens voorkomt.

[ Voor 27% gewijzigd door Creepy op 23-10-2009 10:30 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
kun je het script eens neerzetten zoals je het nu test?

Twitter Flickr


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
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
37
38
39
40
41
42
43
44
<?php
include("../login/sessionconfirm.php");
 $newcategorybox = $_POST["newcategorybox"];
   $confirmcategorybox = $_POST["confirmcategorybox"];

include("../DB/dbinfo.php");
$cxn = mysqli_connect("$hostname","$accountname","$accountpassword","$database") or die ("Could not connect to server, please try again later.");
$query = "select distinct categoryboxes_box from devpax_categoryboxes where categoryboxes_box='$newcategorybox'";
$result2 = mysqli_query($cxn,$query) or die ("couldn't execute query");



$amount = mysqli_num_rows($result2);
    if($amount == 1){Header("Location:manage_categoryboxes.php?messagenum=2");}






 
   if($newcategorybox == $confirmcategorybox && $newcategorybox){
connect_and_process($newcategorybox);

}
else{Header("Location:manage_categoryboxes.php?messagenum=2");
echo "Please check your input!  \n";

}
   
function connect_and_process($newcategorybox){
include("../DB/dbinfo.php");
$cxn = mysqli_connect($hostname,$accountname,$accountpassword,$database) or die ("Could not connect to server, please try again later.");

$query = "insert into devpax_categoryboxes (categoryboxes_box) VALUES ('$newcategorybox')";


$result = mysqli_query($cxn,$query) or die ("couldn't execute query");

Header("Location:manage_categoryboxes.php?messagenum=1");


} 
?>


Het onderste gedeelte werkt... categorien toevoegen gaat zonder problemen... Dat stuk heb ik ook tussen /**/ tags gezet... En die "filter" getest.. welke waarde $amount geeft bij een "dubbel" geval...

[ Voor 7% gewijzigd door Verwijderd op 23-10-2009 10:31 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17-09 21:27

Creepy

Tactical Espionage Splatterer

En wat gaat daar nu precies mis? Wat werkt er nu wel? Wat had je verwacht? Je bent uiteraard weer zelf aan het debuggen geslagen, dus wat heb je zelf al ontdekt?

Het is hiet niet de bedoeling om je code te dumpen en ons het te laten fixen, maar dat is nu precies wat je wel doet...

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
vervang die header door een echo. Je zou ook de query kunnen uitvoeren SELECT * FROM categories en dan in een array zetten en dan met while vergelijken. Is voor jou overzichtelijker...

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • Tjolk
  • Registratie: Juni 2007
  • Nu online
Ik zou gewoon zoiets zeggen:
PHP:
1
2
3
4
5
6
7
$aantal = mysql_num_rows($result);
if($aantal > 0) {
    echo "bestaat al";
}
else {
    //doe je ding
}

Ofwel: if én else. Want je moet ook voorkomen dat het script de categorie alsnog toevoegt.

Tjolk is lekker. overal en altijd.


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
Creepy schreef op vrijdag 23 oktober 2009 @ 10:32:
En wat gaat daar nu precies mis? Wat werkt er nu wel? Wat had je verwacht? Je bent uiteraard weer zelf aan het debuggen geslagen, dus wat heb je zelf al ontdekt?

Het is hiet niet de bedoeling om je code te dumpen en ons het te laten fixen, maar dat is nu precies wat je wel doet...
offtopic:
*Iedereen is ooit begonnen

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Waarom zou je uberhaupt in *($&%@$^naam redirecten voor elke error message. :X

Overigens hoop ik dat je ook een unique constraint in je database hebt, want anders mag je je ook inlezen voor wat betreft 'race conditions'. ;)
JefSnare schreef op vrijdag 23 oktober 2009 @ 10:34:
[...]
offtopic:
*Iedereen is ooit begonnen
Dus? Dan leert hij nu hoe te debuggen, anders blijf je een beginner. B)

[ Voor 33% gewijzigd door Voutloos op 23-10-2009 10:36 ]

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hm... Nou.. dat onderste gedeelte klopt.. werkt goed.. geen problemen tot nu toe... Het probleem zit m in dat if statement... Als die value voor $amount gelijk is aan 1.. Dan hoort hij terug te gaan naar die categorie toevoeg pagina... Dat doet ie niet.. btw, ik dumpte dat stukje even omdat jef daarom vroeg ^^

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17-09 21:27

Creepy

Tactical Espionage Splatterer

JefSnare schreef op vrijdag 23 oktober 2009 @ 10:34:
[...]


offtopic:
*Iedereen is ooit begonnen
Commentaar op modwerk? -> Feedback op moderatie binnen de Devschuur ;)

En dat je beginner bent is niet erg. Dat er code wordt gedumpt zonder dat de beginner er zelf moeite in wil steken is dat wel en dat is naar mijn gevoel en gezien de historie precies wat er gebeurd. Lief van je dat je de TS wlt helpen maar als hij zelf geen moeite wil doen dan gaat/wil hij er ook niks van leren ;) Als er altijd voor hem wordt gedebugt gaat hij het ook niet leren. Debuggen leer je voornamelijk door te doen. En mocht je hierop door willen gaan, dan kan dat in Feedback op moderatie binnen de Devschuur, voor hier is het offtopic.

[ Voor 17% gewijzigd door Creepy op 23-10-2009 10:38 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
Creepy schreef op vrijdag 23 oktober 2009 @ 10:36:
[...]

Commentaar op modwerk? -> Feedback op moderatie binnen de Devschuur ;)

En dat je beginner bent is niet erg. Dat er code wordt gedumpt zonder dat de beginner er zelf moeite in wil steken is dat wel en dat is naar mijn gevoel en gezien de historie precies wat er gebeurd. Lief van je dat je de TS wlt helpen maar als hij zelf geen moeite wil doen dan gat/wil hij er ook niks van leren ;)
offtopic:
True...

Twitter Flickr


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou, wat een ontvangst... Als ik heb laten overkomen dat de moeite zoek is, excuses daarvoor.... Debuggen betekent toch voornamelijk; kijken per stukje wat het doet en wat het niet doet? In dit geval was mijn "debug" resultaat; "if stukje doet het niet" --> en ik zie atm geen oplossing?

Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
Verwijderd schreef op vrijdag 23 oktober 2009 @ 10:36:
hm... Nou.. dat onderste gedeelte klopt.. werkt goed.. geen problemen tot nu toe... Het probleem zit m in dat if statement... Als die value voor $amount gelijk is aan 1.. Dan hoort hij terug te gaan naar die categorie toevoeg pagina... Dat doet ie niet.. btw, ik dumpte dat stukje even omdat jef daarom vroeg ^^
echo die amount even, dan kun je zien wat je amount waarde is, probeer met een if/else een message te krijgen gelijk aan 1 of ongelijk aan 1 ;)

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17-09 21:27

Creepy

Tactical Espionage Splatterer

Dan hoort hij terug te gaan naar die categorie toevoeg pagina... Dat doet ie niet
En wat gebeurt er dan precies wel? Zet overal eens wat echo's neer en laat de Header()s eens weg, dan kan je precies zien wat er gebeurd. Nu blijf je maar gokken.
Debuggen betekent toch voornamelijk; kijken per stukje wat het doet en wat het niet doet? In dit geval was mijn "debug" resultaat; "if stukje doet het niet" --> en ik zie atm geen oplossing?
Nee, het betekent controleren wat er nu gebeurd en waarom. Je hebt nog helemaal niet gekeken waarom de if het niet doet, wat de inhoud is van welke variabelen en waarom en welke stukjes code er nu precies worden uitgevoerd. Als je dat weet, dan pas heb je ge-debugt ;) (tip: loopt je code NA je if en header() misschien nog door? )

In de PRG FAQ staat ook een stukje over debuggen. Lees dan eens door. Ga dan zelf eens debuggen. Bedenk ook even het volgende: je hebt een probleem met een enorm basic iets en je komt er zelf niet uit. Waarom is dat precies? (tip: als je echt gaat debuggen dan kom je er vast wel uit ;) )

Conclusie: ga echt debuggen. Als je dat hebt gedaan en je komt er dan echt niet uit dan kan je een nieuw topic openen maar let daarbij aub op PRG Beleid. Geef precies aan wat je hebt geprobeerd, wat er niet lukte, wat er wel gebeurd en wat je had verwacht. Dan kunnen wij je ook een stuk beter helpen.

[ Voor 69% gewijzigd door Creepy op 23-10-2009 14:02 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
Verwijderd schreef op vrijdag 23 oktober 2009 @ 10:40:
Nou, wat een ontvangst... Als ik heb laten overkomen dat de moeite zoek is, excuses daarvoor.... Debuggen betekent toch voornamelijk; kijken per stukje wat het doet en wat het niet doet? In dit geval was mijn "debug" resultaat; "if stukje doet het niet" --> en ik zie atm geen oplossing?
offtopic:
Mijn fout, mod vond mijn opmerking niet gepast :| edit: excuses daarvoor...


Inderdaad wat Creepy zegt, probeer zo veel mogelijk echo's erin te zetten en desnoods comments in je script om het te verduidelijken voor je zelf. Een PSD (Programma Structuur Diagram) wil ook soms nog wel eens helpen

Twitter Flickr


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
$amount waarde is 1, als de category al bestaat. if($amount == 1){echo "bestaat";} werkt prima..

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17-09 21:27

Creepy

Tactical Espionage Splatterer

En nu dicht dus ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.