Σελίδα 1 από 1

MySQL: mysql_fetch_array();

Δημοσιεύτηκε: Τετ Μαρ 17, 2010 11:11 pm
από Virus•Hacker•Kontos
Ρε παιδια εδω και εβδομαδες προσπαθω να καταλαβω σε μεγαλο βαθμο αυτο το παράδειγμα κωδικα που εχω βρει.

Κώδικας: Επιλογή όλων

<?php
$result = mysql_query("SELECT * FROM Persons
WHERE FirstName='Peter'");
//Μεχρι εδω ειμαι ΟΚ
//Περναει σε μια μεταβλητη ολες τις τιμες (απο το table Persons)σε οποια στηλη το firstname ειναι Peter

while($row = mysql_fetch_array($result)) // To while τη ρολο βαραει? Μονο σε περιπτωση που υπαρχουν περισσοτερες απο 2 σειρες με firstname Peter, σωστα?
  {
  echo $row['FirstName'] . " " . $row['LastName']; // Το FirstName και το LastName οριζονται απο την MySQL στη χρηση οταν ειναι row η ειναι κατι σαν πινακας με ονοματα αντι για αριθμους στην μεταβλητη row?
  echo "<br />";
  }
?> 
Και επιπλεον, θελω λιγη βοηθεια να φτιαξω ενα login system με βαση αυτη την εντολη, αν και πιστευω πως μετα απο την απαντηση σας θα το βρω μονος μου, αλλα μεχρι τωρα ολες οι προσπαθειες καταληγουν σε error.

Re: MySQL: mysql_fetch_array();

Δημοσιεύτηκε: Πέμ Μαρ 18, 2010 8:41 am
από chris
Θα σου πω αναλυτικότερα το μεσημέρι, δες αυτό:
http://php.net/manual/en/function.mysql-fetch-array.php

Re: MySQL: mysql_fetch_array();

Δημοσιεύτηκε: Πέμ Μαρ 18, 2010 6:02 pm
από chris
Πρώτα από όλα η mysql_query επιστρέφει ένα resource που εσύ κρατάς στο result.

Το while έπειτα εκτελείται για όλες τις σειρές που πληρούσαν τα κρητήρια του mysql_query. Η mysql_fetch_array επιστρέφει κάθε φορά σαν πίνακα την επόμενη εγγραφή. Τα FirstName και LastName είναι τα ονόματα των στηλών. Σε λίγο σου στέλνω το login system του ERMIS.

Edit: έφτασε...
Το παρακάτω login system είναι από ένα απλό σύστημα private file hosting.

Κώδικας: Επιλογή όλων

//Declare some variables
$tbl_name="users";
$username  = $_POST['username'];
$password = $_POST['password'];

//Connect and select the database 
$db = mysql_connect("$SQL_Host","$SQL_User","$SQL_Pass") or die("Could not connect to database!");
mysql_select_db($SQL_DBName,$db) or die("Could not find database!");

//Prepare and sanitize the query
$query=sprintf("SELECT * FROM %s WHERE username='%s' AND password = '%s'",mysql_real_escape_string($tbl_name),mysql_real_escape_string($username),mysql_real_escape_string($password));

//Send the query to SQL
$answer= mysql_query($query, $db);

//Count the responses
if($answer) $users= mysql_num_rows($answer);
else $users=0;

//Check whether there was at least 1 match
if($users>=1)
{
	//Declare some variables
	$row = mysql_fetch_array($answer);
	$priv = $row['privileges'];
	
	//Register the session and redirect to login_success.php
	session_start();
	$_SESSION['username']=$username;
	$_SESSION['privileges']=$priv;
	header("location:successful_login.php");
	exit;
}
else
{
	//If the login was incorrect redict to failed_login.php  
	header("location:failed_login.php");
	exit;
}
Η mysql_num_rows() απλά επιστρέφει τον αριθμό των εγγραφών που βρέθηκαν.
Αν έχεις απορίες πες μου.

Re: MySQL: mysql_fetch_array();

Δημοσιεύτηκε: Πέμ Μαρ 18, 2010 6:55 pm
από Virus•Hacker•Kontos
οκ, ευχαριστω παρα πολυ... τωρα πλεον το καταλαβα... και ευχαριστω και για το login system, που ηταν το παραδειγμα για να καταλαβω...

Re: MySQL: mysql_fetch_array();

Δημοσιεύτηκε: Παρ Αύγ 13, 2010 7:42 am
από dorathy
thanks friend.

Re: MySQL: mysql_fetch_array();

Δημοσιεύτηκε: Σάβ Αύγ 14, 2010 7:56 pm
από pman
//Prepare and sanitize the query
$query=sprintf("SELECT * FROM %s WHERE username='%s' AND password = '%s'",mysql_real_escape_string($tbl_name),mysql_real_escape_string($username),mysql_real_escape_string($password));
Χωρίς σιγουριά για αυτό που θα πω αλλά έστω εάν στο query δεν έβαζες το WHERE για να το ορισείς να ψάξει συγκεκριμένα και απλώς μετά κατά το while έβαζες
ένα if( $username == '$tbl_name' && $password=='$password') δεν θα ήσουν οκ?

Re: MySQL: mysql_fetch_array();

Δημοσιεύτηκε: Σάβ Αύγ 14, 2010 8:54 pm
από chris
sotiris έγραψε: Χωρίς σιγουριά για αυτό που θα πω αλλά έστω εάν στο query δεν έβαζες το WHERE για να το ορισείς να ψάξει συγκεκριμένα και απλώς μετά κατά το while έβαζες
ένα if( $username == '$tbl_name' && $password=='$password') δεν θα ήσουν οκ?
ναι, όντως, θα ήταν το ίδιο πράγμα...

Κώδικας: Επιλογή όλων

 if($row['username']==$username && $row['password'] == $password) 
Άλλα γιατί; Για αποφυγή injections υπάρχουν άλλοι τρόποι... Αν έκανα κάτι τέτοιο θα έκανα ουσιαστικά γραμμική αναζήτηση. Ελπίζω και πιστεύω πως το MySQL κάνει κάτι καλύτερο...

Re: MySQL: mysql_fetch_array();

Δημοσιεύτηκε: Δευ Ιούλ 04, 2011 6:04 pm
από Memas
Για να μην κάνω καινούργιο topic ρωτάω εδώ... :lol:
Έχω πρόβλημε με MySQL encoding καθώς θέλω να βάλω ελληνικά μέσα τις εγγραφές αλλά όταν προσπαθώ να τις τυπώσε μου εμφανίζονται σαν (?). Ξέρει κανείς τι να κάνω;;; :D

Re: MySQL: mysql_fetch_array();

Δημοσιεύτηκε: Τετ Ιούλ 06, 2011 4:51 pm
από kernelpanic
Κοίτα τα charset των πεδίων που θα έχουν ελληνικά μέσα.
Επίσης κοίτα με τι charset εισάγεις τα δεδομένα.

Re: MySQL: mysql_fetch_array();

Δημοσιεύτηκε: Κυρ Ιούλ 10, 2011 4:56 pm
από stathis
Βάλε τα πεδία χαρακτήρων και τα tables σου utf8_bin ή utf8_general_ci

Re: MySQL: mysql_fetch_array();

Δημοσιεύτηκε: Τετ Ιούλ 13, 2011 10:29 am
από kernelpanic
stathis έγραψε:Βάλε τα πεδία χαρακτήρων και τα tables σου utf8_bin ή utf8_general_ci
Αυτό, και επόμενη φορά search the fantastic web. ;)