Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας και πάλι...

 

Ναι, σωστά καταλάβατε, όταν το θεμα λέει πρόβλημα με query-connection, αφορά στο γνωστο σπαστικό μήνυμα

>Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\AppServ\www\cultmap\testserchdebug.php on line 39

 

εχω τσεκάρει το query και το connection 100φορές και τίποτα...

 

το query ειναι αυτό

>$query="
SELECT
simeia.xu AS xu ,
simeia.yu AS yu ,
simeia.simeia_idf AS idf ,
simeia.simeia_onoma AS onoma ,
typos.typos_xroma AS xroma
FROM
simeia, typos
WHERE
simeia.xroma=typos.typos_idf
";
//parakato einai to line 39
$result=mysql_query($query, $connection);
$numOfRows=mysql_num_rows($result);
echo($numOfRows);
if($numOfRows==0)
{echo 'Δεν βρέθηκαν αποτελέσματα. Παρακαλω προσπαθήστε πάλι, εισάγωντας νεα κριτηρια αναζήτησης.'.'</br>';}
$a=0;
while($arr=mysql_fetch_array($result)) {
$xu[$a]=$arr['xu'];
$yu[$a]=$arr['yu'];
$idf[$a]=$arr['idf'];
$onoma[$a]=$arr['onoma'];
$xroma[$a]=$arr['xroma'];
$a++;
}

 

και το connection , το οποίο το κάνω include once απ άλλο αρχειο ειναι αυτό (όλο το αρχείο)

><?php
header('Content-Type: text/html; charset=UTF-8');
$connection=mysql_connect('localhost','visit','visit') or die ('Sorry, cannot connect to host, due to '.mysql_error().'<br /><br/>'.'Please try again later');

mysql_select_db(xartis) or die('Sorry, cannot connect to the database, due to '.mysql_error().'<br /><br/>'.'Please try again later');
mysql_query('SET NAMES UTF8');

?> 

 

Επίσης μου πεταει

>Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\cultmap\testserchdebug.php on line 40

και

>Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\cultmap\testserchdebug.php on line 45

αλλα μαλλον πρεπει να "λύσω" το πρωτο warning για να φυγουν και τα υπόλοιπα

 

εχω τσεκάρει συνατξη του κωδικα, τη βάση δεδομένων, το γελειο ειναι οτι το ιδιο αρχειο connection το χρησιμοποιώ και σε άλλα αρχεια και κανενα προβλημα στα αλλα αρχεια...

το επισης γελειο ειναι οτι αυτο το query, οταν το βαζω στη βαση , και το εκτελω με mysql δουλευει μια χαρα

τι μπορει να κανω λάθος ?

 

plz plz καποιος

 

Ευχαριστω προκαταβολικα

Δημοσ.

Μήπως φταίει οτι τα querys είναι μέσα σε functions της php??

Δηλαδή αν ο χρήστης επιλέξει κάτι, τότε καλείται η μια συνάρτηση που περιέχει και το query, αλλιώς μια αλλη function, με διαφορετικό query....

Δημοσ.

Φίλε subdee, καταρχας ευχαριστω για τις απαντησεις. Εβαλα μονα εισαγωγικα στο ονομα της βασης, και πάλι, καμια διαφορα, βγάζει λάθος, όταν τα query είναι σε functions.

 

όταν δεν είναι σε functions , όλα ok, είτε έχω εισαγωγικα είτε όχι...

 

Εχω 2 query μεσα σε functions. Αν ο χρήστης κάνει αναζητηση εκτελειται το ενα function, με το query μεσα προφανως, με συγκεκριμενα κριτηρια, ενω αν δεν κανει αναζητηση εκτελειται το αλλο function , με αλλο query, το οποίο φερνει όλα τα στοιχεια της βασης. Αν κανω σχόλια τα functions και αφησω "χύμα" τα query , εκτελούνται κανονικα. Τι να συμπερανω? Οτι τα functions εμποδιζουν την εκτελεση των query? Δεν ειναι λογικο, αφου οταν ειχα πρωτο-φτιαξει ετσι τον κωδικα, δουλευαν όλα κανονικα.

 

γιατί δεν γινομουν μπουζουξής????

Δημοσ.

λοιπόν

η μεταβλητη yes ερχεται απο search form.aαν ειναι γεματη εκτελειται το ενα function με το query με τα συγκεκριμενα κριτηρια, αλλιως το αλλο, που τα φερνει όλα απο τη βαση...παμε...

 

αρχειο με τα functions

>
include_once('connection.php');

//if data actually came from the form do the search function or the default function
if ($yes==="yes")
{
ser();
sert();
}
else 
{
def();
deft();
}

function def(){
//the default query to get all the x,y,id and name and throw them in an array
$query="
SELECT
simeia.xu AS xu ,
simeia.yu AS yu ,
simeia.simeia_idf AS idf ,
simeia.simeia_onoma AS onoma ,
typos.typos_xroma AS xroma
FROM
simeia, typos
WHERE
simeia.xroma=typos.typos_idf
";

echo($query);

$result=mysql_query($query, $connection);
$numOfRows=mysql_num_rows($result);
echo($numOfRows);
if($numOfRows==0)
{echo 'Δεν βρέθηκαν αποτελέσματα. Παρακαλω προσπαθήστε πάλι, εισάγωντας νεα κριτηρια αναζήτησης.'.'</br>';}
$a=0;
while($arr=mysql_fetch_array($result)) {
$xu[$a]=$arr['xu'];
$yu[$a]=$arr['yu'];
$idf[$a]=$arr['idf'];
$onoma[$a]=$arr['onoma'];
$xroma[$a]=$arr['xroma'];
$a++;
echo($a);
}
}


function ser(){
echo "</br>ser function works!</br>";
//getting the data that came from the form
$typeselect=$_POST['typeselect'];
$eraselect=$_POST['eraselect'];
$nm=$_POST['nm'];
$descr=$_POST['descr'];
$chrono=$_POST['chrono'];

echo "$typeselect</br>";
echo "$eraselect</br>";
echo "$nm</br>";
echo "$descr</br>";
echo "$chrono</br>";

	
//"trimming" data to clear out whitespaces at the front and the end
$nm=trim($nm);
$descr=trim($descr);
$chrono=trim($chrono);
$typeselect=trim($typeselect);
$eraselect=trim($eraselect);


//checking for completely empty fields 
if(!$chrono && !$descr  && !$name && $typeselect==" " && $eraselect==" ")
{echo ' Δεν έχετε εισάγει καθόλου δεδομένα. Παρακαλώ προσπαθήστε πάλι.</br>'; }


//the query to get the specific x,y,id,name, according to the data that came from the form and then throw them in an array
$querys="
SELECT
simeia.xu AS xu ,
simeia.yu AS yu ,
simeia.simeia_idf AS idf ,
simeia.simeia_onoma AS onoma ,
typos.typos_xroma AS xroma
FROM
simeia, typos
WHERE
simeia.xroma=typos.typos_idf AND
simeia.simeia_onoma LIKE '$nm%' AND
simeia.chronology LIKE '$chrono%' AND
simeia.simeia_description LIKE '$descr%' AND
simeia.typos LIKE '$typeselect%' AND
simeia.era LIKE '$eraselect%' 
";



echo($querys);

$res=mysql_query($querys, $connection);
$numRows=mysql_num_rows($res);
echo($numRows);
if($numRows==0)
{echo 'Δεν βρέθηκαν αποτελέσματα. Παρακαλω προσπαθήστε πάλι, εισάγωντας νεα κριτηρια αναζήτησης.</br>';}

$b=0;
while($arrr=mysql_fetch_array($res)) {
$xu[$b]=$arrr['xu'];
$yu[$b]=$arrr['yu'];
$idf[$b]=$arrr['idf'];
$onoma[$b]=$arrr['onoma'];
$xroma[$b]=$arrr['xroma'];
$b++;
}
}

//transform arrays from php to js for search function
function sert(){
echo "sert function works!</br>";?>
<script type="text/javascript" language="JavaScript">
var xu=[]; 
<?
for($i=0;$i<$b; $i++)
{echo "xu[$i]='".$xu[$i]."';\n";}
?>
</script>

<script type="text/javascript" language="JavaScript">
var yu=[]; 
<?
for($i=0;$i<$b; $i++)
{echo "yu[$i]='".$yu[$i]."';\n";}
?>
</script>

<script type="text/javascript" language="JavaScript">
var idf=[]; 
<?
for($i=0;$i<$b; $i++)
{echo "idf[$i]='".$idf[$i]."';\n";}
?>
</script>

<script type="text/javascript" language="JavaScript">
var onoma=[]; 
<?
for($i=0;$i<$b; $i++)
   {echo "onoma[$i]='".$onoma[$i]."';\n";}
?>
</script>

<script type="text/javascript" language="JavaScript">
var xroma=[]; 
<?
for($i=0;$i<$b; $i++)
{echo "xroma[$i]='".$xroma[$ia]."';\n";}
?>
</script>
<?
//}

///////////////////////////////////////////////////////////////////////////////
//transform arrays from php to js for default function

function deft(){
echo "deft function works!</br>";?>
<script type="text/javascript" language="JavaScript"> 
var xu=[];   
<?
for($v=0;$v<$a; $v++) 	
{echo "xu[$v]='".$xu[$v]."';\n";}
?>
</script> 

<script type="text/javascript" language="JavaScript"> 
var yu=[];   
<?
for($v=0;$v<$a; $v++) 	
{echo "yu[$v]='".$yu[$v]."';\n";}
?>
</script> 

<script type="text/javascript" language="JavaScript"> 
var idf=[];   
<?
for($v=0;$v<$a; $v++) 	
{echo "idf[$v]='".$idf[$v]."';\n";}
?>
</script> 

<script type="text/javascript" language="JavaScript"> 
var onoma=[];   
<?
for($v=0;$v<$a; $v++) 	
{echo 'onoma[$v]="'.$onoma[$v].'";\n';}
?>
</script> 

<script type="text/javascript" language="JavaScript"> 
var xroma=[];   
<?
for($v=0;$v<$a; $v++) 	
{echo 'xroma[$v]="'.$xroma[$v].'";\n';}
?>
</script> 
<?
}
//making this var "empty" again, for re-use
$yes="no";
?>

 

στα τελευταια 2 functions μετατρεπω τους πινακες απο Php σε javascript, για να τους "πιασω" και να τους "πεταξω" σε svg κωδικα (νομιζω δεν ειναι απαραιτητο να παραθεσω τον κωδικα της svg)

 

και ολοκληρο οτ αρχειο του connection

 

><?php
header('Content-Type: text/html; charset=UTF-8');
$connection=mysql_connect('localhost','visit','visit') or die ('Sorry, cannot connect to host, due to '.mysql_error().'<br /><br/>'.'Please try again later');

mysql_select_db('xartis') or die('Sorry, cannot connect to the database, due to '.mysql_error().'<br /><br/>'.'Please try again later');
mysql_query('SET NAMES UTF8');

?> 

 

ευχαριστω και παλι

Δημοσ.

Οι functions σου πάνε να προσπελάσουν τη μεταβλητή $connection πράγμα που δεν είναι δυνατό γιατί αυτή δηλώνεται στο global scope.

 

Η ευκολότερη λύση είναι να κάνεις το εξής σε κάθε function:

 

>function def(){
   global $connection;
   // και τα άλλα ως έχουν
}

 

Η λύση αυτή είναι "κακή" αν τη δεις με κριτικό μάτι βέβαια, αλλά για κάτι "καλό" θα έπρεπε να ξαναγράψεις τα πάντα από την αρχή.

 

Μερικά tips:

 

1. Βάλε error_reporting(E_ALL & E_STRICT) στην αρχή κάθε script και φτιάξε όλα τα notices που θα βγάλει. Αν το είχες από την αρχή έτσι, θα έβλεπες κατευθείαν ότι η $connection είναι undefined και δε θα ψαχνόσουν.

 

2. Διάβαζε τι κάνουν οι functions που χρησιμοποιείς. Η mysql_query μπορεί να επιστρέψει false (όπως κάνει στην περίπτωσή σου), αλλά δεν έχεις βάλει κανένα έλεγχο γι' αυτή την περίπτωση.

Δημοσ.

Λοιπόν,

 

όταν καλείς μια συνάρτηση και δημιουργείς κάποιες μεταβλητές μέσα στην συνάρτηση (ο παρακάτω κώδικας είναι από αυτόν που μας έγραψες)

>
$xu[$a]=$arr['xu'];
$yu[$a]=$arr['yu'];
$idf[$a]=$arr['idf'];
$onoma[$a]=$arr['onoma'];
$xroma[$a]=$arr['xroma'];

 

τότε οι μεταβλητές αυτές (έτσι όπως το έχεις κάνει εσύ) δεν μπορείς να τις χρησιμοποιήσεις και κάπου αλλού.

 

Επομένως, το query γίνεται μια χαρά στην βάση σου.

Το θέμα είναι στις μεταβλητές.

Δημοσ.

Παιδιά σας ευχαριστώ πολύ όλους...

Uberalles, γίνεσαι λίγο πιο αναλυτικός?

Defacer, τι θα πρότεινες ως πιο σωστή λύση?

 

Και πάλι σας ευχαριστώ όλους...

Δημοσ.

Έχει δίκιο ο defacer δεν το είχα προσέξει.

Μπορείς να κάνεις το παρακάτω και δεν χρειάζεται να καλέσεις το $connection

 

>
$sql = "SELECT id FROM mytable WHERE myfield > '2'";
if (mysql_query($sql))
{
 $find_query = mysql_query($sql);
 if (mysql_num_rows($find_query))
 {
   while($found_query = mysql_fetch_array($find_query))
   {

   }
 }
}

 

αλλιώς θα πρέπει να το καλέσεις στην function σου έτσι

def($connection)

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...